解题思路:
-
使用滑动窗口去做
-
滑动窗口的右边界是添加元素,左边界是删除元素
-
当新的元素来的时候,判断当前窗口内是否有这个元素值。
-
如果没有,那么直接从右边界添加此元素,记录当前窗口的大小。
-
如果有,那么左边界一直收缩,直到没有为止,期间记录当前窗口的大小。
代码实现:
import java.util.*;
public class Solution {
/**
*
* @param arr int整型一维数组 the array
* @return int整型
*/
public int maxLength (int[] arr) {
// write code here
HashSet<Integer> window = new HashSet<>();
int max_len = 0;
int i = 0;
for(int j=0; j<arr.length; j++){
while(!window.isEmpty() && window.contains(arr[j])){
window.remove(arr[i]);
i++;
}
window.add(arr[j]);
max_len = Math.max(j - i + 1, max_len);
}
return max_len;
}
}