import java.util.*;
public class Solution {
/**
*
* @param arr int整型一维数组 the array
* @return int整型
*/
public int maxLength (int[] arr) {
int left = 0;
int max =0;
HashMap <Integer,Integer> map = new HashMap<>();
for(int i=0; i<arr.length ; i++){
if(map.containsKey(arr[i]))
//left 代表当前子数组的开头
left = Math.max(left,map.get(arr[i])+1);
//2,3,2 开头原来为0 后来变成1
//23, 32长度是一样的
max = Math.max(max,i-left+1);
map.put(arr[i],i);
}
return max;
}
}哈希 + 滑动窗口
left 更新的时候应该注意 left是当前left的下一位
123 i=0 left=2 长度应该是 left-i + 1
梅华东一次都更新一次;
import java.util.*;
public class Solution {
/**
*
* @param arr int整型一维数组 the array
* @return int整型
*/
public int maxLength (int[] arr) {
if(arr.length<2) return arr.length;
HashMap<Integer, Integer> map = new HashMap<>();
int left = 0;
int max = 0;
for(int i=0;i<arr.length;i++){
if(map.containsKey(arr[i])){
left = Math.max(left,map.get(arr[i])+1);
}
max = Math.max(max, i-left+1);
map.put(arr[i],i);
}
return max;
}
}


京公网安备 11010502036488号