LeetCode—665.Non-Decreasing Array 非减数组
题目
给出一个有n个数的数组,检查是否可以最多调整一个数的大小,使得数组是非单调递减的,如果可以,返回true,否则false
例如,输入[4, 2, 3],返回true,输入[4, 2, 1]返回false
思路
首先想到的肯定是需要遍历数组,找到打乱顺序的那个数,或者说拿到他的下标p,同时题目要求最多调整一个数,所以p的个数如果大于1是不可以的。当然如果p的个数为0,那就不用调整直接返回true
然后我们要讨论p的个数为1的情况。容易想到的是,如果p刚好位于数组第一个位置或者最后一个位置,我们只需调整到和第二个位置或者倒数第二个位置数字相同就可以,返回true;那么如果p位于不包含两端的中间位置呢?这时候我们应该去看p两侧的两个数字,如果Array[p-1]<=Array[p+1],只需将Array[p]调整到两者之间或者相等
代码
class Solution(object):
def checkPossibility(self, nums):
"""
:type nums: List[int]
:rtype: bool
"""
p = None
for i in range(len(nums)-1):
if nums[i]>nums[i+1]:
if p is not None:
return False
p = i
return(p is None or p == 0 or p == len(nums)-2
or nums[p-1]<=nums[p+1] or nums[p]<=nums[p+2])
//示例答案里nums[p]<=nums[p+2]我想好像没有必要,但也可能有情况没想到,先放在这里