[题目来源:Duing] 在一个二维数组中,每个一维数组长度相同,每一行按照从左到右的顺序递增,每一列按照从上往下的顺序递增。请完成一个函数输入一个这样的二维数组,和一个整数,判断数组中是否含有该整数?
[解析来源:叁贰壹] 我自己,hahaha~
依题意,每一行按照从左到右的顺序递增,每一列按照从上往下的顺序递增。那么你首先就会想到暴力破解,时间复杂度是O(n^2);但是,根据题意是可以做到更简单的,就像下面。
arr[0][0] 是整个数组最小的数,如果 target 比它小,那就直接返回 false
function getTarget(target, arr) {
if (arr[0][0] > target) return false;
var row = 0,
col = arr[0].length - 1,
result = false;
while (row < arr.length && col >= 0) {
if (target > arr[row][col]) row++;
else if (target < arr[row][col]) col--;
else {
result = true;
break;
}
}
return result;
}
var target = Math.floor(prompt("请输入目标:"));
var arr = eval(prompt("请输入数组:"));
getTarget(target, arr) ? alert("目标在数组中") : alert("目标不在数组中");
感谢观看 期待关注
关注我,带你一起写bug
warning :未经授权,不得转载
有问题的小伙伴请在下方留言,喜欢就点个赞吧