mysql数据库使用教程,【leetcode刷题】 64

本文介绍了解决LeetCode题目中关于数组度的问题,通过哈希表计算元素频数并记录位置,找出具有最大度的子数组长度。作者分享了Java代码实现,并提及了一个完整的Java开发学习资源包。
摘要由CSDN通过智能技术生成
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 范围内的整数。

Solution


所谓“度”就是出现最多的数,即众数,这是比较好理解的,

较难得是问题问的是什么?——具有相同度的最短子数组的长度

即度的数字第一次出现的位置和最后一次位置的差

将题目拆分成两个:

  • 求度,可以用哈希表计算次数

  • 求差,可以记录每个数字的位置坐标

综合:

  • key:数字

  • value:[次数,第一次出现的位置,最后一次出现的位置]

Code


所有leetcode代码已同步至github

欢迎star

/**

  • @author 一条coding

*/

class Solution {

public int findShortestSubArray(int[] nums) {

Map<Integer, int[]> map = new HashMap<Integer, int[]>();

int n = nums.length;

for (int i = 0; i < n; i++) {

if (map.containsKey(nums[i])) {

//出现次数加一

map.get(nums[i])[0]++;

//记录末位置

map.get(nums[i])[2] = i;

} else {

//第一次出现,记录初始位置

map.put(nums[i], new int[]{1, i, i});

}

}

int maxNum = 0, minLen = 0;

//遍历map找到最大的度的最小差

for (Map.Entry<Integer, int[]> entry : map.entrySet()) {

int[] arr = entry.getValue();

if (maxNum < arr[0]) {

maxNum = arr[0];

minLen = arr[2] - arr[1] + 1;

} else if (maxNum == arr[0]) {

if (minLen > arr[2] - arr[1] + 1) {

minLen = arr[2] - arr[1] + 1;

}

}

}

return minLen;
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

写在最后

可能有人会问我为什么愿意去花时间帮助大家实现求职梦想,因为我一直坚信时间是可以复制的。我牺牲了自己的大概十个小时写了这片文章,换来的是成千上万的求职者节约几天甚至几周时间浪费在无用的资源上。

复习一周,字节跳动三场技术面+HR面,不小心拿了offer

复习一周,字节跳动三场技术面+HR面,不小心拿了offer

上面的这些(算法与数据结构)+(Java多线程学习手册)+(计算机网络顶级教程)等学习资源
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

[外链图片转存中…(img-TVYtIyc5-1713508091072)]

上面的这些(算法与数据结构)+(Java多线程学习手册)+(计算机网络顶级教程)等学习资源
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值