665. Non-decreasing Array - Medium

前往題目

想法

沒想法的一題,看起來很簡單,不過有好多edge case要考慮

思路

  1. 走過所有num
  2. 兩兩一組看,non-decreasing的話就直接continue
  3. 如果已經用了一次change就回傳false
  4. 如果當前的下一個比當前的上一個還大,那當前的就變成和下一個一樣大就可以了,例如3, 5, 4
  5. 反之,下一個變得和當前一樣大就可以,例如4, 5, 3

Code

class Solution {
    public boolean checkPossibility(int[] nums) {
        boolean changed = false;

        // Go through the nums
        for (int i = 0; i < nums.length - 1; ++i) {
            // Base case
            if (nums[i] <= nums[i + 1]) continue;
            
            // Already used the chance
            if (changed) return false;

            // Use the change
            if (i == 0 || nums[i + 1] >= nums[i - 1]) {
                nums[i] = nums[i + 1]; 
            } else {
                nums[i + 1] = nums[i];
            }
            changed = true;
        }
        return true;
    }
}

665. Non-decreasing Array - Medium
https://f88083.github.io/2024/05/29/665-Non-decreasing-Array-Medium/
作者
Simon Lai
發布於
2024年5月29日
許可協議