1. 程式人生 > 其它 >697--陣列的度(巧用HashMap)

697--陣列的度(巧用HashMap)

  • 對於這種需要多個容器進行操作的,可用巧用Map容器,將陣列放入值中。

題目

給定一個非空且只包含非負數的整數陣列nums,陣列的 度 的定義是指數組裡任一元素出現頻數的最大值。

你的任務是在 nums 中找到與nums擁有相同大小的度的最短連續子陣列,返回其長度。

題解

`public class SixNineSeven {
public static int findShortestSubArray(int[] nums) {
Map<Integer,int []> map=new HashMap<>();
int n=nums.length;
for(int i=0;i<nums.length;i++){
if(map.containsKey(nums[i])){
map.get(nums[i])[0]++;
map.get(nums[i])[2]=i;
}
else {
map.put(nums[i],new int[]{1,i,i});
}
}
int MaxTime=0,MinLen=0;
for(Map.Entry<Integer,int []> Map: map.entrySet()){
int [] arr=Map.getValue();
if(arr[0]>MaxTime){
MaxTime=arr[0];
MinLen=arr[2]-arr[1]+1;

           }
           else if(MaxTime==arr[0]){
               if(MinLen>arr[2]-arr[1]+1){
                   MinLen=arr[2]-arr[1]+1;
               }
           }
       }
       return MinLen;
}