LeetCode-74. Search a 2D Matrix

Description

Write an efficient algorithm that searches for a value in an m x n matrix. This matrix has the following properties:
1.Integers in each row are sorted from left to right.
2.The first integer of each row is greater than the last integer of the previous row.

Example 1

Input:
matrix = [
  [1,   3,  5,  7],
  [10, 11, 16, 20],
  [23, 30, 34, 50]
]
target = 3
Output: true

Example 2

Input:
matrix = [
  [1,   3,  5,  7],
  [10, 11, 16, 20],
  [23, 30, 34, 50]
]
target = 13
Output: false

Solution 1(C++)

class Solution {
public:
    bool searchMatrix(vector<vector<int>>& matrix, int target) {

        if (!matrix.size())
            return false;

        if (!matrix[0].size())
            return false;

        int m = matrix[0].size();


        int l = 0;
        int r = m * matrix.size() - 1;

        while (l < r) {
            int mid = (l + r)/2;

            if (matrix[mid/m][mid % m] < target) {
                l = mid + 1;
            } else {
                r = mid;
            }

        }

        return matrix[r/m][r%m] == target;
    }
};

算法分析

将二维矩阵看做一个一维矩阵即可,然后找到转换公式即可。但问题的关键还是二分搜索的算法。详情参考:Algorithm-Binary Search算法

程序分析

略。

猜你喜欢

转载自blog.csdn.net/zy2317878/article/details/80238498