二维数组的查找
在一个 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 }
本文来自博客园,作者:wuliOVO,转载请注明原文链接:https://www.cnblogs.com/wuli-Zhang/p/17162602.html