Гость
Форумы / Java [игнор отключен] [закрыт для гостей] / Код на нахождение max длины последовательности не проходит все тесты / 2 сообщений из 2, страница 1 из 1
19.01.2020, 22:32
    #39916130
GrossmasteR
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Код на нахождение max длины последовательности не проходит все тесты
Уважаемые форумчане, здравствуйте.
Нужен ваш совет.

Условие задачи: Ввести n-ое кол-во строк не более 1_000 шт., каждая строка натуральное число не более 10_000. Если пользователь вводит 0, то ввод прекратить и последующие числа не учитывать. Найти длину самой большой монотонной последовательности, хоть по возрастанию, хоть по убыванию. [1345790] —3, [1387650] — 4. Ниже мой код. Не могу понять, почему некоторые тесты он проходит, а некоторые нет. Например, [321780] — 2, хотя должно быть 3.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class Main {
    public static void main(String[] args) throws IOException {

        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

        List<Integer> integers = new ArrayList<>();
        List<Integer> lengths = new ArrayList<>();

        while (true) {
            String sN = reader.readLine();
            int n = Integer.parseInt(sN);
            if (n >= 10000) {
                return;
            }
            integers.add(n);
            if (integers.size() >= 1000) {
                return;
            }
            if (n == 0) {
                break;
            }
        }

        int n = 1;

        for (int i = 1; i < integers.size(); i++) {
            if (integers.get(i).equals(integers.get(i - 1) + 1)) {
                n++;
                if (i == integers.get(integers.size() - 1)) {
                    lengths.add(n);
                }
            } else {
                lengths.add(n);
                n = 1;
            }
        }

        Collections.reverse(integers);
        n = 1;

        for (int i = 1; i < integers.size(); i++) {
            if (integers.get(i).equals(integers.get(i - 1) + 1)) {
                n++;
                if (i == integers.get(integers.size() - 1)) {
                    lengths.add(n);
                }
            } else {
                lengths.add(n);
                n = 1;
            }
        }

        lengths.sort((o1, o2) -> o2 - o1);
        System.out.println(lengths.get(0));
    }
}
...
Рейтинг: 0 / 0
19.01.2020, 22:50
    #39916134
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Код на нахождение max длины последовательности не проходит все тесты
Несколько мыслей.

Данную задачу КМК можно решить без использования коллекций вообще. Все что тебе надо
это помнить перыдущее и текущее значение. И вести счетчик монотонности.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Код на нахождение max длины последовательности не проходит все тесты / 2 сообщений из 2, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]