题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
- 算法思路:
在二位数组中查找,由于数组是有顺序的,所以在右上角或者左下角开始查找,每次比较大小都能排除一行或者一列,一直循环找下去即可。 - 实现思路:
采用while循环,每比较一次就按查找的目标前进一行或者一列
function findNumber(arr, num) {
var row = arr.length;
var i = row - 1;
var col=arr[0].length;
var j = 0;
while (i >= 0 && j<=col-1) {
if (arr[i][j] > num) {
i--;
} else if (arr[i][j] < num) {
j++;
} else {
return true;
}
}
return false;
}
for循环
function findNumber(arr, num) {
var row = arr.length;
var col=arr[0].length;
for (var i = 0; i < row;i++) {
for (var j = col-1; j >=0; j--) {
if(arr[i][j]>num){
continue;
}else if(arr[i][j]<num){
//i++;
break;
}else{
return true;
}
}
}
return false;
}
!由于for循环的机制是 初始化-判断-函数体-表达式-判断-函数体-表达式。。。由于表达式中已经含有j--和i++所以在函数体中break和continue之后不需要在做j--和i++的运算,如果运算就重复了。