[題目來源: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 :未經授權,不得轉載
有問題的小夥伴請在下方留言,喜歡就點個贊吧