题目描述:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
实现代码1:
function Find(target, array)
{
var row=array.length;
var col=array[0].length;
var rowInd=0;
var colInd=col-1;
while(rowInd<row && colInd>=0){ //从右上角开始遍历
if(array[rowInd][colInd]==target){
return true;
}else if(array[rowInd][colInd]>target){ //若某元素大于目标元素,则列序>=colInd的元素都不符合
colInd--;
}else{ //若某元素小于目标元素,则行序<=rowInd的元素都不符合
rowInd++;
}
}
return false;
}
代码效率:运行时间:81ms 占用内存:8008k
优化代码2:(利用二分查找法)
function Find(target, array)
{
var row=array.length;
var col=array[0].length;
var low=0;
var high=col-1;
var rowInd=0;
var mid;
for(var i=0;i<row;i++){ //大遍历行,小遍历列,在小遍历中使用二分查找法
low=0; //每次行遍历都需要初始化low为0,high保留上一步的处理值
while(low<=high){
mid=Math.floor((low+high)/2);
if(array[i][mid]<target){
low=mid+1;
}else if(array[i][mid]>target){
high=mid-1;
}else{
return true;
}
}
}
return false;
}
代码效率: 运行时间:78ms 占用内存:7856k