Skip to content
本页目录

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;
    }
}

Released under the MIT License.