版权声明:版权归个人所有,未经博主允许,禁止转载 https://blog.csdn.net/danspace1/article/details/88945442
原题
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 first 4 to 1 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].
解法
遍历nums, 如果发现nums[i] > nums[i+1], 有两种可能, 一种是将nums[i]取较小值nums[i+1], 另一种是将nums[i+1]取较大值nums[i], 然后检查这两种方法的数组是否为递增数组.
代码
class Solution(object):
def checkPossibility(self, nums):
"""
:type nums: List[int]
:rtype: bool
"""
one, two = nums[:], nums[:]
for i in range(len(nums)-1):
if nums[i] > nums[i+1]:
one[i] = nums[i+1]
two[i+1] = nums[i]
break
return one == sorted(one) or two == sorted(two)