随笔 - 384  文章 - 0  评论 - 0  阅读 - 13万

力扣665(java)-非递减数列(中等)

题目:

给你一个长度为 n 的整数数组 nums ,请你判断在 最多 改变 1 个元素的情况下,该数组能否变成一个非递减数列。

我们是这样定义一个非递减数列的: 对于数组中任意的 i (0 <= i <= n-2),总满足 nums[i] <= nums[i + 1]。 

示例 1:

输入: nums = [4,2,3]
输出: true
解释: 你可以通过把第一个 4 变成 1 来使得它成为一个非递减数列。
示例 2:

输入: nums = [4,2,1]
输出: false
解释: 你不能在只改变一个元素的情况下将其变为非递减数列。

提示:

n == nums.length
1 <= n <= 104
-105 <= nums[i] <= 105

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/non-decreasing-array
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解题思路:

1.设置一个变量count来记录非递增的数量,如果count > 1就表明没有办法只改变一个元素让数组变成一个非递减的数列;

2.为了满足题目的要求 nums[i] <= nums[i + 1],当前位置的元素的大小可能不变也可能变得和前一个位置的元素一样大;

3.分为三种讨论:

  • 如果没有nums[i-2],则只需要把nums[i-1]变为nums[i]    ==>   nums[i-1] = nums[i];
  • 如果nums[i-2] < nums[ i] 并且nums[i-2] <= nums[i] , 只需要把前一个元素变为当前元素  ==>  nums[i-1] = nums[i];
  • 如果nums[i] < nums[i-1] 并且nums[i] < nums[i-1] ,只需要把当前元素变为前一个元素   ==>    nums[i] = nums[i-1]
例如:
[4,2,5]  把4调成2
[1,4,2,5] 把4换成2
[1,4,1,3] 把4换成1
[3,4,2,5] 把2换成4

代码:

 或者:

 

posted on   我不想一直当菜鸟  阅读(50)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示