题目描述
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
解题思路:
入手点就是矩阵有序,可以联系二分查找,二分查找是每次舍去一半;
而这道题是每次舍去一行,或者一列;
每次用右上角的数,下标设为 i,j ; 跟target做比较,如果相同,就返回true;
如果是大于 target,说明 i 所在的行全部小于 target ( 因为行的数字是递增的 ) ,所以舍去 i 行;
否则则说明 j 所在列全部大于 target( 因为列的数字也是递增的 ),所以舍去 j 列;
复杂度为O( min ( r , l ) );
代码如下:
public class Solution {
public boolean Find(int target, int [][] array) {
int row,cow;
row=array.length;
if(row<0)
return false;
cow=array[0].length;
if(cow<0)
return false;
int i=0,j=cow-1;
while(i<row&&j>=0)
{
if(array[i][j]==target)
return true;
if(array[i][j]>target){
j--;
}
else{
i++;
}
}
return false;
}
}