这是之前的最大连续子数组和的变种,代码差不多。只不过是递推公式发生了变化,不再是直接清零就好了,反而是要拿到前面重复数字的后一位开始继续
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];
}
京公网安备 11010502036488号