74. Search a 2D Matrix

xiaoxiao2021-02-27  194

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

题目

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; } }
转载请注明原文地址: https://www.6miu.com/read-15851.html

最新回复(0)