240. [数组]二维列表中的查找
240. 二维列表中的查找
方法一:线性查找
线性查找的逻辑巧妙,主要利用了题目中的顺序:“从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序”。这个题解是从左下角开始遍历的,当然从右上角也是可以的。

class Solution {
public boolean findNumberIn2DArray(int[][] matrix, int target) {
if(matrix.length == 0){
return false;
}
int n = matrix.length, m = matrix[0].length;
int x = n - 1, y = 0;
while(x >= 0 && y < m){
if(target == matrix[x][y]){
return true;
} else if(target > matrix[x][y]){
y++;
} else {
x--;
}
}
return false;
}
}
方法二:逐行二分查找
二分查找就比较基本了,比暴力少快一些,但没有线性搜索来得快。
class Solution {
public boolean searchMatrix(int[][] matrix, int target) {
int n = matrix.length;
for(int i = 0; i < n; i++){
if(binarySearch(matrix[i], target) == 1){
return true;
}
}
return false;
}
private int binarySearch(int[] arr, int target){
int left = 0, right = arr.length;
while(left < right){
int mid = (left + right) / 2;
if(arr[mid] == target){
return 1;
} else if(arr[mid] > target){
right = mid;
} else {
left = mid + 1;
}
}
return -1;
}
}

浙公网安备 33010602011771号