时间复杂度 $O(n)$
空间复杂度 $O(1)$
对于每个 i,需要让 nums[i] <= nums[i + 1],如果有 nums[i] > nums[i + 1],则要 modify
但是本题唯一的易错点就在这,
如果将 nums[i] 缩小,可能会导致其无法融入前面已经遍历过的非递减子数列;
3 4 2 3
3 2 2 3
如果将 nums[i + 1] 放大,可能会导致其后续的继续出现递减;
3 4 2 3
3 4 4 3
所以要采取贪心的策略,在遍历时,每次需要看连续的三个元素,也就是瞻前顾后,遵循以下两个原则:
需要尽可能不放大 nums[i + 1],这样会让后续非递减更困难;
如果缩小 nums[i],但不破坏前面的子序列的非递减性;
在遍历时,每次需要看连续的三个元素
遍历数组,如果遇到递减:
还能修改:
修改方案1:将nums[i]缩小至nums[i + 1];
修改方案2:将nums[i + 1]放大至nums[i];
不能修改了:直接返回false;
缩小时,必保证 nums[i-1] <= nums[i+1]。这样 nums[i] 变小后,也比前一个大
否则,则将后面的放大
Last updated