2023-08-07 Daily Challenge
Today I have done leetcode's August LeetCoding Challenge with cpp
.
August LeetCoding Challenge 7
Description
Search a 2D Matrix
You are given an m x n
integer matrix matrix
with the following two properties:
- Each row is sorted in non-decreasing order.
- The first integer of each row is greater than the last integer of the previous row.
Given an integer target
, return true
if target
is in matrix
or false
otherwise.
You must write a solution in O(log(m * n))
time complexity.
Example 1:
Input: matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 3 Output: true
Example 2:
Input: matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 13 Output: false
Constraints:
m == matrix.length
n == matrix[i].length
1 <= m, n <= 100
-104 <= matrix[i][j], target <= 104
Solution
class Solution {
public:
bool searchMatrix(vector<vector<int>>& matrix, int target) {
if(!matrix.size() || !matrix[0].size()) return false;
int begin = 0, end = matrix.size()-1;
vector<int> &a = matrix[0];
while(begin < end) {
int mid = (begin + end) / 2;
if(matrix[mid].front() > target) {
end = mid - 1;
} else if (matrix[mid].back() < target) {
begin = mid + 1;
} else {
break;
}
}
a = matrix[(begin+end)/2];
return binary_search(a.begin(), a.end(), target);
}
};
// Accepted
// 133/133 cases passed ( ms)
// Your runtime beats 100 % of cpp submissions
// Your memory usage beats 19.85 % of cpp submissions (9.6 MB)