自定义cmp;少用iterator,多直接存值

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]

你可能感兴趣的:(算法)