给定一个整数数组,最长的子数组长度是多少,其中包含不超过两个不同的值,这些不同的值之间的差异不超过1。
例如:
arr = [0, 1, 2, 1, 2, 3] -> 长度为4; [1,2,1,2]
arr = [1, 2, 3, 4, 5] -> 长度为2; [1,2]
arr = [1, 1, 1, 3, 3, 2, 2] -> 长度为4; [3,3,2,2]
我有这样的代码
public static int longestSubarray(List<Integer> arr) {
int max = 0;
Set<Integer> set = new HashSet<>();
int i = 0;
int j = 1;
while (i < arr.size() - 1) {
set.add(arr.get(i));
while (j < arr.size() && Math.abs(arr.get(i) - arr.get(j)) < 2) {
if (!set.contains(arr.get(j))) {
if (set.size() == 2) {
break;
} else {
set.add(arr.get(j));
}
}
++j;
}
max = Math.max(max, j - i);
j = ++i + 1;
set.clear();
}
return max;
}
有更好的解决方案吗?
[1, 295331535]
的情况下,输出将为0
,但预期结果是1
。 - Mohamed AbdElRazek