美文网首页
[数组]697. Degree of an Array

[数组]697. Degree of an Array

作者: Reflection_ | 来源:发表于2018-03-09 08:33 被阅读0次

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 ;
    }
}

相关文章

网友评论

      本文标题:[数组]697. Degree of an Array

      本文链接:https://www.haomeiwen.com/subject/mnzufftx.html