力扣1901.寻找峰值II
-
- 二分每一行 并用函数找出每一行中最大值的下标
- 若最大值比其下面相邻的元素大 则上方一定存在峰值
- 若最大值比其下面相邻的元素小 则下方一定存在峰值
cpp
class Solution {
int indexmax(vector<int> &a)
{
return max_element(a.begin(),a.end()) - a.begin();
}
public:
vector<int> findPeakGrid(vector<vector<int>>& mat) {
int l = 0,r = mat.size() - 1;
while(l < r)
{
//行
int i = l + r >> 1;
//列
int j = indexmax(mat[i]);
if(mat[i][j] > mat[i+1][j]) r = i;
else l = i + 1;
}
return {l,indexmax(mat[l])};
}
};