powered by simpleCommunicator - 2.0.30     © 2024 Programmizd 02
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / Код на нахождение max длины последовательности не проходит все тесты
2 сообщений из 2, страница 1 из 1
Код на нахождение max длины последовательности не проходит все тесты
    #39916130
GrossmasteR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уважаемые форумчане, здравствуйте.
Нужен ваш совет.

Условие задачи: Ввести 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
Код на нахождение max длины последовательности не проходит все тесты
    #39916134
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Несколько мыслей.

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


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