https://leetcode.com/problems/search-a-2d-matrix/

1. Use iteration:

  1. //4 ms 7.6 MB
  2. class Solution {
  3. public:
  4. bool searchMatrix(vector<vector<int>>& matrix, int target) {
  5. if(matrix.empty()) return false;
  6. if(matrix[0].empty()) return false;
  7. int m = matrix.size();
  8. int n = matrix[0].size();
  9. for(int i = 0; i < m; i++){
  10. if(matrix[i][0] > target){
  11. int row = i - 1;
  12. if(row >=0){
  13. for(int j = 0; j < n; j++)
  14. if(matrix[row][j] == target)
  15. return true;
  16. } else
  17. return false;
  18. } else if(matrix[i][0] == target)
  19. return true;
  20. }
  21. int row = m - 1;
  22. if(row >=0)
  23. for(int j = 0; j < n; j++)
  24. if(matrix[row][j] == target)
  25. return true;
  26. return false;
  27. }
  28. };

2. Use binary search:

  1. //8 ms 7.6 MB
  2. class Solution {
  3. public:
  4. bool searchMatrix(vector<vector<int>>& matrix, int target) {
  5. if(matrix.empty()) return false;
  6. int l = 0;
  7. int r = matrix.size() * matrix[0].size();
  8. int col = matrix[0].size();
  9. while(l < r){
  10. int median = l + (r - l)/2;
  11. if (matrix[median / col][median % col] == target) {
  12. return true;
  13. } else if (matrix[median / col][median % col] > target) {
  14. r = median;
  15. } else {
  16. l = median + 1;
  17. }
  18. }
  19. return false;
  20. }
  21. };