题目
Search a 2D Matrix
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, return true.
标签
Array、Binary Search
难度
中等
分析
题目意思是给你一个二维矩阵和一个value,这个二维矩阵每一行都是从小到大的顺序,而且每一行的行首的元素比上一行的行末元素要大,然后要你查找这个value是否在这个矩阵里。解题思路是拿value跟每行的最后一个元素比,如果比value小,则row+1,如果比value大,col-1,如果相等,则返回true。
C代码实现
bool searchMatrix(int** matrix, int matrixRowSize, int matrixColSize, int target)
{
int row=0, col=matrixColSize-1;
while(row<matrixRowSize && col>=0)
{
if(target == matrix[row][col])
return true;
else if(target > matrix[row][col])
row++;
else
col--;
}
return false;
}