美文网首页
[数组]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