diff --git a/solutions/74. Search a 2D Matrix.md b/solutions/74. Search a 2D Matrix.md new file mode 100644 index 0000000..037603e --- /dev/null +++ b/solutions/74. Search a 2D Matrix.md @@ -0,0 +1,24 @@ +# [74. Search a 2D Matrix](https://leetcode.com/problems/search-a-2d-matrix/) +# 思路 +就是一个二分查找。将矩阵展开成一个很长的有序数组,下标low从0开始,下标high从`m*n - 1`开始,然后二分查找,中间下标mid对应的元素为`matrix[mid / n][mid % n]`。 +时间复杂度O(log(mn)),空间复杂度O(1) + +# C++ +``` C++ +class Solution { +public: + bool searchMatrix(vector>& matrix, int target) { + if(matrix.empty()) return false; + int m = matrix.size(), n = matrix[0].size(); + int low = 0, high = m * n - 1; + while(low <= high){ + int mid = (high - low) / 2 + low; + int tmp = matrix[mid / n][mid % n]; + if(tmp == target) return true; + if(tmp < target) low = mid + 1; + else high = mid - 1; + } + return false; + } +}; +```