方法1:用两个map,都是以值作为key,第一个map存值和第一次出现的坐标,第二个map用来村值及对应的度,遍历整个数组,每一个数都进行判断:1如果他的度大于最大度,跟新最大度和对应的个数(通过下标和这个值第一次出现的下标相减得到),如果等于最大度,那么就要更新最大度的最小个数
class Solution {
public int findShortestSubArray(int[] nums) {
Map<Integer,Integer> map1=new HashMap(),map2=new HashMap();
int du=0;
int min=0;
for(int i=0;i<nums.length;i++){
map1.putIfAbsent(nums[i],i);
map2.put(nums[i],map2.getOrDefault(nums[i],0)+1);
if(map2.get(nums[i])>du){
du=map2.get(nums[i]);
min=i-map1.get(nums[i])+1;
}
if(map2.get(nums[i])==du){
min=Math.min(min,i-map1.get(nums[i])+1);
}
}
return min;
}
}