码迷,mamicode.com
首页 > 编程语言 > 详细

LeetCode 697. 数组的度

时间:2020-05-24 11:37:40      阅读:45      评论:0      收藏:0      [点我收藏+]

标签:array   ref   次数   出现   fast   缩小   shm   ble   数组   

https://leetcode-cn.com/problems/degree-of-an-array/

 

这个题跟昨天做的子串很相似哈,哈希表+滑动窗口完成。

class Solution {
    public int findShortestSubArray(int[] nums) {
       HashMap<Integer, Integer> map = new HashMap<>();
        int max = Integer.MIN_VALUE;
        for (int num : nums) {
            map.put(num, map.getOrDefault(num, 0) + 1);
            max = Math.max(max,map.get(num));
        }
        HashMap<Integer,Integer> cur = new HashMap<>();
        int fast = 0;
        int slow = 0;
        int min = Integer.MAX_VALUE;
        while(fast < nums.length){
            cur.put(nums[fast],cur.getOrDefault(nums[fast],0)+1);
            while(cur.get(nums[fast]).equals(max)){
                min = Math.min(min,fast - slow + 1);
                cur.put(nums[slow],cur.get(nums[slow])-1);
                slow++;
            }
            fast++;
        }
        return min;
    }
}

思路就是先把原来的数组的度找出来,就是出现最多的元素的次数,然后就进入滑动窗口,快指针一直访问到当前度数与原数组的度相等,就开始缩小左边界,直到度不再满足条件,这个做出来要29ms,只击败了50%的人。

后来看了看题目给的条件,数组长度最长是已知的,那么我们就不需要去用map统计长度了,直接开数组就完事。

class Solution {
    public int findShortestSubArray(int[] nums) {
        int[] count = new int[50000];
        int max = Integer.MIN_VALUE;
        for (int num : nums) {
            count[num]++;
            max = Math.max(max,count[num]);
        }
        HashMap<Integer,Integer> cur = new HashMap<>();
        int fast = 0;
        int slow = 0;
        int min = Integer.MAX_VALUE;
        while(fast < nums.length){
            cur.put(nums[fast],cur.getOrDefault(nums[fast],0)+1);
            while(cur.get(nums[fast]).equals(max)){
                min = Math.min(min,fast - slow + 1);
                cur.put(nums[slow],cur.get(nums[slow])-1);
                slow++;
            }
            fast++;
        }
        return min;
    }
}

这次做完只需要19ms,击败87%的人

 

LeetCode 697. 数组的度

标签:array   ref   次数   出现   fast   缩小   shm   ble   数组   

原文地址:https://www.cnblogs.com/ZJPaang/p/12950268.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!