697. Degree of an Array
HashMap.
直接的想法,既然我们首先要知道每一个数字出现的次数,那么就利用HashMap,而且还要知道这个数字的最小index 和最大index,也存入map。
设一个HashMap<Integer, int[]> map, key 是 num,value 就是int[3]:
int[0] 记录 firstIndex; int[1] 记录 lastIndex; int[2] 记录次数。
这样的话,需要遍历两次:
第一次遍历nums array:记录每一个数字的 firstIndex, lastIndex,出现次数; 还要记录下最大的出现次数。
第二次遍历map key set:当key (num) 的次数等于最大次数的时候,记录最小的长度。(lastIndex - firstIndex + 1)。
class Solution {
public int findShortestSubArray(int[] nums) {
HashMap<Integer, int[]> eachMap = new HashMap<Integer, int[]>();
int maxCount = 0;
// eachMap : {"num": [count, left ,right]}
for(int i = 0; i<nums.length; i++){
if(eachMap.containsKey(nums[i])){
eachMap.get(nums[i])[0]++; //count++
eachMap.get(nums[i])[2] = i; //update right
}else{
int[] value = new int[3];
value[0] = 1;
value[1] = i;
value[2] = i;
eachMap.put(nums[i], value);
}
maxCount = Math.max(maxCount, eachMap.get(nums[i])[0]);
}
int minLength = Integer.MAX_VALUE;
for(int key: eachMap.keySet()){
if(maxCount == eachMap.get(key)[0]){
minLength = Math.min(minLength, eachMap.get(key)[2] - eachMap.get(key)[1]+ 1);
}
}
return minLength ;
}
}
网友评论