665. Non-decreasing Array
Posted jeroen
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了665. Non-decreasing Array相关的知识,希望对你有一定的参考价值。
Given an array with n
integers, your task is to check if it could become non-decreasing by modifying at most 1
element.
We define an array is non-decreasing if array[i] <= array[i + 1]
holds for every i
(1 <= i < n).
Example 1:
Input: [4,2,3] Output: True Explanation: You could modify the first4
to1
to get a non-decreasing array.
Example 2:
Input: [4,2,1] Output: False Explanation: You can‘t get a non-decreasing array by modify at most one element.
Note: The n
belongs to [1, 10,000].
非递减数列
给定一个长度为 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]。
--------------------------------------------------- ---------------------------------------------------
关键就是当两元素nums[i - 1], nums[i]递减时
nums[i - 2], nums[ i- 1], nums[i]三元素之间的大小关系和变化关系
如果nums[i] > nums[i - 2],那么让nums[i - 1] = nums[i] 即可 如[4, 6, 5] 变为[4, 5, 5]
如果nums[i] < nums[i - 2],那么让nums[i] = nums[i - 1]即可, 如[4, 5, 3] 变为[4, 5, 5]
更改多于一次直接返回False
class Solution: def checkPossibility(self, nums): """ :type nums: List[int] :rtype: bool """ modified = False for i in range(len(nums)): if i > 0: if nums[i] < nums[i - 1]: if modified: return False if i > 1: if nums[i] < nums[i - 2]: nums[i] = nums[i - 1] else: nums[i - 1] = nums[i] else: nums[i - 1] = nums[i] modified = True return True
以上是关于665. Non-decreasing Array的主要内容,如果未能解决你的问题,请参考以下文章
[leetcode-665-Non-decreasing Array]