Appearance
0240-搜索二维矩阵II
https://leetcode.cn/problems/search-a-2d-matrix-ii
编写一个高效的算法来搜索mxn矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性:
- 每行的元素从左到右升序排列。
- 每列的元素从上到下升序排列。
示例 1: 
输入:matrix = [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,14,17,24],[18,21,23,26,30]], target = 5
输出:true
示例 2: 
输入:matrix = [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,14,17,24],[18,21,23,26,30]], target = 20
输出:false
提示:
- m == matrix.length
- n == matrix[i].length
- 1 <= n, m <= 300
- -10^9<= matrix[i][j] <= 10^9
- 每行的所有元素从左到右升序排列
- 每列的所有元素从上到下升序排列
- -10^9<= target <= 10^9
思路
如果从左上角直接搜索,那么如果目标值大于该数字,那么他有可能在右边,也可能在下边,所以搜索难度很大。 根据数组特点,因为从上到下递增,从左到右也递增,如果从数组的右下角开始。 如果目标数大于该数,则他一定在右边。 如果目标数小于该数,则他一定在上边,由此缩小了比较的次数
参考代码
csharp
public class Solution {
public bool SearchMatrix(int[][] matrix, int target) {
//从左下角开始
int i = matrix.Length-1;
int j = 0;
while(i>=0 && j<matrix[0].Length){
if(matrix[i][j] == target){
return true;
}
else if(matrix[i][j] > target){
i--;
}
else if(matrix[i][j] < target){
j++;
}
}
return false;
}
}
AlgoPress