算法基础课笔记and题解汇总
笔记:
区间合并我觉得挺好理解的。
给定n个区间,合并所有有交集的区间,求合并后的区间数量。
1. 按照左端点排序(struct结构体)
2. 相邻的区间是可能可以合并的,那么当且仅当:lj<=ri。
3. 如果可以合并,那么更新:ri=max(ri,rj)
代码:
#include <bits/stdc++.h>
using namespace std;
int n, cnt = 0;
struct S {
int l, r;
} a[100010], ans[100010];
int cmp(S a, S b) {
if (a.l == b.l) return a.r < b.r;
return a.l < b.l;
}
int main() {
scanf("%d", &n);
for (int i = 1; i <= n; i++) scanf("%d%d", &a[i].l, &a[i].r);
sort(a + 1, a + 1 + n, cmp);
ans[++cnt] = a[1];
for (int i = 2; i <= n; i++)
if (a[i].l <= ans[cnt].r) ans[cnt].r = max(ans[cnt].r, a[i].r);
else ans[++cnt] = a[i];
cout << cnt;
return 0;
}
为啥其他题解都写的好复杂,我还以为我一开始的 AC 代码写假了/kk
只要能AC就是好算法
只要能在AC之后优化时空复杂度的就是顶尖算法hh
我感觉其他的题解不会复杂呀
事实上是看完我的解法和题解的代码感觉到了明显的差异,感觉您的最好理解hh
Orz谢谢hh
结构体排序?还能这么做?
好清晰的思路和解法