Leetcode74. 搜尋二維矩陣(C++思路與程式碼)
阿新 • • 發佈:2020-12-18
編寫一個高效的演算法來判斷 m x n 矩陣中,是否存在一個目標值。該矩陣具有如下特性:
每行中的整數從左到右按升序排列。
每行的第一個整數大於前一行的最後一個整數。
輸入:matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,50]], target = 3
輸出:true
思路:
採用二分法,難點在於如何將二維陣列轉化為一位。m x n 矩陣一維索引 轉 二維座標(row, col) row = index / n, col = index % n。剩下就是二分法while(left<right)。
class Solution {
public:
bool searchMatrix(vector<vector<int>>& matrix, int target) {
if(matrix.empty()||matrix[0].empty()) return false;
int m=matrix.size(),n=matrix[0].size();
int left=0;
int right=m*n-1;
while(left<right){
int mid= left+right>>1;
if(matrix[mid/n][mid%n]>=target){
right=mid;
}
else{
left=mid+1;
}
}
if(matrix[left/n][left%n]==target) return true;
return false;
}
};