Проблема в том, что вы добавили неправильное значение в ваш HashSet. При увеличении longWork вам нужно добавить longWork вместо shortWork следующим образом:
public static void main(String[] args) {
List<Integer> list1 = Arrays.asList(new Integer[] {5, 10, 8, 9, 1, 2, 3, 4, 5, 8, 9});
List<Integer> list2 = Arrays.asList(new Integer[] {5, 10, 8, 9});
List<Integer> list3 = Arrays.asList(new Integer[] {5, 10, 6, 8, 4, 9});
System.out.println(list1 + " -> " + findLongest(list1, 8));
System.out.println(list2 + " -> " + findLongest(list2, 8));
System.out.println(list3 + " -> " + findLongest(list3, 8));
}
public static int findLongest(List<Integer> hours, int limit) {
int longWork = 0;
int shortWork = 0;
Set<Integer> hash_set = new HashSet<Integer>();
for (int i = 0; i < hours.size(); i++) {
if (hours.get(i) >= limit) {
longWork++;
hash_set.add(longWork);
shortWork = 0;
}
else if (hours.get(i) < limit) {
shortWork++;
hash_set.add(shortWork);
longWork = 0;
}
}
int finalAns = Collections.max(hash_set);
return finalAns;
}
Тогда вывод:
[5, 10, 8, 9, 1, 2, 3, 4, 5, 8, 9] -> 5
[5, 10, 8, 9] -> 3
[5, 10, 6, 8, 4, 9] -> 1
Редактировать: Или (как упоминалось в комментариях) вы можете просто добавить окончательные значения после цикла, чтобы убедиться, что последние значения добавляются, хотя другого числа больше нет (как в второй список: значение longWork равно 3, но оно никогда не добавляется, поскольку после списка больших значений нет значения, меньшего).
Так что это также будет работать:
public static void main(String[] args) {
List<Integer> list1 = Arrays.asList(new Integer[] {5, 10, 8, 9, 1, 2, 3, 4, 5, 8, 9});
List<Integer> list2 = Arrays.asList(new Integer[] {5, 10, 8, 9});
List<Integer> list3 = Arrays.asList(new Integer[] {5, 10, 6, 8, 4, 9});
System.out.println(list1 + " -> " + findLongest(list1, 8));
System.out.println(list2 + " -> " + findLongest(list2, 8));
System.out.println(list3 + " -> " + findLongest(list3, 8));
}
public static int findLongest(List<Integer> hours, int limit) {
int longWork = 0;
int shortWork = 0;
Set<Integer> hash_set = new HashSet<Integer>();
for (int i = 0; i < hours.size(); i++) {
if (hours.get(i) >= limit) {
longWork++;
hash_set.add(shortWork);
shortWork = 0;
}
else if (hours.get(i) < limit) {
shortWork++;
hash_set.add(longWork);
longWork = 0;
}
}
//add the last values
hash_set.add(shortWork);
hash_set.add(longWork);
int finalAns = Collections.max(hash_set);
return finalAns;
}
Вывод снова:
[5, 10, 8, 9, 1, 2, 3, 4, 5, 8, 9] -> 5
[5, 10, 8, 9] -> 3
[5, 10, 6, 8, 4, 9] -> 1