Запишем всю последовательность в массив. Будем последовательно проходить массив. Если элемент массива больше предыдущего, то увеличим счетчик длины последовательности на 1. Если элемент массива меньше или равен предыдущему, то поставим счетчик длины в 1 (т.к. последовательность), и метку начала подпоследовательности поставим равной текущему индексу. При этом проверим, если длина только что окончившейся подпоследовательности больше предыдущей максимальной, то максимальную длину меняем.
Входные данные передаются так: на первой строчке файла стоит кол-во чисел в последовательности. На всех остальных строчках в начале стоит следующее число в последовательности. Пример входного файла:
8
1
2
3
-1
2
3
4
5
Код:
import java.io.*;
public class Problem1 {
static int[] a;
static int startIndex;
static int maxLength;
static void findMaxIncrSubseq() {
if (a.length==1) {
startIndex = 0;
maxLength = 1;
return;
}
int start = startIndex = 0;
int length = maxLength = 1;
for (int i=1; i<a.length; i++) {
if (a[i] > a[i-1]) {
length++;
} else {
if (length > maxLength) {
maxLength = length;
startIndex = start;
}
length = 1;
start = i;
}
}
}
public static void main(String[] args) throws Exception {
FileInputStream fstream = new FileInputStream("in.txt");
DataInputStream in = new DataInputStream(fstream);
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String strLine;
strLine = br.readLine();
int size = Integer.parseInt(strLine);
a = new int[size];
int i=0;
while ((strLine = br.readLine()) != null) {
a[i] = Integer.parseInt(strLine);
i++;
}
in.close();
findMaxIncrSubseq();
System.out.println("Longest increasing contiguos subsequence starts from " + startIndex + " and is of length " + maxLength);
System.out.println("Longest increasing contiguos subsequence:");
for (i=startIndex; i<startIndex+maxLength; i++) {
System.out.println(a[i]);
}
}
}
Пример файла in.txt:
12
1
2
3
-10
5
6
7
8
9
0
1
2
Пример вывода:
>java Problem1
Longest increasing contiguos subsequence starts from 3 and is of length 6
Longest increasing contiguos subsequence:
-10
5
6
7
8
9
Комментариев нет:
Отправить комментарий