这是之前的最大连续子数组和的变种,代码差不多。只不过是递推公式发生了变化,不再是直接清零就好了,反而是要拿到前面重复数字的后一位开始继续
public int maxLength (int[] arr) { // write code here if(arr==null || arr.length==0){ return -1; } HashMap<Integer,Integer> map=new HashMap<>(); int dp[]=new int [arr.length]; for(int i=0;i<arr.length;i++){ if(i==0){ map.put(arr[i],i); dp[0]=1; }else{ if(map.containsKey(arr[i])){ int index=(int)map.get(arr[i]); map.clear(); for(int j=index+1;j<=i;j++){ map.put(arr[j],j); } }else{ map.put(arr[i],i); } dp[i]=Math.max(dp[i-1],map.size()); } } return dp[arr.length-1]; }