当前位置:网站首页>剑指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;
}
};
边栏推荐
猜你喜欢
随机推荐
idea 删除文件空行
Unity碰撞和触发
Linux(Centos7)服务器中配置Mysql主从数据库,以及数据库的安装,防火墙操作
算法与语音对话方向面试题库
Unity vertex animation
UXDB现在支持函数索引吗?
组件的使用
自动化测试中,测试数据与脚本分离以及参数化方法
网络爬虫错误
In automated testing, test data is separated from scripts and parameterized methods
Solve the problem of sed replacement text containing special characters such as "/" and "#"
翻译软件免费版下载-免费版翻译软件下载
Button countdown reminder
中英文互译在线翻译-在线翻译软件
月薪35K,靠八股文就能做到的事,你居然不知道
web开发概述
Unity3D创建道路插件EasyRoads的使用
按钮倒计时提醒
【web渗透】SSRF漏洞超详细讲解
C# 单例模式








