当前位置:网站首页>剑指offer专项突击版第25天
剑指offer专项突击版第25天
2022-08-10 01:54:00 【_hys】
排序+贪心
- 将区间按左端点升序排序,那么就有一个性质:下个区间的左端点<=当前右端点<=当前左端点。
- 容易想到如果当前右端点小于下个区间的左端点时就不可能合并了,如果是大于等于的话在当前右端点和下个右端点取一个最大即可。
class Solution {
public:
bool cmp(vector<int> &a, vector<int> &b) {
if(a[0] != b[0]) return a[0] < b[0];
return a[1] < b[1];
}
vector<vector<int>> merge(vector<vector<int>>& intervals) {
sort(intervals.begin(), intervals.end());
int st = intervals[0][0], ed = intervals[0][1];
vector<vector<int>> res;
for(int i = 1; i < intervals.size(); i++) {
const auto seg = intervals[i];
if(ed < seg[0]) {
res.emplace_back(vector<int>{
st,ed});
st = seg[0];
ed = seg[1];
} else {
ed = max(ed,seg[1]);
}
}
if(res.empty() || ed != res.back()[1]) res.emplace_back(vector<int>{
st,ed});
return res;
}
};
计数排序
发现 a r r 1 arr1 arr1 内数据的范围 [ 0 , 1000 ] [0,1000] [0,1000] 完全可以直接计数排序, O ( N ) O(N) O(N) 的时间复杂度。
注意:在完成把前面部分插入后,while条件里面会出现-1,需要加上>0条件。
class Solution {
public:
vector<int> relativeSortArray(vector<int>& arr1, vector<int>& arr2) {
int cnts[1010] = {
0};
vector<int> res;
for(auto num: arr1) cnts[num]++;
for(auto num: arr2)
while(cnts[num]--) res.emplace_back(num);
for(int i = 0; i <= 1000; i++)
while(cnts[i]-- > 0)
res.emplace_back(i);
return res;
}
};
边栏推荐
猜你喜欢
随机推荐
Unity image is blurry after using long image
volatile 关键字(修饰符 volatile 告诉编译器,变量的值可能以程序未明确指定的方式被改变)
idea 删除文件空行
[Turn] Typora_Markdown_ picture title (caption)
ImportError: Unable to import required dependencies: numpy
【UNR #6 B】机器人表演(DP)
【每日一题】1413. 逐步求和得到正数的最小值
Open3D 泊松盘网格采样
中级xss绕过【xss Game】
免费文档翻译软件电脑版软件
Unity editor extension interface uses List
数据在内存中的存储
控制台中查看莫格命令的详细信息
DP 优化方法合集
C# rounding MidpointRounding.AwayFromZero
阿里云OSS文件上传
Initial attempt at UI traversal
sqlmap dolog外带数据
Pagoda server PHP+mysql web page URL jump problem
自动化测试中,测试数据与脚本分离以及参数化方法