Найти самую длинную подпоследовательность из положительных чисел
Ввод должен вводиться обязательно до нуля.
Мой код выводит количество всех положительных чисел а мне нужно только количество последовательности.
Например ввод (1 2 3 4 -2 3 4), вывод (4)
public class Numbers {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int a = 0;
System.out.println("Вводите числа до 0");
int n = 0;
a = scan.nextInt();
while (true) {
int x = scan.nextInt();
if (x == 0)
break;
n += 1;
}
int count = 1;
int count1 = 1;
for (int i = 1; i < n; i++) {
if (a > 0) {
count++;
}
if (count > count1) {
count1 = count;
}
else {
count = 1;
}
}
System.out.println(count);
scan.close();
}
}
Ответы (2 шт):
Автор решения: MBo
→ Ссылка
Можно примерно так:
int a;
int n = 0;
int maxlen = 0;
System.out.println("Вводите числа до 0");
while (true){
a = scan.nextInt();
if (a == 0)
break;
if (a > 0) {
n += 1;
maxlen = max(maxlen, n);
}
else
n = 0;
}
System.out.println(maxlen);
Автор решения: Nowhere Man
→ Ссылка
Представленный код не проверяет числа, введённые пользователем; в первом цикле просто подсчитывается количество чисел, не равных 0, а второй цикл проверяет одно и то же число a, введённое один раз.
В целом подобные вопросы встречаются достаточно часто, различия только в условиях, накладываемых на элементы:
- Определить [максимальную] длину [неубывающего] подмассива
- Как найти максимальное количество подряд идущих одинаковых элементов массива? JAVA
- Как найти лучшую серию шагов в массиве?
Алгоритм во всех случаях простой:
- заводятся счётчики текущей длины и максимальной длины
- для каждого значения (введённого пользователем или из массива), удовлетворяющего заданному условию (в данном случае
a > 0), инкрементируется счётчик и сразу же проверяется/обновляется максимум; иначе счётчик сбрасывается дляa < 0
Вариант реализации:
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("Вводите числа до 0");
int count = 0, maxCount = 0, a;
while ((a = scan.nextInt()) != 0) {
if (a > 0) {
if (++count > maxCount) {
maxCount = count;
}
} else {
count = 0;
}
}
System.out.println("Длина самой длинной подпоследовательности: " + maxCount);
}