classSolution{public:boolsearchMatrix(vector<vector<int>>& matrix,int target){if(matrix.size()==0|| matrix[0].size()==0)returnfalse;//在第一列搜索最后一個(gè)比我小的int i, r = matrix.size(), c = matrix[0].size();int left =0, right = r-1, mid;while(left <= right){mid = left +((right-left)>>1);if(matrix[mid][0]== target)returntrue;if(matrix[mid][0]< target){if(mid == r-1|| matrix[mid+1][0]> target)break;//mid行搜索即可elseleft = mid+1;}elseright = mid-1;}int R = mid;left =0, right = c-1;while(left <= right){mid = left +((right-left)>>1);if(matrix[R][mid]== target)returntrue;if(matrix[R][mid]< target) left = mid+1;elseright = mid-1;}returnfalse;}};
轉(zhuǎn)換成1維數(shù)組,即可變成標(biāo)準(zhǔn)二分查找
classSolution{public:boolsearchMatrix(vector<vector<int>>& matrix,int target){if(matrix.size()==0|| matrix[0].size()==0)returnfalse;int i, r = matrix.size(), c = matrix[0].size();// 二分查找int left =0, right = r * c -1;//關(guān)鍵點(diǎn)int mid, val;while(left <= right){mid =(left + right)/2;val = matrix[mid/c][mid%c];//關(guān)鍵地方if(target == val)returntrue;else{if(target < val) right = mid -1;else left = mid +1;}}returnfalse;}};