题目链接:在二维矩阵中寻找峰值
思路分析:
这个题需要有这么一个概念:如果某一行的最大值小于它上面的数,则该行上方肯定有一个峰值(简单的想,上一行的最大值肯定大于它下面的数,左右肯定满足),根据这个思路就可以用二分进行解题
class Solution {
public:
vector<int> findPeakGrid(vector<vector<int>>& mat) {
int m = mat.size(), n = mat[0].size();
auto get = [&](int k, int t) -> pair<int, int>{
if(k == - 1 || k == m){
return pair(0, 0);
}else{
return pair(1, mat[k][t]);
}
};
int i = 0, j = m - 1, mid, ind;
while(i <= j){
mid = i + (j - i) / 2;
ind = max_element(mat[mid].begin(), mat[mid].end()) - mat[mid].begin();
if(get(mid, ind) > get(mid - 1, ind) && get(mid, ind) > get(mid + 1, ind)){
break;
}
if(get(mid, ind) < get(mid + 1, ind)){
i = mid + 1;
}else{
j = mid - 1;
}
}
return {mid, ind};
}
};