Skip to content

Latest commit

 

History

History
54 lines (48 loc) · 2.05 KB

697_数组的度.md

File metadata and controls

54 lines (48 loc) · 2.05 KB

##697 数组的度

class Solution {
    public int findShortestSubArray(int[] nums) {
        HashMap<Integer,Integer> map = new HashMap<>();
        int n = nums.length;
        // for(int num:nums){
        //     map.put(num, map.getOrDefault(map.get(num),0)+1);
        // }  这种出错了
        for(int i=0;i<n;i++){
           map.put(nums[i],map.getOrDefault(nums[i],0)+1);
         }  
        int maxCnt = 0;
        for (int num : nums) {
            maxCnt = Math.max(maxCnt, map.get(num));
        }
        // int maxCnt = Collections.max(map.values());
    // 双指针
        int len = 0;
        int minlen = Integer.MAX_VALUE;
        for(Map.Entry<Integer, Integer> aa : map.entrySet()){
            int a = aa.getKey();
            if(aa.getValue() == maxCnt){
                int j = 0 , k = n-1;
                while(nums[j] != a) j++;
                while(nums[k] != a) k--;
                len = k - j + 1;
                minlen = Math.min(minlen,len);
            }
        }
        return minlen;
    }
}

思路

  1. HashMap统计一下数组中各个出现的次数
  2. 问题:不知道怎么找到key对应的value

java的Map类遍历

在代码实现中, 我们需要遍历哈希表中对应的所有的值, 来寻找数组的度 和 最短连续子数组长度. 这里是利用Map.entrySet()来实现的, 可能很多朋友对此方法还是比较陌生的, 我们来介绍一下.

3.1 Map.Entry

在介绍方法之前, 我们首先介绍下Map.Entry这个类. 它是Map中的一个内部类, 表示一个映射项, 映射项包含Key和Value (我们常说的键值对, 每一个键值对也就是一个Entry类), Map.Entry里面包含getKey()和getValue()方法. 用来获取相应的 键和值.

    //第三种:推荐,尤其是容量大时
    System.out.println("通过Map.entrySet遍历key和value");
    for (Map.Entry<String, String> entry : map.entrySet()) {
        System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());
    }
    ```