0️⃣python数据结构与算法学习路线
学习内容:
- 基本算法:枚举、排序、搜索、递归、分治、优先搜索、贪心、双指针、动态规划等…
- 数据结构:字符串(string)、列表(list)、元组(tuple)、字典(dictionary)、集合(set)、数组、队列、栈、树、图、堆等…
题目:
给你一个长度为 n 的整数数组,请你判断在 最多 改变 1 个元素的情况下,该数组能否变成一个非递减数列。
我们是这样定义一个非递减数列的: 对于数组中任意的 i (0 <= i <= n-2),总满足 nums[i] <= nums[i + 1]。
输入输出:
输入: nums = [4,2,3]
输出: true
解释: 你可以通过把第一个4变成1来使得它成为一个非递减数列。
解题思路:
如果第 i 个数字比 i-1 数字小(非递减)
- count + 1
- 判断i是否是否 >= i - 2 或 i =1:nums[i - 1] = nums[i]
- 否则 nums[i] = nums[i - 1]
返回count <= 1
算法实现:
class Solution(object):
def checkPossibility(self, nums):
N = len(nums)
count = 0
for i in range(1, N):
if nums[i] < nums[i - 1]:
count += 1
if i == 1 or nums[i] >= nums[i - 2]:
nums[i - 1] = nums[i]
else:
nums[i] = nums[i - 1]
return count <= 1
出现问题:
- 每次判断完之后直接变换为需要变的,就可以不用考虑错误数字给后面其他数字的判断造成影响