非遞減數列----leetcode

給你一個長度爲 n 的整數數組,請你判斷在 最多 改變 1 個元素的情況下,該數組能否變成一個非遞減數列。

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

 

示例 1:

輸入: nums = [4,2,3]
輸出: true
解釋: 你可以通過把第一個4變成1來使得它成爲一個非遞減數列。

示例 2:

輸入: nums = [4,2,1]
輸出: false
解釋: 你不能在只改變一個元素的情況下將其變爲非遞減數列。

 

說明:

  • 1 <= n <= 10 ^ 4
  • - 10 ^ 5 <= nums[i] <= 10 ^ 5

AC代碼:

class Solution {
    public boolean checkPossibility(int[] nums) {
        if(nums.length==2)return true;
         int flag=0;
         for(int i=1;i<nums.length;i++){
             if(nums[i]<nums[i-1]){
                 int num=0;
                 int min=Math.min(nums[i],nums[i-1]);
                 int max=Math.max(nums[i],nums[i-1]);
                 if(i>=2&&i<nums.length-1){
                     if(min>=nums[i-2]&&min<=nums[i+1]){
                         num=1;
                         flag++;
                         nums[i]=min;
                         nums[i-1]=min;
                     }
                     else if(max>=nums[i-2]&&max<=nums[i+1]){
                         num=1;
                         flag++;
                         nums[i]=max;
                         nums[i-1]=max;
                     }
                     if(num==0)return false;
                 }
                 else if(i==1){
                     if(min>nums[i+1])return false;
                     else{
                         flag++;
                         nums[i]=min;
                         nums[i-1]=min;
                     }
                 }
                 else{
                    if(max<nums[i-2])return false;
                    else{
                         flag++;
                         nums[i]=max;
                         nums[i-1]=max;
                    }
                 }
             }
         }
         if(flag>1)return false;
         return true;
    }
}

 

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