leetcode-74. Search a 2D Matrix
题目:
Write an efficient algorithm that searches for a value in an m x n matrix. This matrix has the following properties:
Integers in each row are sorted from left to right.
The first integer of each row is greater than the last integer of the previous row.
For example,Consider the following matrix:
[
[1, 3, 5, 7],
[10, 11, 16, 20],
[23, 30, 34, 50]
]
Given target = 3, return true.
这题有一个可以利用的地方,就是它是从小到大Z字形排列的。所以可以无视格式直接按照普通的二分搜索来做。我自己写的时候是按照行和列分别搜索,总之写的很复杂。这个是仿造讨论写的
答案来源
public class Solution {
public boolean searchMatrix(int[][] matrix, int target) {
int rows = matrix.length;
int cols = matrix[0].length;
int i = 0 , j = rows * cols -1;
while(i<j){
int mid = (i+j)>>1;
if(matrix[mid/cols][mid%cols]<target){
i = mid+1;
}else{
j = mid;
}
}
return matrix[i/cols][i%cols]==target;
}
}