classSolution {public:boolsearchMatrix(vector<vector<int>>& matrix,int target) {int m =matrix.size();if(m ==0) returnfalse;int n =matrix[0].size();if(n ==0) returnfalse;int l =0, r = m * n -1;while( l +1< r ) {int mid = l + (r - l) /2;int midVal =matrix[mid/n][mid%n];if(midVal == target) {returntrue; }elseif(midVal < target) { l = mid; }else { r = mid; } }if(matrix[l/n][l%n] == target) { returntrue; }elseif(matrix[r/n][r%n] == target) { returntrue; }returnfalse; }};// We can view this matrix as a array with length m*n-1// We can change the index of 1d array to 2d matrix by arr[idx] == matrix[idx/n][idx%n]
這樣做的效率頗高:
Runtime: 8 ms, faster than 93.68% of C++ online submissions for Search a 2D Matrix. Memory Usage: 9.7 MB, less than 100.00% of C++ online submissions for Search a 2D Matrix.