小技巧

二分查找的刷题技巧:

搜索旋转排序数组————即变形的二分查找,在局部具有排序性

自定义排序

vector

static bool cmp_by_value(const pair<int,int> & lhs, const pair<int,int> & rhs) {
        return lhs.second > rhs.second;
    }

sort(tmp.begin(),tmp.end(),cmp_by_value);

struct cmp{
    bool operator()(const pair<int,int> & lhs, const pair<int,int> & rhs) {
        return lhs.second > rhs.second;
    }
};

sort(tmp.begin(),tmp.end(),cmp());
1
2
3
4
5
6
7
8
9
10
11
12
13

priority_queue:

struct cmp
{
    //重载()运算符 
    bool operator()(const vector<int>& n1, const vector<int>& n2)
    {
        return n1[1] > n2[1];
    }
};

priority_queue<vector<int>, vector<vector<int>>, cmp> heap;
1
2
3
4
5
6
7
8
9
10

二维数组查找,如果是有序的话,可以考虑对角线为起点。(240. 搜索二维矩阵 II (opens new window))

和为K的子数组, 前缀和 + 哈希表优化