public int maxLength (int[] arr) {
HashMap<Integer,Integer> map = new HashMap<>();
int max = 1;
for(int start = 0, end = 0; end<arr.length ; end++){
if(map.containsKey(arr[end])){
//重复了
start = Math.max(start, map.get(arr[end])+1);
//注意:这里一定要取最大的start,不然就错误了
//为什么? 因为重复数字的索引很可能比start小
}
max = Math.max(max , end-start+1);
map.put(arr[end],end);
}
return max;
}
如果不重复设置 最大值,通过start end ,end一直递增,start在原地不动,将当前数字对应的在数组中的位置记录下来,放在map中,如果下次遍历end,遇到重复的数字,就将start指针移动到这个重复数字上一次出现的下一个位置!。相当于 end之前到start 永远都是不重复的。一直这么遍历,不断刷新max值即可