1. 程式人生 > >136、非遞減數列

136、非遞減數列

題目描述:
給定一個長度為 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]。

思路沒開啟,很難受,搞得我
主要就是當出現當前比前一個數字小時,應該將當前的改大還是將前一個減小
附上一篇部落格

非遞減數列

class Solution {
    public boolean checkPossibility(int[] nums) 
     {
         boolean modified = false;
         
         for(int i=0; i<nums.length; i++)
         {
             if(i+1 < nums.length && nums[i] > nums[i+1])
             {
                 if(modified) // if modified a number already
                     return false;
                 else // if it is first time to modify a number
                 {
                     if(i-1 < 0 || nums[i+1] >= nums[i-1]) // if nums[i+1] is larger or equal all numbers before nums[i]
                         nums[i] = nums[i+1]; // change nums[i] as same as nums[i+1]
                     else // if nums[i+1] is not larger than all numbers before nums[i]
                         nums[i+1] = nums[i]; // change nums[i+1] as same as nums[i]
                     
                     modified = true;
                 } 
             }
         }
         
         return true;
         
     }
}