热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

leetcode刷题篇697题数组的度java版

题目概览:

题目概览:
在这里插入图片描述
思路分析:
两步走:
第一:先找到出现频率最高的数字
第二:把包含频率最高数据的数组找到

遍历数组,使用3个哈希map来分别记录,每个值出现的左右下标和出现的次数,根据出现次数找到,频率最高的数字

然后找出包含这个数字的长度最短的数组

看代码:

class Solution {
public int findShortestSubArray(int[] nums) {
HashMap<Integer, Integer> count = new HashMap<>();
HashMap<Integer, Integer> left = new HashMap<>();
HashMap<Integer, Integer> right = new HashMap<>();
for (int i = 0; i < nums.length; i++) {
if (!left.containsKey(nums[i])) {
left.put(nums[i], i);
}
right.put(nums[i], i);
count.put(nums[i], count.getOrDefault(nums[i], 0) + 1);
}
int ans = nums.length;
int degree = Collections.max(count.values());
for (int x : count.keySet()) {
if (count.get(x) == degree) {
ans = Math.min(ans, right.get(x) - left.get(x) + 1);
}
}
return ans;
}
}

在这里插入图片描述


推荐阅读
author-avatar
duangjai_602
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有