// 665 easy 非遞減數列
// 給定一個長度爲 n 的整數數組,你的任務是判斷在最多改變 1 個元素的情況下,該數組能否變成一個非遞減數列。
// 我們是這樣定義一個非遞減數列的: 對於數組中所有的 i (1 <= i < n),滿足 array[i] <= array[i + 1]。
//
// 示例 1:
// 輸入: [4,2,3]
// 輸出: True
// 解釋: 你可以通過把第一個4變成1來使得它成爲一個非遞減數列。
// 示例 2:
// 輸入: [4,2,1]
// 輸出: False
// 解釋: 你不能在只改變一個元素的情況下將其變爲非遞減數列。
// 說明: n 的範圍爲 [1, 10,000]。
/**
* @param {number[]} arr
* @return {boolean}
*/
var checkPossibility = function(arr) {
if (arr.length <= 2) return true;
let count = 0;
let index;
for (let i = 0; i < arr.length - 1; i++){
if (arr[i] > arr[i+1]){
count++;
index = i;
}
}
if (count === 0) return true; // 不太可能
if (count > 1) return false;
// 等於1 的情況下, 分爲邊界上斷掉,和中間部分斷掉兩種情況
if (index === 0 || index === arr.length - 2) return true;
if (arr[index] <= arr[index + 2] || arr[index - 1] <= arr[index + 1]){
return true;
} else {
return false;
}
};
// console.log(checkPossibility([3,4,2,3]))
console.log(checkPossibility([4,2,3]))
// console.log(sortEn(arr11))
// [4,1,2,3] 兩頭必然爲true
// [3,14,16,1,5] false
// [1,4,1,4] true
LeetCode665-easy-非遞減數列-JavaScript版
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.