题目描述:

给你一个长度为 n 的整数数组,请你判断在 最多 改变 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
解释: 你不能在只改变一个元素的情况下将其变为非递减数列。

思路分析:

至多改变一个的前提下变成非递减数组,犯的很大的一个误区就是只要满足nums[i]>nums[i+1]少于等于一个时就能满足条件,其实不然,比如这个测试用例就通不过:[3,4,2,3]。所以需要再研究研究怎样才能满足题目要求。

不难得出以下规律:

当 nums[i] 破坏了数组的单调递增时,即 nums[i] < nums[i - 1]  时,为了让数组有序,我们发现一个规律:

  • 当 i = 1 ,那么修改 num[i- 1] ,不要动 nums[i] ,因为nums[i]后面的元素是啥我们还不知道呢,少动它为妙。
  • 当 i > 1 时,我们应该优先考虑把 nums[i - 1] 调小到 >= nums[i - 2] 并且 <= nums[i]。同样尽量不去修改 nums[i] ,理由同上。
  • 当 i > 1 且 nums[i] < nums[i - 2] 时,我们无法调整 nums[i - 1] ,我们只能调整 nums[i] 到 nums[i - 1] 。
class Solution {public boolean checkPossibility(int[] nums) {int len=nums.length;int times=0;for(int i=0;i<len-1;i++){int x=nums[i],y=nums[i+1];if(x>y){times++;if(times>1){return false;}if(i>0&&y<nums[i-1]){nums[i+1]=x;}else{nums[i]=y;} }}return true;}
}

LeetCode-665:非递减数列相关推荐

  1. LeetCode 665. 非递减数列(双指针)

    1. 题目 给定一个长度为 n 的整数数组,你的任务是判断在最多改变 1 个元素的情况下,该数组能否变成一个非递减数列. 我们是这样定义一个非递减数列的: 对于数组中所有的 i (1 <= i ...

  2. leetcode 665. 非递减数列(贪心算法)

    给你一个长度为 n 的整数数组,请你判断在 最多 改变 1 个元素的情况下,该数组能否变成一个非递减数列. 我们是这样定义一个非递减数列的: 对于数组中所有的 i (0 <= i <= n ...

  3. LeetCode 665 非递减数列

    题目描述 给你一个长度为 n 的整数数组,请你判断在 最多 改变 1 个元素的情况下,该数组能否变成一 个非递减数列.我们是这样定义一个非递减数列的: 对于数组中所有的 i (0 <= i &l ...

  4. 665. 非递减数列 golang 切片越界问题的探讨(二)

    思路 给定一个长度为 n 的整数数组,你的任务是判断在最多改变 1 个元素的情况下,该数组能否变成一个非递减数列. 我们是这样定义一个非递减数列的: 对于数组中所有的 i (1 <= i < ...

  5. 力扣665. 非递减数列

    题目 给你一个长度为 n 的整数数组 nums ,请你判断在 最多 改变 1 个元素的情况下,该数组能否变成一个非递减数列. 我们是这样定义一个非递减数列的: 对于数组中任意的 i (0 <= ...

  6. 665. 非递减数列

    给定一个长度为 n 的整数数组,你的任务是判断在最多改变 1 个元素的情况下,该数组能否变成一个非递减数列. 我们是这样定义一个非递减数列的: 对于数组中所有的 i (1 <= i < n ...

  7. leetcode 665. Non-decreasing Array | 665. 非递减数列(Java)

    题目 https://leetcode.com/problems/non-decreasing-array/ 题解 一开始思路有问题,忽略了一些情况,见草稿. 第一次提交没过,根据 test case ...

  8. 非递减数列JAVA_C语言实现两个递减数列中寻找某一个数

    本文实例讲述了C语言实现两个递减数列中寻找某一个数的方法,分享给大家供大家参考之用.具体方法如下: 通常来说这道题算二分查找法中非常有难度的一题了. 题目如下: 一个数组是由一个递减数列左移若干位形成 ...

  9. C#LeetCode刷题之#665-非递减数列( Non-decreasing Array)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3732 访问. 给定一个长度为 n 的整数数组,你的任务是判断在最 ...

最新文章

  1. wegame饥荒一直连接中_23万人捧场热血传奇怀旧版,WeGame拯救计划,前景如何?...
  2. java mina多线程_Java多线程基础总结九:Mina窥探(1)
  3. Oracle数据库的下载和安装
  4. 网页直播中推流组件EasyRTM推送RTMP扩展支持HEVC(H265)
  5. shell脚本之变量的作用域
  6. 在bcb中添加activex控件_LinkedCell 属性介绍,OLEObjects 控件
  7. python arp攻击_ARP欺骗——用Python实现道德黑客攻击的自动化
  8. 计算机工程学院运动会方阵口号,关于校运会的方阵口号
  9. [剑指offer][JAVA]面试题第[32-3]题[从上到下打印二叉树 ][BFS]
  10. maven实现多模块热部署
  11. [转]学习c++的50条忠告
  12. Obejctive-C 2.0 Mac和iOS开发实践指南(Objective-C 2.0最佳入门指南)
  13. 加密狗厂商及工作原理介绍
  14. 电视盒子刷鸿蒙系统,当贝市场亲测有效三款获取电视和盒子root权限的工具应用...
  15. sqluldr2导出过blob字段_sqluldr2导出数据没有文件也没有报错
  16. Windows无法安装到这个磁盘,选中的磁盘具有MBR分区表。在EFI系统上,Windows只能安装GPT磁盘。
  17. 高等数学复习笔记——第八章:向量代数与空间解析几何
  18. 大数据自学全套教程,免费分享,赶紧码起来!(纯干货系列)
  19. (离散)设函数 f:A→B,g:B→C,证明:若g °f是满射,则g是满射.
  20. Tensorflow2.6实现Unet结构神经网络(3D卷积)识别脑部肿瘤并实现模型并行

热门文章

  1. 【原创】记一次HttpWebRequest中国移动查账单爬虫的攻克历程
  2. 车辆特征系数——车速的计算
  3. 切图后用ie6浏览时切片间有空隙
  4. 转---猫大叫一声,所有的老鼠都开始逃跑,主人被惊醒 [观察者模式]
  5. linux打印JAVA日志命令_Linux下查看日志用到的常用命令
  6. html代码高亮带行号,kindeditor代码高亮自动行号功能
  7. 由SGA组件内存移动导致前台业务超时问题处理过程
  8. Oracle 19c RAC打补丁过程避坑指南
  9. PostgreSQL 获评2017 DB-Engines年度DBMS榜首
  10. 云原生时代,政企混合云场景IT监控和诊断的难点和应对之道