3、leetcode 697 数组的度
leetcode 697 数组的度
给定一个非空且只包含非负数的整数数组 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.
示例 2:
输入:[1,2,2,3,1,4,2]
输出:6
提示:
nums.length 在1到 50,000 区间范围内。
nums[i] 是一个在 0 到 49,999 范围内的整数。
文章目录
- leetcode 697 数组的度
- 一、利用HashMap
- 一、计数排序思想+滑动窗口
一、利用HashMap
class Solution{public int findShortestSubArray(int[] nums){//int[]中存放三个元素,nums[i]的start索引,nums[i]的end索引以及num[i]的数量countHashMap<Integer,int[]> map=new HashMap<>();int count=0;int res=1;for(int i=0;i<nums.length;i++){if(map.containsKey(nums[i])){int[] arr=map.get(nums[i]);arr[1]=i;//arr[1]存放的是nums[i]最后一次出现的索引arr[2]+=1;//arr[2]存放的是数量if(count<arr[2]){count=arr[2];res=arr[1]-arr[0]+1;}else if(count==arr[2]){res=Math.min(res,arr[1]-arr[0]+1);}}else{//元素第一次出现,进行初始化int[] arr=new int[3];arr[0]=i;arr[1]=i;arr[2]=1;map.put(nums[i],arr);}}return res;}
}
一、计数排序思想+滑动窗口
滑动窗口模板见滑动窗口模板Java版
class Solution{public int findShortestSubArray(int[] nums){int[] count=new int[50000];//计数排序思想for(int n:nums){count[n]++;}//记录数组的度int degree=count[0];for(int n:count){degree=Math.max(degree,n);}count=new int[50000];int left=0;int right=0;int res=Integer.MAX_VALUE;//滑动窗口思想while(right<nums.length){count[nums[right]]++;while(degree==count[nums[right]]){res=Math.min(res,right-left+1);count[nums[left]]--;left++;} right++;}return res;}
}
3、leetcode 697 数组的度相关推荐
- LeetCode 697. 数组的度
1. 题目 给定一个非空且只包含非负数的整数数组 nums 数组的度的定义是指数组里任一元素出现频数的最大值 你的任务是找到与 nums 拥有相同大小的度的最短连续子数组,返回其长度. 示例 1: 输 ...
- leetcode 697. 数组的度(hashmap)
给定一个非空且只包含非负数的整数数组 nums,数组的度的定义是指数组里任一元素出现频数的最大值. 你的任务是在 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 ...
- angularjs 元素重复指定次数_[LeetCode] 442. 数组中重复的数据
[LeetCode] 442. 数组中重复的数据 题目链接: https://leetcode-cn.com/problems/find-all-duplicates-in-an-array 难度:中 ...
- LeetCode-697. 数组的度
题目描述: 给定一个非空且只包含非负数的整数数组 nums,数组的度的定义是指数组里任一元素出现频数的最大值. 你的任务是在 nums 中找到与 nums 拥有相同大小的度的最短连续子数组,返回其长度 ...
最新文章
- java 发送邮件
- 常见排序算法时间复杂度
- 1364: 开灯与关灯(深入思考问题更妙哦~~)
- UNION 和UNION ALL的区别
- ERP Configurable product不会被CRM中间件下载
- MyBatis中增删改操作
- 使用Java 8的Builder模式
- 数控弯管机xyz转换ybc的算法_花了一年时间开发的三维弯管机交互式转档软件(三维管子模型UG,SOLIDWORK,PRO/E文件转成YBC)...
- DVA框架统一处理所有页面的loading状态
- Python 多进程 multiprocessing 使用示例
- c语言分配飞机10个座位,leetcode1227(飞机座位分配)--C语言实现
- 学习笔记(十五)——镜像的知识点与注意事项
- https原理:证书传递、验证和数据加密、解密过程解析
- 为什么磁盘慢会导致Linux负载飙升?
- mocano editor中使用代码比对功能
- springboot-cache缓存和J2cache二级缓存框架(带点漫画)
- Android开发开发时语言对照表
- 成像系统光照度(相机成像辐射传输)
- Google抢Waze:除了地图还有什么?
- iPhoneXR过于廉价,iPhoneX或许成为畅销的手机
热门文章
- 软件维护费 一般按照多少比例_2021年国家电网招聘:笔试进面一般是多少比例?...
- linux crontab环境变量,Linux下crontab内环境变量与Shell环境变量的关系【转】
- python函数的两种嵌套方法
- Python中深浅拷贝的案例教程
- mfc编译html,自己编译 MFC 库
- centos 6.5配置php,CentOS 6.5安装php5.6
- 【B站视频笔记】linux 进程间通信(ipc)信号(软中断信号)signal库函数、可靠信号和不可靠信号、信号集sigprocmask(信号掩码、信号递达Delivery、信号未决Pending)
- 图像识别 标注(annotation)的反向优化策略
- 如何在C++中调用python程序?
- Python 中的模块简介及应用