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; } }