Сделайте это следующим образом:
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;
public class Main {
public static void main(String[] args) {
// Tests
List<Integer> longestConsecutive;
longestConsecutive = longestConsecutiveList(new int[] { 1, 4, 9, 5, 2, 6 });
System.out.println(
"Logest list of consecutive integers: " + longestConsecutive + ", Count: " + longestConsecutive.size());
longestConsecutive = longestConsecutiveList(new int[] { 2, 10, 4, 1, 5, 7, 3 });
System.out.println(
"Logest list of consecutive integers: " + longestConsecutive + ", Count: " + longestConsecutive.size());
longestConsecutive = longestConsecutiveList(new int[] { 5, 9, 7, 10, 11, 15, 12, 4, 6 });
System.out.println(
"Logest list of consecutive integers: " + longestConsecutive + ", Count: " + longestConsecutive.size());
longestConsecutive = longestConsecutiveList(new int[] { 10, 24, 20, 30, 23, 40, 25, 10, 2, 11, 3, 12 });
System.out.println(
"Logest list of consecutive integers: " + longestConsecutive + ", Count: " + longestConsecutive.size());
longestConsecutive = longestConsecutiveList(new int[] { 9, 7, 3, 8, 1 });
System.out.println(
"Logest list of consecutive integers: " + longestConsecutive + ", Count: " + longestConsecutive.size());
longestConsecutive = longestConsecutiveList(new int[] { 9 });
System.out.println(
"Logest list of consecutive integers: " + longestConsecutive + ", Count: " + longestConsecutive.size());
longestConsecutive = longestConsecutiveList(new int[] { 1, 2 });
System.out.println(
"Logest list of consecutive integers: " + longestConsecutive + ", Count: " + longestConsecutive.size());
longestConsecutive = longestConsecutiveList(new int[] { 1, 2, 3 });
System.out.println(
"Logest list of consecutive integers: " + longestConsecutive + ", Count: " + longestConsecutive.size());
longestConsecutive = longestConsecutiveList(null);
System.out.println(
"Logest list of consecutive integers: " + longestConsecutive + ", Count: " + longestConsecutive.size());
}
public static List<Integer> longestConsecutiveList(int[] a) {
if (a == null) {
return new ArrayList<Integer>();
}
Set<Integer> values = new TreeSet<Integer>();
List<Integer> list = new ArrayList<Integer>();
List<Integer> tempList = new ArrayList<Integer>();
int value = 0, temp = 0;
// Add the elements of the array to the sorted set
for (int i : a) {
values.add(i);
}
// Create an iterator to navigate the sorted set
Iterator<Integer> itr = values.iterator();
// Get the first element from the sorted set, assign it to value and add it to
// tempList. Since tempList has one element
if (itr.hasNext()) {
value = itr.next();
tempList.add(value);
}
// Navigate the rest (2nd element onwards) of the sorted set
while (itr.hasNext()) {
// Get the next element from the sorted set and assign it to temp
temp = itr.next();
// If temp - value = 1, add temp to tempList
if (temp - value == 1) {
tempList.add(temp);
} else if (tempList.size() >= list.size()) {
list = tempList;
tempList = new ArrayList<Integer>();
tempList.add(temp);
} else {
tempList = new ArrayList<Integer>();
}
value = temp;
}
return list.size() > tempList.size() ? list : tempList;
}
}
Вывод:
Logest list of consecutive integers: [4, 5, 6], Count: 3
Logest list of consecutive integers: [1, 2, 3, 4, 5], Count: 5
Logest list of consecutive integers: [9, 10, 11, 12], Count: 4
Logest list of consecutive integers: [10, 11, 12], Count: 3
Logest list of consecutive integers: [7, 8, 9], Count: 3
Logest list of consecutive integers: [9], Count: 1
Logest list of consecutive integers: [1, 2], Count: 2
Logest list of consecutive integers: [1, 2, 3], Count: 3
Logest list of consecutive integers: [], Count: 0
Я добавил достаточно комментариев в код для простоты понимания. Не стесняйтесь комментировать в случае каких-либо сомнений / проблем.