665. 非递减数列

给你一个长度为 n 的整数数组 nums ,请你判断在 最多 改变 1 个元素的情况下,该数组能否变成一个非递减数列。

我们是这样定义一个非递减数列的: 对于数组中任意的 i (0 <= i <= n-2),总满足 nums[i] <= nums[i + 1]

示例 1:

输入: nums = [4,2,3]
输出: true
解释: 你可以通过把第一个 4 变成 1 来使得它成为一个非递减数列。

示例 2:

输入: nums = [4,2,1]
输出: false
解释: 你不能在只改变一个元素的情况下将其变为非递减数列。

解题过程

// first time
// worong, input [5, 7, 1, 8], output false

class Solution {
    fun checkPossibility(nums: IntArray): Boolean {
        var i = 0
        var len = nums.size - 1
        var p = 0
        while(i < len) {
            if (p > 1) break
            if (nums[i] > nums[i+1]) {
                p++
                if (i > 0) {
                    nums[i] = nums[i+1]
                    i--
                } else {
                    i++
                }
            } else {
                i++
            }
        }
        return p < 2
    }
}
// add more check condication

class Solution {
    fun checkPossibility(nums: IntArray): Boolean {
        var i = 0
        var len = nums.size - 1
        var p = 0
        while(i < len) {
            if (p > 1) break
            if (nums[i] > nums[i+1]) {
                p++
                if (i > 0) {
                    if (nums[i-1] > nums[i+1]) {
                        nums[i+1] = nums[i]
                        i++
                    } else {
                        nums[i] = nums[i+1]
                        i--
                    }
                } else {
                    i++
                }
            } else {
                i++
            }
        }
        return p < 2
    }
}

官方解法

class Solution {
    fun checkPossibility(nums: IntArray): Boolean {
        var i = 0
        var len = nums.size - 1
        var p = 0
        while(i < len) {
            if (nums[i] > nums[i+1]) {
                p++
                if(p > 1) return false
                if (i > 0 && nums[i-1] > nums[i+1]) {
                    nums[i+1] = nums[i]
                }
            }
            i++
        }
        return p < 2
    }
}

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top