LeetCode665-easy-非遞減數列-JavaScript版

// 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

作者GitHub:https://github.com/cunzaizhuyi/js-leetcode

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章