二维数组的查找

在一个 n * m 的二维数组中,每一行都按照从左到右 非递减 的顺序排序,每一列都按照从上到下 非递减 的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
 
示例:
 
现有矩阵 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。
 
给定 target = 20,返回 false。
 
 
限制:
 
0 <= n <= 1000
0 <= m <= 1000
 
题解:
同行左边数永小于右边数
同列下方数永大于上方数
所以我们可以先固定一个临界数(左下角,右上角)
 1 class Solution {
 2     public boolean findNumberIn2DArray(int[][] matrix, int target) {
 3         // 定义左下角临界点数
 4         int row = matrix.length - 1,cal = 0;
 5         while(row >= 0 && cal < matrix[0].length){
 6             // 大于目标数,行--
 7             if(matrix[row][cal] > target){
 8                 row--;
 9                 }
10             // 小于目标数,列++
11             else if(matrix[row][cal] < target){
12                 cal++;
13                 }else{return true;}
14             }
15         return false;
16     }
17 }

 

posted @ 2023-02-28 08:16  wuliOVO  阅读(11)  评论(0编辑  收藏  举报