当前位置:网站首页>力扣每日一题-第45天-697. 数组的度
力扣每日一题-第45天-697. 数组的度
2022-08-01 16:58:00 【重邮研究森】
2022.8.1今天你刷题了吗?
题目:
给定一个非空且只包含非负数的整数数组 nums,数组的 度 的定义是指数组里任一元素出现频数的最大值。
你的任务是在 nums 中找到与 nums 拥有相同大小的度的最短连续子数组,返回其长度。
分析:
给定一个数组,需要找到里面度最大的元素,然后求出这些元素中能够构成最短连续子数组的大小,情况如下:
【1,2,3,3,1】度最大=2,且包括元素1,3,但是最短连续子数组是3,其长度为2
【1,2,1,3,1】度最大=3,为元素1,最短子数组长度为3.
思路:利用一个哈希表,记录元素,然后找到里面最大的度以及度对应的元素有哪些,然后分别对这些元素进行遍历,求出它们的最短子数组(但是在力扣中出错了,因为数组大小越界被限制),但是思路没问题。
解析:
1.暴力法(有问题)
class Solution {
public:
int findShortestSubArray(vector<int>& nums) {
unordered_map<int, int>map;
vector<int>vec;
int res = 0;
int ans = 0;
int q = 0;
int w = 0;
int e = 0;
int r = 100000;
for (auto num : nums)
{
map[num]++;
res = max(map[num], res);//找到了度的大小
}
e = res;
for (std::unordered_map<int, int>::iterator it = map.begin(); it != map.end(); it++)
{
if (it->second == res)
{
ans = it->first;
vec.push_back(ans);//插入度最大的元素,可能有多个
}
}
for (int j=0;j<vec.size();j++)
{
for (int i = 0; i < nums.size(); i++)
{
if (nums[i] == vec[j] && e == res)
{
q = i;
e--;
}
else if (nums[i] == vec[j] && e == 1)
{
w = i;
}
else if (nums[i] == vec[j] && e != res && e != 1)
{
e--;
}
else if (e == 0)
{
r = q+1;
return r;
}
}
e = res;
r = min(r, w - q + 1);
}
return r;
}
};
2.优化
在求度以及对应元素时,利用一个vector容器一次型存放,这样方便后面的计算
class Solution {
public:
int findShortestSubArray(vector<int>& nums) {
unordered_map<int, vector<int>> mp;
int n = nums.size();
for (int i = 0; i < n; i++) {
if (mp.count(nums[i])) {
mp[nums[i]][0]++;
mp[nums[i]][2] = i;
}
else {
mp[nums[i]] = { 1, i, i };
}
}
int maxNum = 0, minLen = 0;
for (auto& [_, vec] : mp) {
if (maxNum < vec[0]) {
maxNum = vec[0];
minLen = vec[2] - vec[1] + 1;
}
else if (maxNum == vec[0]) {
if (minLen > vec[2] - vec[1] + 1) {
minLen = vec[2] - vec[1] + 1;
}
}
}
return minLen;
}
};
边栏推荐
猜你喜欢
Xingtu has been short of disruptive products?Will this M38T from the Qingdao factory be a breakthrough?
好家伙,公司服务器直接热崩掉了!
工业制造行业的低代码开发平台思维架构图
04 flink cluster construction
22年镜头“卷”史,智能手机之战卷进死胡同
MySQL's maximum recommended number of rows is 2000w, is it reliable?
ROS2系列知识(7):用rqt_console查看日志logs
C# LibUsbDotNet 在USB-CDC设备的上位机应用
软测面试如何介绍项目?要做哪些技术准备?
程序员架构修炼之道:如何设计“易理解”的系统架构?
随机推荐
关系运算符和if,else语句
LeetCode第 303 场周赛
深圳市商务局2022年度中央资金(跨境电子商务企业市场开拓扶持事项)申报指南
下载 | 谷歌科学家Kevin P. Murphy发布新书《概率机器学习:高级主题》
Are online account opening commissions reliable? Is online account opening safe?
C# LibUsbDotNet 在USB-CDC设备的上位机应用
matlab 基于奇偶校验的LSB隐藏水印 三种改进
PAT 甲级 A1003 Emergency
RecSys'22|CARCA: Cross-Attention-Aware Context and Attribute Recommendations
AI艺术‘美丑’不可控?试试 AI 美学评分器~
酷逼了 Pathetic Dog 第 304 场周赛
FTP helper class for C#
JumpServer堡垒机部署
云商店携手快报税,解锁财务服务新体验!
MySQL最大建议行数2000w, 靠谱吗?
变量交换;复合赋值;增递减运算符
吴恩达机器学习课后习题——kmeans
11 Publish a series as soon as it is released
【paper】Cam2BEV论文浅析
C # Excel helper classes