74. Search a 2D Matrix

来源:互联网 发布:java编译原理 编辑:程序博客网 时间:2024/06/04 23:42

分别在深度方向和广度方向二查搜索。

题目

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 bool SearchMatrix(int[,] matrix, int target) {        if (matrix.Length == 0) return false; //注意这种特殊情况        int rows = matrix.GetUpperBound(0);            int columns = matrix.GetUpperBound(1);            //bi-search as row            int lo = 0, hi = rows + 1;            while (lo < hi)            {                int mi = lo + (hi - lo) / 2;                if (matrix[mi, 0] <= target)                {                    lo++;                }                else hi--;            }            int pos = --lo; //pos is row index for target            if (pos < 0 || pos > rows) return false;            //bi-search as column            lo = 0; hi = columns + 1;            while (lo < hi)            {                int mi = lo + (hi - lo) / 2;                if (matrix[pos, mi] < target)                {                    lo++;                }                else if (matrix[pos, mi] > target)                {                    hi--;                }                else return true;            }            return false;    }}
原创粉丝点击