Самая длинная проблема последовательности на программировании сервера к клиенту - PullRequest
1 голос
/ 11 апреля 2020

// Привет всем, что я создал алгоритм работает так, как я его разработал, но я хочу добавить и новые функциональные возможности для него.

Если вы введете, например, следующие шесть чисел: 5 2 12 4 3 9 Вы получите обратно: Длина самой длинной последовательной последовательности = 4 Значения самой длинной последовательной последовательности: [2, 3, 4, 5, 9, 12]

То, что я хочу распечатать, равно:

Если вы введете, например, следующие шесть чисел: 5 2 12 4 3 9 Вы вернетесь: Длина самой длинной последовательной последовательности = 4 Самые длинные значения последовательной последовательности: [2, 3, 4, 5]

Где он включает в себя только номера самой длинной последовательности. Буду признателен за любую помощь или советы, обещаю, что я не буду публиковать некоторое время после этого.

                String ws = is.readUTF();
                String[] wordSequence = ws.split(" ");

                // decide the response

                int size = wordSequence.length;
                int[] arr = new int[size];
                for (int i = 0; i < size; i++) {
                    arr[i] = Integer.parseInt(wordSequence[i]);
                }
                int n = arr.length;
                HashSet<Integer> a = new HashSet<>();
                int ans = 0;
                for (int i = 0; i < n; ++i) {
                    a.add(arr[i]);
                }

                // check each possible sequence from the start
                // then update optimal length                
                for (int i = 0; i < n; ++i) {

                    // if current element is the starting
                    // element of a sequence
                    if (!a.contains(arr[i] - 1)) {

                        // Then check for next elements in the
                        // sequence
                        int j = arr[i];
                        while (a.contains(j)) {
                            j++;
                        }

                        // update optimal length if this length
                        // is more
                        if (ans < j - arr[i]) {
                            ans = j - arr[i];
                        }
                    }
                }


                System.out.println("The largest consecutive subsequence is = " + ans);
                os.write(ans + "\n");
                os.flush();
                System.out.println("Displaying the subsequence " + a.toString());
                String hashtag = a.toString();
                os.write(hashtag + "\n" );
                os.flush();

1 Ответ

1 голос
/ 11 апреля 2020

Если вы хотите напечатать значения самой длинной последовательности, просто запомните начальное значение и текущее самое длинное.

int ans = 0;
int start = 0; // add

if (ans < j - arr[i]) {
   ans = j - arr[i];
   start = arr[i]; // add
}

Затем что-то вроде:

System.out.println(ans);
for(int i=0; i<ans-1; i++)
    System.out.format("%d, ", start+i);
System.out.println(start+ans-1);

Вывод :

4
2, 3, 4, 5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...