leetcode 697. 数组的度(hashmap)
给定一个非空且只包含非负数的整数数组 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)相关推荐
- 3、leetcode 697 数组的度
leetcode 697 数组的度 给定一个非空且只包含非负数的整数数组 nums,数组的度的定义是指数组里任一元素出现频数的最大值. 你的任务是在 nums 中找到与 nums 拥有相同大小的度的最 ...
- LeetCode 697. 数组的度
1. 题目 给定一个非空且只包含非负数的整数数组 nums 数组的度的定义是指数组里任一元素出现频数的最大值 你的任务是找到与 nums 拥有相同大小的度的最短连续子数组,返回其长度. 示例 1: 输 ...
- leetcode(3)——697. 数组的度(C++版本注释)(map容器),448. 找到所有数组中消失的数字(取余操作,C++中的auto类型)
文章目录 前言 697 程序 思路 收获 map容器 448 程序 收获 取模操作的思考 auto 前言 大佬的程序,边刷边总结边学语言. 题目697 697 程序 class Solution {p ...
- 【leetcode】数组的度-两个map关联初探
class Solution {public:unordered_map<int,vector<int>> m;//统计开始和结束坐标 unordered_map<int ...
- 【leetcode刷题】 64.数组的度——Java版
⭐欢迎订阅<leetcode>专栏,每日一题,每天进步⭐ 看明白了就不难,总结一下就是要找出数组的众数,并且还有找出众数在数组中第一次出现和最后一次出现的位置,两个位置组成区间长度就是答案 ...
- LeetCode简单题之数组的度
题目 给定一个非空且只包含非负数的整数数组 nums,数组的 度 的定义是指数组里任一元素出现频数的最大值. 你的任务是在 nums 中找到与 nums 拥有相同大小的度的最短连续子数组,返回其长度. ...
- 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 ...
- LeetCode-697. 数组的度
题目描述: 给定一个非空且只包含非负数的整数数组 nums,数组的度的定义是指数组里任一元素出现频数的最大值. 你的任务是在 nums 中找到与 nums 拥有相同大小的度的最短连续子数组,返回其长度 ...
- angularjs 元素重复指定次数_[LeetCode] 442. 数组中重复的数据
[LeetCode] 442. 数组中重复的数据 题目链接: https://leetcode-cn.com/problems/find-all-duplicates-in-an-array 难度:中 ...
最新文章
- 无线通信界的3大天王,谁能驾驭百亿台IoT设备?
- 使用 Chrome Timeline 来优化页面性能
- 深度学习自动编译和优化技术调研
- 03-肯德基点餐:抽象工厂模式
- 可恶的爬虫直接把生产 6 台机器爬挂了!
- 【Linux】部署memcache
- Javascript特效:简单日历
- 固定螺栓系统行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
- plotyy函数_plotyy函数参数设置
- 当逛书店成为一种怀旧
- 抓到Netty一个隐藏很深的内存泄露Bug | 详解Recycler对象池的精妙设计与实现
- 树莓派综合项目2:智能小车(一)四轮驱动
- Quartus的SignalTap的使用
- 逻辑 - 联言命题,选言命题
- 最新大数据产业生态地图:十大爆发点,百大公司起底
- 第二届中国PWA开发者日
- 论Web Service 相关技术
- informatica添加MySQL表,Informatica 简单使用
- AC7811-FOC无感控制代码详解
- 无边框透明窗口设置鼠标穿透与不穿透功能