1. 题目考点
- HashSet 的使用
- 滑动窗口 + set
2. 考点解析
滑动窗口 + set
public int maxLength (int[] arr) {
// write code here
if (arr == null || arr.length == 0) return 0;
Set<Integer> set = new HashSet<>();
int left = 0, right = 0, maxLen = 0, len = arr.length;
while (right < len) {
int a = arr[right];
if (!set.contains(a)) {
set.add(a);
// 关键:实时更新最大长度
maxLen = Math.max(maxLen, set.size());
} else {
int b = arr[left];
while (b != a) {
set.remove(b);
left++;
b = arr[left];
}
// 关键:跳过重复数字 并没有删除它
left++;
}
right++;
}
return maxLen;
}