LeetCode每日一题:数组的度(No.697)

栏目: 编程工具 · 发布时间: 6年前

给定一个非空且只包含非负数的整数数组 nums, 数组的度的定义是指数组里任一元素出现频数的最大值。
你的任务是找到与 nums 拥有相同大小的度的最短连续子数组,返回其长度。
复制代码

示例:

输入: [1, 2, 2, 3, 1]
输出: 2
解释: 
输入数组的度是2,因为元素1和2的出现频数最大,均为2.
连续子数组里面拥有相同度的有如下所示:
[1, 2, 2, 3, 1], [1, 2, 2, 3], [2, 2, 3, 1], [1, 2, 2], [2, 2, 3], [2, 2]
最短连续子数组[2, 2]的长度为2,所以返回2.

输入: [1,2,2,3,1,4,2]
输出: 6
复制代码

思考:

这道题就是要找出现次数最多的整数元素从第一次出现到最后一次出现的长度,若两个元素出现次数相同取长度较短的。
首先定义一个Map,key为出现的整数元素,value为一个长度为3的i整型数组。
value数组的第0位表示该整数元素出现次数,第1位表示该整数元素第一次出现位置下标,第2位表示最后一次出现位置下标。
然后遍历数组,将元素添加到Map中。
若没有出现过则直接添加进入,初始化value数组为[1,i,i](i为循环变量,第一次出现下标和最后一次出现下标都为i)。
若出现过则更新Map中的value数组,value[0]++(出现次数+1),value[2]=i(最后一次出现位置修改为现在的下标)。
遍历数组结束后再定义变量degree表示数组的度,result表示最终最短连续子数组长度。
循环遍历Map,value[0]比原degree大,则作为新的degree,result就为value[2]-value[1]+1。
value[0]与原degree相等则比较原result与该整数元素的value[2]-value[1]+1长度,取较小的作为result。
最后遍历Map结束,即可获得出现次数最多的最短连续子数组长度。
复制代码

实现:

class Solution {
public int findShortestSubArray(int[] nums) {
     Map<Integer,int[]> map = new HashMap<>();
        for (int i = 0; i < nums.length; i++) {
            if (!map.containsKey(nums[i])){
                map.put(nums[i],new int[]{1,i,i});
            }else{
                int[] temp = map.get(nums[i]);
                temp[0]++;
                temp[2] = i;
            }
        }
        int degree = 0,result = 0;
        for (int[] value: map.values()){
            if (value[0] > degree){
                degree = value[0];
                result = value[2] - value[1] + 1;
            }else if (value[0] == degree){
                result = Math.min(value[2] - value[1] + 1,result);
            }
        }
        return result;
}
}复制代码

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Introduction to Computation and Programming Using Python

Introduction to Computation and Programming Using Python

John V. Guttag / The MIT Press / 2013-7 / USD 25.00

This book introduces students with little or no prior programming experience to the art of computational problem solving using Python and various Python libraries, including PyLab. It provides student......一起来看看 《Introduction to Computation and Programming Using Python》 这本书的介绍吧!

MD5 加密
MD5 加密

MD5 加密工具

SHA 加密
SHA 加密

SHA 加密工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具