[LeetCode] 74. Search a 2D Matrix

[LeetCode] 74. 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.


在一個行間有序,行與行也是有序的一個二維數組matrix中查找target。
思路: 現在第一列中二分查找target落在哪一行,然後再在行上二分查找target即可。
複雜度爲O(log(m)+log(n)),本以爲比把matrix當作一維數組直接二分效率要高,然後算了一下複雜度爲O(log(m*n)) == O(log(m)+log(n))。
- -。


class Solution {
public:
    bool searchMatrix(vector<vector<int>>& matrix, int target) {
        int leni = matrix.size();
        if (leni == 0) {
            return false;
        }
        int lenj = matrix[0].size();
        if (lenj == 0) {
            return false;
        }

        int lidx = 0;
        int ridx = leni-1;

        while (lidx < ridx) {
            int midx = (lidx+ridx)/2+1;
            if (target > matrix[midx][0]) {
                lidx = midx;
            } else if (target < matrix[midx][0]) {
                ridx = midx-1;
            } else {
                return true;
            }
        }

        int rowi = lidx;
        lidx = 0;
        ridx = lenj-1;
        while (lidx <= ridx) {
            int midx = (lidx+ridx)/2;
            if (target > matrix[rowi][midx]) {
                lidx = midx+1;
            } else if (target < matrix[rowi][midx]) {
                ridx = midx-1;
            } else {
                return true;
            }
        }

        return false;
    }
};
發佈了35 篇原創文章 · 獲贊 0 · 訪問量 4069
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章