74Search a 2D Matrix

来源:互联网 发布:钢结构预算软件 编辑:程序博客网 时间:2024/05/17 08:31

题目链接:https://leetcode.com/problems/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.

解题思路:
题目给定的数组不论是行还是列都是有序的,有序数组的查找自然要想到二分查找
先按行(对第一列)进行二分查找,找到某一行。
再按列(对上述行)进行第二次二分查找。

代码实现:

public class Solution {    public boolean searchMatrix(int[][] matrix, int target) {        if(matrix == null || matrix.length == 0)            return false;        int high = matrix.length - 1;        int low = 0;        int mid = 0;        while(low <= high) {            mid = (low + high) / 2;            if(matrix[mid][0] == target)                return true;            else if(matrix[mid][0] > target)                high = mid - 1;            else                low = mid + 1;        }        int row = mid;        if(matrix[mid][0] > target) {            if(mid > 0)                row = mid - 1;            else                return false;        }        low = 1;        high = matrix[0].length - 1;        while(low <= high) {            mid = (low + high) / 2;            if(matrix[row][mid] == target)                return true;            else if(matrix[row][mid] > target)                high = mid - 1;            else                low = mid + 1;        }        return false;    }}
134 / 134 test cases passed.Status: AcceptedRuntime: 1 ms
0 0