[LintCode]Search a 2D Matrix II
public class Solution {
/**
* @param matrix, a list of lists of integers
* @param target, an integer
* @return a boolean, indicate whether matrix contains target
*/
public boolean searchMatrix(int[][] matrix, int target) {
// 2015-4-11 binary search
// 注意矩阵的表示方法
// 1.行和列都是从0开始计数
// 2.第一个表示行 第二个表示列
if (matrix == null || matrix.length == 0 || matrix[0].length == 0) {
return false;
}
int m = matrix.length; //总行数
int n = matrix[0].length; // 总列数
int start = 0;
int end = m * n -1;
while (start + 1 < end) {
int mid = (start + end) / 2;
if (matrix[mid / n][mid % n] > target) {
end = mid;
} else if (matrix[mid / n][mid % n] < target) {
start = mid;
} else {
return true;
}
}
if (matrix[start / n][start % n] == target) {
return true;
}
if (matrix[end / n][end % n] == target) {
return true;
}
return false;
}
}