小技巧
二分查找的刷题技巧:
搜索旋转排序数组————即变形的二分查找,在局部具有排序性
自定义排序
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
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
2
3
4
5
6
7
8
9
10
二维数组查找,如果是有序的话,可以考虑对角线为起点。(240. 搜索二维矩阵 II (opens new window))
和为K的子数组, 前缀和 + 哈希表优化