力扣74. 搜索二维矩阵(二分查找)

需要两次二分查找,一次用于确定行,另一次用于确定列
1 class Solution { 2 public: 3 int m, n; 4 vector<vector<int>> matrix; 5 int binaryRowFind(int left, int right, int key) { 6 if (left == right) { 7 return left; 8 } 9 int mid = (left + right) / 2; 10 if (left < right) { 11 if (matrix[mid][n - 1] < key) { //比行中最大的还小 12 return binaryRowFind(mid + 1, right, key); 13 } 14 if (matrix[mid][0] > key) { //比行中最小的还大 15 return binaryRowFind(left, mid - 1, key); 16 } 17 //能走到这儿说明结果可能就在该行中 18 return mid; 19 } 20 return -1; 21 } 22 bool binaryFind(int row, int left, int right, int key) { 23 if (left > right) { 24 return false; 25 } 26 int mid = (left + right) / 2; 27 if (matrix[row][mid] == key) { 28 return true; 29 } 30 if (matrix[row][mid] < key){ 31 return binaryFind(row, mid + 1, right, key); 32 } 33 if (matrix[row][mid] > key) { 34 return binaryFind(row, left, mid - 1, key); 35 } 36 return false; 37 } 38 bool searchMatrix(vector<vector<int>>& matrix, int target) { 39 m = matrix.size(); n = matrix[0].size(); 40 this -> matrix = move(matrix); 41 int row = binaryRowFind(0, m - 1, target); 42 if (row == -1) { 43 return false; 44 } 45 return binaryFind(row, 0, n - 1, target); 46 } 47 };
浙公网安备 33010602011771号