Write an efficient algorithm that searches for a value in an m x n matrix. This matrix has the following properties:
- Integers in each row are sorted from left to right.
- The first integer of each row is greater than the last integer of the previous row.
For example,
Consider the following matrix:
[ [1, 3, 5, 7], [10, 11, 16, 20], [23, 30, 34, 50]]
Given target =3
, Returntrue
.
Hide tags array Binary Search
Ideas:
Starting from the upper right corner, if the value is equal to, true is returned. If the value is greater than the number and column of the Two-dimensional array, --; otherwise, the row ++ is returned. The algorithm and test case are as follows:
#include <iostream>#include <cstdlib>#include <vector>using namespace std;class Solution {public:bool searchMatrix(vector<vector<int> > &matrix, int target) {bool isFound = false;int rows = matrix.size();cout << rows << endl;int columns = matrix.front().size();cout << columns << endl;if (rows>0&&columns>0){int row = 0;int column = columns - 1;while (row < rows && column >= 0){if (matrix[row][column] == target){isFound = true;break;}else if (matrix[row][column] > target){--column;}else{++row;}}}return isFound;}};void main(){vector<vector<int> > matrix{ { 1, 2, 8, 9 }, { 2, 4, 9, 12 }, { 4, 7, 10, 13 }, {6,8,11,15} };Solution s;bool isFound = s.searchMatrix(matrix, 121);cout << isFound << endl;system("pause");}
Pay attention to the way to obtain rows and columns.
Search a 2D matrix