74_search_a_2d_matrix.cpp 1.4 KB

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