LeetCode 240. 搜索二维矩阵 II
编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target。该矩阵具有以下特性:
- 每行的元素从左到右升序排列。
- 每列的元素从上到下升序排列。
思路一:
递归,对每个初始矩阵划分成四部分,每次搜索arr[m/2][n/2]位置的数,小于则继续找左上角,大于则省略左上角。但在数字为右下角时复杂度过高。且实现起来蛮复杂的。
思路二:
从右上角开始,对右上角的数n,若n小于target则当前行均小于target,故m++。若大于target则当前列均大于target,故n--。
bool searchMatrix(vector<vector<int>>& arr, int target) {
if(arr.empty() || arr[0].empty()) return false;
int m = arr.size();
int n = arr[0].size();
int row = 0, clo = n-1;
while(row < m && clo >= 0){
if(arr[row][clo]==target) return true;
else if(arr[row][clo] < target) row++;
else clo--;
}
return false;
}