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.
Consider the following matrix:
[ [1, 3, 5, 7], [10, 11, 16, 20], [23, 30, 34, 50] ]
Given target = 3
, return true
.
和普通二分搜索是一样的
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) { // write your code here if(matrix == null || matrix.length == 0 || matrix[0] == null || matrix[0].length == 0) return false; int m = matrix.length; int n = matrix[0].length; int size = m * n; int left = 0; int right = size - 1; while(left <= right){ int mid = left + (right - left) / 2; int i = mid / n; int j = mid % n; if(matrix[i][j] == target) return true; else if(matrix[i][j] < target) left = mid + 1; else right = mid - 1; } return false; } }
时间: 2024-11-03 04:43:40