当前位置:网站首页>力扣每日一题-第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;
}
};
边栏推荐
- 2022强网杯CTF---强网先锋 ASR wp
- 酷逼了 Pathetic Dog 第 304 场周赛
- 表达式;运算符,算子;取余计算;运算符优先顺序
- 助推科技强国高质量发展《科创超级训练营》系列活动正式拉开帷幕
- Vulnhub target drone: HARRYPOTTER_ NAGINI
- [Dark Horse Morning Post] Hu Jun's endorsement of Wukong's financial management is suspected of fraud, which is suspected to involve 39 billion yuan; Fuling mustard responded that mustard ate toenails
- 【R语言】对图片进行裁剪 图片批量裁剪
- 面对营销难,有米云指出一条破局之路
- 开发工具:第五章:使用idea生成实体类
- Good guy, the company server just crashed!
猜你喜欢
随机推荐
Daily Yuxian Big Defeat
C#中关于DevExpress的常用操作和帮助类项目工程内容说明
11 Publish a series as soon as it is released
云商店携手快报税,解锁财务服务新体验!
夸克网盘资源站
ROS2支持技术:DDS简述
【TDP加码福利】COS用户实践征文月,等你来投稿!!!
2022年深圳市促进大健康产业集群高质量发展的若干措施
比对软件-blastN结果详解
表达式;运算符,算子;取余计算;运算符优先顺序
我的新书销量1万册了!
【paper】Cam2BEV论文浅析
完美指南|如何使用 ODBC 进行无代理 Oracle 数据库监控?
二分练习题
Isometric graph neural networks shine in drug discovery
C#Excel帮助类
插入排序 优化插入排序
C语言:表达式求值详解
70后夫妻给苹果华为做“雨衣”,三年进账7.91亿
22年镜头“卷”史,智能手机之战卷进死胡同









