Leecode 240: 在二维数组中搜索一个数
类型:二分查找
题目描述:编写一个高效算法来搜索m*n维度的矩阵matrix中的一个目标值target
该矩阵具有以下特性:
- 每行的元素从左到右升序排列
- 每列的元素从上到下升序排列
示例:
同74题类似,但是矩阵的形式不同,74的矩阵完全可以转换为升序的一维数组
思路一: 完全类似于74题的分析一 形式
class Solution {
public boolean searchMatrix(int[][] matrix, int target) {
if(matrix.length == 0)
return false;
int rowIndex = 0;//代表下标
int colIndex = matrix[0].length - 1;//代表下标
while(rowIndex < matrix.length && colIndex >=0)
{
if(target == matrix[rowIndex][colIndex])
return true;
else if(target > matrix[rowIndex][colIndex])
rowIndex++;
else
colIndex--;
}
return false;
}
}
思路二:先确定行,再确定具体的列
class Solution {
public boolean searchMatrix(int[][] matrix, int target) {
if (matrix.length == 0)
return false;
//判断目标值在哪一行
int up = 0;
int down = matrix.length-1;
//确定目标值可能在的行数
while(up<=down){
int midrow = up + (down-up)/2;
if (target == matrix[midrow][0])
return true;
else if(target>matrix[midrow][0])
up = midrow+1;
else
down = midrow-1;
} //对行数进行循环查询
for(i=0;i<= midrow;i++){
int left =0;
int right = matrix[0].length -1;
while(left<=right){
int mid = left+(right-left)/2;
if (matrix[i][mid]==target)
return true;
else if(matrix[i][mid]<target)
left =mid + 1;
else
right = mid-1;
}
}
return false;
}
}