解法一:直接查找
java
复制代码
class Solution {
public boolean searchMatrix(int[][] matrix, int target) {
for(int i=0; i<matrix.length; i++){
for(int j=0; j<matrix[0].length; j++){
if(matrix[i][j]>target){
break;
}
if(matrix[i][j]==target){
return true;
}
}
}
return false;
}
}
解法二:二分查找
java
复制代码
class Solution {
public boolean searchMatrix(int[][] matrix, int target) {
for (int[] row : matrix) {
int index = search(row, target);
if (index >= 0) {
return true;
}
}
return false;
}
public int search(int[] nums, int target) {
int low = 0, high = nums.length - 1;
while (low <= high) {
int mid = (high - low) / 2 + low;
int num = nums[mid];
if (num == target) {
return mid;
} else if (num > target) {
high = mid - 1;
} else {
low = mid + 1;
}
}
return -1;
}
}
注意:
mid = (high - low) / 2 + low
解法三:(Z 字形查找)从右上角开始查找,若matrix[i][j]>target
,则列减少;若matrix[i][j]<target
,则列增加。
java
复制代码
class Solution {
public boolean searchMatrix(int[][] matrix, int target) {
int i=0, j=matrix[0].length-1;
while(i<matrix.length && j>=0){
if(matrix[i][j]==target){
return true;
}
if(matrix[i][j]>target){
j--;
}
else{
i++;
}
}
return false;
}
}