Problem: 74. 搜索二維矩陣
文章目錄
- 題目描述
- 思路
- 復雜度
- Code
題目描述
思路
思路1:映射為一維數組二分查找
1.由于題目矩陣中的元素整體是升序的,我們可以將其放置在一個大小為 m × n m \times n m×n的一維數組array中進行二分查找
2.對應的映射關系是array[mid] == mar[mid / n][mid % n]
思路2:直接在二維矩陣上進行二分查找
1.先對二維矩陣的第一列進行二分查找,找到小于等于target的一個數,講此行標記為rowInd
2.從rowInd開始再進行二分查找
復雜度
思路1:
時間復雜度:
O ( l o g m n ) O(logmn) O(logmn)
空間復雜度:
O ( m n ) O(mn) O(mn)
思路2:
時間復雜度:
O ( l o g m n ) O(logmn) O(logmn)
空間復雜度:
O ( 1 ) O(1) O(1)
Code
思路1:
class Solution {
public:/*** Binary Search* * @param matrix Given array* @param target Given target number* @return bool*/bool searchMatrix(vector<vector<int>> &matrix, int target) {int row = matrix.size();if (row == 0) {return false;}int col = matrix[0].size();int left = 0;int right = row * col - 1;vector<int> array(row * col);while (left <= right) {int mid = left + (right - left) / 2;if (matrix[mid / col][mid % col] == target) {return true;} else if (matrix[mid / col][mid % col] > target) {right = mid - 1;} else if (matrix[mid / col][mid % col] < target) {left = mid + 1;}}return false;}
};
思路2:
class Solution {public:/*** Binary Search** @param matrix Given array* @param target Given target number* @return bool*/bool searchMatrix(vector<vector<int>>& matrix, int target) {int row = matrix.size();if (row == 0) {return false;}int col = matrix[0].size();int left = 0;int right = row - 1;while (left <= right) {int mid = left + (right - left) / 2;if (matrix[mid][0] == target) {return true;} else if (matrix[mid][0] > target) {right = mid - 1;} else if (matrix[mid][0] < target) {left = mid + 1;}}// Check out of boundsif (right < 0) {return false;}int rowIdx = right;left = 0;right = col - 1;while (left <= right) {int mid = left + (right - left) / 2;if (matrix[rowIdx][mid] == target) {return true;} else if (matrix[rowIdx][mid] > target) {right = mid - 1;} else if (matrix[rowIdx][mid] < target) {left = mid + 1;}}return false;}};