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 数组的度相关推荐

  1. LeetCode 697. 数组的度

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

  2. leetcode 697. 数组的度(hashmap)

    给定一个非空且只包含非负数的整数数组 nums,数组的度的定义是指数组里任一元素出现频数的最大值. 你的任务是在 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. angularjs 元素重复指定次数_[LeetCode] 442. 数组中重复的数据

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

  9. LeetCode-697. 数组的度

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

最新文章

  1. java 发送邮件
  2. 常见排序算法时间复杂度
  3. 1364: 开灯与关灯(深入思考问题更妙哦~~)
  4. UNION 和UNION ALL的区别
  5. ERP Configurable product不会被CRM中间件下载
  6. MyBatis中增删改操作
  7. 使用Java 8的Builder模式
  8. 数控弯管机xyz转换ybc的算法_花了一年时间开发的三维弯管机交互式转档软件(三维管子模型UG,SOLIDWORK,PRO/E文件转成YBC)...
  9. DVA框架统一处理所有页面的loading状态
  10. Python 多进程 multiprocessing 使用示例
  11. c语言分配飞机10个座位,leetcode1227(飞机座位分配)--C语言实现
  12. 学习笔记(十五)——镜像的知识点与注意事项
  13. https原理:证书传递、验证和数据加密、解密过程解析
  14. 为什么磁盘慢会导致Linux负载飙升?
  15. mocano editor中使用代码比对功能
  16. springboot-cache缓存和J2cache二级缓存框架(带点漫画)
  17. Android开发开发时语言对照表
  18. 成像系统光照度(相机成像辐射传输)
  19. Google抢Waze:除了地图还有什么?
  20. iPhoneXR过于廉价,iPhoneX或许成为畅销的手机

热门文章

  1. 软件维护费 一般按照多少比例_2021年国家电网招聘:笔试进面一般是多少比例?...
  2. linux crontab环境变量,Linux下crontab内环境变量与Shell环境变量的关系【转】
  3. python函数的两种嵌套方法
  4. Python中深浅拷贝的案例教程
  5. mfc编译html,自己编译 MFC 库
  6. centos 6.5配置php,CentOS 6.5安装php5.6
  7. 【B站视频笔记】linux 进程间通信(ipc)信号(软中断信号)signal库函数、可靠信号和不可靠信号、信号集sigprocmask(信号掩码、信号递达Delivery、信号未决Pending)
  8. 图像识别 标注(annotation)的反向优化策略
  9. 如何在C++中调用python程序?
  10. Python 中的模块简介及应用