1. 程式人生 > >【JS】 非遞減數列 Leetcode # 陣列

【JS】 非遞減數列 Leetcode # 陣列

給定一個長度為 n 的整數陣列,你的任務是判斷在最多改變 1 個元素的情況下,該陣列能否變成一個非遞減數列。

我們是這樣定義一個非遞減數列的: 對於陣列中所有的 i (1 <= i < n),滿足 array[i] <= array[i + 1]。

輸入: [4,2,3] ,輸出: True , 解釋: 你可以通過把第一個4變成1來使得它成為一個非遞減數列。
輸入: [4,2,1] ,輸出: False , 解釋: 你不能在只改變一個元素的情況下將其變為非遞減數列。
輸入: [8,20,21,8] ,輸出: True

說明: n 的範圍為 [1, 10,000]。



解法一:

判斷是否符合遞增陣列,

只要求輸出True 和 False ,那麼不符合的元素先刪除再判斷,

只是刪哪個元素,更大的還是更小的,要測試 if 條件 。例如 [1, 5 ,8 , 6] , [2 , 3 ,1 ,6] , [1, 3 ,5 , 1 ,2 ]

// 2018/11/15 Sun 晚上

var checkPossibility = function(nums) {

    let del=0
    for(let i=0;i<nums.length-1;i++) {
        if(nums[i] > nums[i+1]){
            if(i==nums.length-2 || nums[i-1]>nums[i+1]){
                nums.splice(i+1,1)
            }else{
                nums.splice(i,1)
            }
            i=-1;
            del+=1
            if(del>1) return false;
        }
// console.log(nums,del)
    }

    return true;
};

325 / 325 個通過測試用例
執行用時:84 ms

在這裡插入圖片描述