牛客网刷题 第一天
题目描述
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
思路一:最简单的方法当然是两层for循环遍历喽,不过时间复杂度比较高
思路二:用二分查找,每一行看成一个有序的递增序列。用二分查找方法。
思路三:比较矩阵右上角的数与target的大小,如果target比这个矩阵右上角的数大,因为右上角的元素是该行最大的值了,那么就从他下一行寻找。如果target比右上角的数小,因而它是按照行,列递增的,所以它应该从除去最右边的那些列寻找。向左寻找。
public class Solution {
public boolean Find(int target, int [][] array) {
if(array.length ==0 || array[0].length==0){
return false;
}
int rows = array.length-1;
int cols = array[0].length-1;
int i = 0;
int j =cols;
while(i<=rows && j >=0)
{
if(array[i][j] < target)
{
i++;
}else if(array[i][j]>target)
{
j--;
}else{
return true;
}
}
return false;
}
}
2019. 6.9日打卡