题目:
编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性:
每行的元素从左到右升序排列。
每列的元素从上到下升序排列。
示例 1:
输入:matrix = [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,14,17,24],[18,21,23,26,30]], target = 5
输出:true
思路1:
这道题首先会想到用暴力,依次遍历二维数组,如果发现与目标值相同的数则返回true。
但是又会进一步思考,有没有就是可以一次性排除一行或一列的数字的情况。这就是缩减空间的思想。双指针的用法就是这一思想的应用。
但这道题就用一个指针,这个指针的设置也很巧妙。将这个指针一开始指在二维数组的右上角。这个指针怎么表示,其实就是行row=0,列col=*matrixColSize-1;
如果指的这个数大于目标数,那么就可以排除指针这一列的所有数。这个时候指针向左移动。
col--;
如果指的这个数小于目标数,那么就可以排除指针左边这一行的所有数。这个时候指针向下移动。row++;
直到指针所指的这个数等于目标数为止。
代码1:
bool searchMatrix(int** matrix, int matrixSize, int* matrixColSize, int target){
int row=0;
int col=*matrixColSize-1;
while(row < matrixSize && col >= 0){
if(matrix[row][col]>target){
col--;
}
else if(matrix[row][col]<target){
row++;
}
else{
return true;
}
}
return false;
}