int rows = array.size(), cols = array[0].size(); int r = 0, c = cols - 1; // 变大向下走,r++ ; 变小向左走,c-- while (r < rows && c >= 0) { if (array[r][c] > target) c --; elseif (array[r][c] < target) r ++; elsereturntrue; } returnfalse; }
int rows = array.size(), cols = array[0].size(); for (int i = 0; i < rows; i ++) { int l = 0, r = cols - 1; while (l < r) { int mid = l + r + 1 >> 1; if (array[i][mid] <= target) l = mid; else r = mid - 1; } if (array[i][r] == target) returntrue; } returnfalse; } };
时间复杂度:O(n) */ classSolution { public: boolfindNumberIn2DArray(vector<vector<int>>& matrix, int target){ if (matrix.size() == 0 || matrix[0].size() == 0) returnfalse;
int rows = matrix.size(), cols = matrix[0].size(); int i = 0, j = cols - 1; while (i < rows && j >= 0) { if (matrix[i][j] > target) j --; elseif (matrix[i][j] < target) i ++; elsereturntrue; } returnfalse; } };
/* 每一行的数组用二分法查找
时间复杂度:O(nlogn) */ classSolution { public: boolfindNumberIn2DArray(vector<vector<int>>& matrix, int target){ if (matrix.size() == 0 || matrix[0].size() == 0) returnfalse;
int m = matrix.size(), n = matrix[0].size(); for (int i = 0; i < m; i ++) { int l = 0, r = n - 1; while (l < r) { int mid = l + r + 1 >> 1; if (matrix[i][mid] <= target) l = mid; else r = mid - 1; } if (matrix[i][r] == target) returntrue; } returnfalse; } };