Write an efficient algorithm that searches for a value target in an m x n integer matrix 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.
Example 1:
Input: matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 3
Output: true
Example 2:
Input: matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 13
Output: false
Constraints:
- m == matrix.length
- n == matrix[i].length
- 1 <= m, n <= 100
- -104 <= matrix[i][j], target <= 104
class Solution {
public boolean searchMatrix(int[][] matrix, int target) {
if (matrix.length == 0 || matrix[0].length == 0)
{
return false;
}
int low;
int high;
// first search in first column, use binary search
for (low = 0, high = matrix.length - 1; low <= high;)
{
int middle = (low + high) / 2;
if (matrix[middle][0] < target)
{
low = middle + 1;
}
else if (matrix[middle][0] > target)
{
high = middle - 1;
}
else
{
return true;
}
}
// when above loop ends, search in row[high]
int row = high;
if (row >= 0)
{
for (low = 0, high = matrix[row].length - 1; low <= high;)
{
int middle = (low + high) / 2;
if (matrix[row][middle] < target)
{
low = middle + 1;
}
else if (matrix[row][middle] > target)
{
high = middle - 1;
}
else
{
return true;
}
}
}
return false;
}
}
'Algorithms and Data Structures > Coding Practices' 카테고리의 다른 글
AlgoExpert Remove Duplicates from LinkedList (0) | 2022.07.14 |
---|---|
AlgoExpert Tandem Bike (0) | 2022.07.14 |
AlgoExpert Class Photos (0) | 2022.07.13 |
AlgoExpert Minimum Waiting Time (0) | 2022.07.12 |
AlgoExpert Depth First Search (DFS) (0) | 2022.07.12 |