力扣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 };

 

posted on 2025-02-25 20:29  Coder何  阅读(35)  评论(0)    收藏  举报