题目描述:
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
首先想到的第一个办法就是for循环
function Find(target, array)
{
for(var i=0;i<array.length;i++){
for(var j=0;j<array[i].length;j++){
if(array[i][j] == target){
return true
}
}
}
return false
}
答案通过,但是感觉这样写太水了,时间复杂度为O(M*N)就有想用其他办法
function Find(target, array)
{
var row = array.length;
var col = array[0].length;
if(row === 0||col === 0){
return false
}
if(target<array[0][0]||target>array[row-1][col-1]){
return false
}
var i = 0;//行
var j = col-1;//列
while(i<row&&j>=0){
if(array[i][j]>target){
j--;
}else if(array[i][j]<target){
i++;
}else{
return true
}
}
}
这道题要着重注意加粗的地方