简单题。二分查找的应用。犯得错误是检查了数组下界0却忘了检查上界length。
public class Solution { public boolean searchMatrix(int[][] matrix, int target) { // Start typing your Java solution below // DO NOT write main() function int m = matrix.length; if (m == 0) return false; int n = matrix[0].length; if (n == 0) return false; if (target < matrix[0][0]) return false; if (target > matrix[m-1][n-1]) return false; int left = 0; int right = m - 1; while (left <= right) { int mid = (left + right) / 2; if (matrix[mid][0] == target) return true; if (matrix[mid][0] > target) { right = mid - 1; } else { left = mid + 1; } } // at this time right < left if (left < m && target > matrix[left][0]) { return searchLine(matrix[left], target); } else if (right >= 0 && target > matrix[right][0]) { return searchLine(matrix[right], target); } return false; } public boolean searchLine(int a[], int target) { int left = 0; int right = a.length - 1; while (left <= right) { int mid = (left + right) / 2; if (a[mid] == target) return true; if (a[mid] > target) { right = mid - 1; } else { left = mid + 1; } } return false; } }