74_search_a_2d_matrix.cpp 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. #include <vector>
  2. #include <iostream>
  3. using namespace std;
  4. class Solution {
  5. public:
  6. bool searchMatrix(vector<vector<int> > &matrix, int target) {
  7. if (matrix.back().back() < target) {
  8. cout << "Not possible";
  9. return false;
  10. }
  11. int left_prt = 0;
  12. int right_prt = matrix.size() * matrix[0].size();
  13. int mat_row_num = matrix[0].size();
  14. while (left_prt <= right_prt) {
  15. int mid = (left_prt + right_prt) / 2;
  16. if (matrix[mid / mat_row_num][mid % mat_row_num] == target)
  17. return true;
  18. else if (matrix[mid / mat_row_num][mid % mat_row_num] > target)
  19. right_prt = mid - 1;
  20. else if (matrix[mid / mat_row_num][mid % mat_row_num] < target)
  21. left_prt = mid + 1;
  22. }
  23. return false;
  24. }
  25. };
  26. int main() {
  27. Solution s;
  28. int test_data[16] = {1, 3, 5, 7, 10, 11, 16, 20, 23, 30, 34, 60, 62, 66, 72, 192};
  29. vector<vector<int> > test_mat(3, vector<int>(4));
  30. for (int i = 0; i < 12; i++) {
  31. test_mat[i / test_mat[0].size()][i % test_mat[0].size()] = test_data[i];
  32. }
  33. cout << s.searchMatrix(test_mat, 3);
  34. }