给定一个非空且只包含非负数的整数数组 nums,数组的度的定义是指数组里任一元素出现频数的最大值。

你的任务是在 nums 中找到与 nums 拥有相同大小的度的最短连续子数组,返回其长度。

示例 1:

输入:[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.

解题思路

关键找到出现次数最多的元素(可能多个),相同元素的头尾元素的距离就是与 nums 拥有相同大小的度的最短连续子数组,因为这个子数组保证涵盖到所有的出现次数最多的元素,拥有相同大小的度。
两个hashmap分别记录每个数字出现的次数和第一次出现的位置,用来维护出现频数和所能产生的子数组长度

代码

class Solution {public int findShortestSubArray(int[] nums) {int max=-1,res=Integer.MAX_VALUE;Map<Integer,Integer> map=new HashMap<>();Map<Integer,Integer> map2=new HashMap<>();for (int i = 0; i < nums.length; i++) {map.put(nums[i],map.getOrDefault(nums[i],0)+1);if(!map2.containsKey(nums[i])) map2.put(nums[i],i);int temp= i-map2.get(nums[i])+1;if(max==-1||map.get(nums[i])>map.get(max)||nums[i]==max||(map.get(nums[i])==map.get(max)&&temp<res))
//需要替换子数组的4种情况 1.最大频数还没初始化2.出现更大频数3.目前最大频数元素的子数组长度更新4.新元素的频数跟之前的最大频数相同,但是生成的子数组长度更短{res=temp; max=nums[i];}}return res;}
}

leetcode 697. 数组的度(hashmap)相关推荐

  1. 3、leetcode 697 数组的度

    leetcode 697 数组的度 给定一个非空且只包含非负数的整数数组 nums,数组的度的定义是指数组里任一元素出现频数的最大值. 你的任务是在 nums 中找到与 nums 拥有相同大小的度的最 ...

  2. LeetCode 697. 数组的度

    1. 题目 给定一个非空且只包含非负数的整数数组 nums 数组的度的定义是指数组里任一元素出现频数的最大值 你的任务是找到与 nums 拥有相同大小的度的最短连续子数组,返回其长度. 示例 1: 输 ...

  3. leetcode(3)——697. 数组的度(C++版本注释)(map容器),448. 找到所有数组中消失的数字(取余操作,C++中的auto类型)

    文章目录 前言 697 程序 思路 收获 map容器 448 程序 收获 取模操作的思考 auto 前言 大佬的程序,边刷边总结边学语言. 题目697 697 程序 class Solution {p ...

  4. 【leetcode】数组的度-两个map关联初探

    class Solution {public:unordered_map<int,vector<int>> m;//统计开始和结束坐标 unordered_map<int ...

  5. 【leetcode刷题】 64.数组的度——Java版

    ⭐欢迎订阅<leetcode>专栏,每日一题,每天进步⭐ 看明白了就不难,总结一下就是要找出数组的众数,并且还有找出众数在数组中第一次出现和最后一次出现的位置,两个位置组成区间长度就是答案 ...

  6. LeetCode简单题之数组的度

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

  7. leetcode 697 Degree of an Array

    题目详情 Given a non-empty array of non-negative integers nums, the degree of this array is defined as t ...

  8. LeetCode-697. 数组的度

    题目描述: 给定一个非空且只包含非负数的整数数组 nums,数组的度的定义是指数组里任一元素出现频数的最大值. 你的任务是在 nums 中找到与 nums 拥有相同大小的度的最短连续子数组,返回其长度 ...

  9. angularjs 元素重复指定次数_[LeetCode] 442. 数组中重复的数据

    [LeetCode] 442. 数组中重复的数据 题目链接: https://leetcode-cn.com/problems/find-all-duplicates-in-an-array 难度:中 ...

最新文章

  1. 无线通信界的3大天王,谁能驾驭百亿台IoT设备?
  2. 使用 Chrome Timeline 来优化页面性能
  3. 深度学习自动编译和优化技术调研
  4. 03-肯德基点餐:抽象工厂模式
  5. 可恶的爬虫直接把生产 6 台机器爬挂了!
  6. 【Linux】部署memcache
  7. Javascript特效:简单日历
  8. 固定螺栓系统行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
  9. plotyy函数_plotyy函数参数设置
  10. 当逛书店成为一种怀旧
  11. 抓到Netty一个隐藏很深的内存泄露Bug | 详解Recycler对象池的精妙设计与实现
  12. 树莓派综合项目2:智能小车(一)四轮驱动
  13. Quartus的SignalTap的使用
  14. 逻辑 - 联言命题,选言命题
  15. 最新大数据产业生态地图:十大爆发点,百大公司起底
  16. 第二届中国PWA开发者日
  17. 论Web Service 相关技术
  18. informatica添加MySQL表,Informatica 简单使用
  19. AC7811-FOC无感控制代码详解
  20. 无边框透明窗口设置鼠标穿透与不穿透功能

热门文章

  1. (C++版)链表(一)——实现单向链表创建、插入、删除等相关操作
  2. 【FPGA Verilog】实验二:key按键基础实验
  3. Java面试2021,java数据可视化项目
  4. 一文搞懂JVM架构:入职3个月的Java程序员面临转正
  5. 【微信小程序】使用Hystrix的插件机制
  6. Cookie,Session基础知识
  7. 2019 Multi-University Training Contest 1 - 1001 - Blank - dp
  8. SQL常用日期处理函数(转)
  9. Android 手把手带你玩转自己定义相机
  10. 1206封装电容在物料可靠性设计比较低