https://leetcode.com/problems/non-overlapping-intervals/
希望是最后一次忘记比较函数咋写
leetcode那种的,这个写在类外
bool cmp(const pair<int, int> a, const pair<int,int> b){
return a.second == b.second?a.first<b.first:a.second<b.second;
}
平时在main.cpp里写的:
static cmp(static pair<int, int> a, static pair<int, int> b{
return a.second == b.second?a.first<b.first:a.second<b.second;
}
使用
sort(test.begin(), test.end, cmp);
顺便priority_queue的cmp:
struct cmp{
bool operator() (pair<int, int> a, pair<int, int> b){
a.second == b.second?a.first<b.first:a.second<b.second;
};
使用
priority_queue<pair<int,int>, vector<pair<int,int>>, cmp> pq;
这题刚开始用直接在原有数据结构vector上,虽然O(nlogn),这题数据1e5该能过的,但是TLE了
我刚开始觉得是vector访问可能比pair要慢,虽然是常数倍数,但是就差那么一点累积多了就不行了
换了pair果然就好了
但是看了题解,发现人家没有做这种数据结构上的转换也能过,分析了一下改代码前后的对比,发现其实还有一个事,就是访存次数减少了,之前存的是iterator,每次都要通过iterator找 *it[1],那不如直接存 *it[1]