665. Non-decreasing Array -数组问题

题目描述

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

提示:

1 <= n <= 10 ^ 4
- 10 ^ 5 <= nums[i] <= 10 ^ 5

题解思路

  • 这道题依然可以用贪心的思路来求解
  • 题目要求 在最多改变一个元素的情况下 判断数组能否变成非递减
  • 那么我们就从前向后遍历 当改变次数超过一次,即说明不符合
  • 那么应该按照什么原则修改数组呢?
  • 由于我们从前向后遍历 我们应该尽量使得修改数组不影响后序数组状态 即能修改当前值 就不修改后面的值 让当前数组保持最优状态
  • 出现非递减数组 总共可以概括为两种情况
    • (132)nums[i]>nums[i+1] => nums[i-1]<nums[i+1] nums[i]=nums[i-1]
    • (321)nums[i]>nums[i+1] => nums[i-1]>nums[i+1] nums[i+1]=nums[i]
  • 程序最重要的部分就是对上述两种情况的处理

代码

class Solution {public boolean checkPossibility(int[] nums) {// 贪心问题// 遇到非递减数列时 尽量保持最优if(nums.length <=1){return true;}boolean flag = nums[0] <= nums[1] ? true: false;int len = nums.length;//遍历for(int i=1;i<len-1;i++){if(nums[i]>nums[i+1]){if(flag){if(nums[i+1]>=nums[i-1]){nums[i] = nums[i+1];}else{nums[i+1] = nums[i];}//机会用完了flag = false;}else{return false;}}}return true;}
}

665. Non-decreasing Array相关推荐

  1. LeetCode github集合,附CMU大神整理笔记

    Github LeetCode集合 本人所有做过的题目都写在一个java项目中,同步到github中了,算是见证自己的进步.github目前同步的题目是2020-09-17日之后写的题.之前写过的题会 ...

  2. Array Sharpening CodeForces - 1291B(思维)

    You're given an array a1,-,ana1,-,an of nn non-negative integers. Let's call it sharpened if and onl ...

  3. 数据结构实验8:内部排序

    实验8                                                                            姓名: 学号: 班级: 8.1 实验目的 ...

  4. 【Python基础】科学计算库Scipy简易入门

    0.导语 Scipy是一个用于数学.科学.工程领域的常用软件包,可以处理插值.积分.优化.图像处理.常微分方程数值解的求解.信号处理等问题.它用于有效计算Numpy矩阵,使Numpy和Scipy协同工 ...

  5. Codeforces 1291 Round #616 (Div. 2) B

    B. Array Sharpening time limit per test1 second memory limit per test256 megabytes inputstandard inp ...

  6. 我和乘子交替方向法admm_找到最大和交替子序列

    我和乘子交替方向法admm Problem statement: 问题陈述: Given a sequence of numbers, you have to find the maximum sum ...

  7. LDAP目录服务折腾之后的总结

    前言 公司管理员工信息以及组织架构的后台系统要和Active Directory目录服务系统打通,后台系统使用PHP开发, 折腾了二十多天,终于上线了,期间碰到过各种疑难问题,不过总算在GOOGLE大 ...

  8. 【机器学习基础】Scipy(科学计算库) 手把手手把手

    0.导语 Scipy是一个用于数学.科学.工程领域的常用软件包,可以处理插值.积分.优化.图像处理.常微分方程数值解的求解.信号处理等问题.它用于有效计算Numpy矩阵,使Numpy和Scipy协同工 ...

  9. 支付宝手机网站支付示例

    config.php: $config['sms'] = ['accessKeyId'=>'LTAI4GCBpRwfrPALfeDNE9QT','accessKeySecret'=>'JR ...

  10. 网页内嵌入百度搜索的源代码-站长FAQ

    免费搜索代码 知道免费代码 新闻免费代码  免费搜索代码 ·百度向网友开放免费下载百度搜索代码. ·只需将以下代码之一加入到您的网页中,您的网站即可获得同百度搜索引擎一样强大的搜索功能! HTML代码 ...

最新文章

  1. Java图形化:布局方式
  2. 图解|深入理解跳表及其在Redis中的应用
  3. 2021-06-29快速找出Excel表格中两列数据不同内容的3种方法!
  4. SAP SD 常用表
  5. Operating System-进程/线程内部通信-信号量和PV操作
  6. 写在开年:移植wolfssl4.3.0到w60x_sdk_3.04时的一点问题
  7. 统计学习方法第八章作业:分类问题AdaBoost算法、回归问题提升树算法 代码实现
  8. Hashtable 和 HashMap 的区别
  9. Java使用swagger时显示实体类注解问题
  10. CISCO PIX/ASA K8升级K9的方法与步骤
  11. keil4 新建stm32工程
  12. 含论文答辩PPT任务书源码等基于SSM框架演唱会网上订票系统
  13. 【编译原理】自下而上语法分析(C/C++源码+实验报告)
  14. 超市库存java管理系统_Java案例:超市库存管理系统
  15. win10禁用全角_win10输入法全角半角怎么切换 快捷键使用教程
  16. 在windows10上写自己的第一个python代码
  17. P6 Vue双向绑定 v-model
  18. 利用Ajax访问后台数据
  19. 基于CPT构建网络,熟悉各层协议
  20. file和folder的区别是什么?

热门文章

  1. JS学习之路系列总结五行阵(此文犹如武林之中的易筋经,是你驰骋IT界的武功心法,学会JS五大阵法就学会了JS,博主建议先学三才阵)...
  2. (初学笔记1)python读多波段遥感影像并存到三维数组中
  3. 日常维护SQL以及脚本
  4. 数据分析初试:“梧桐杯”中国移动大数据应用创新大赛 - 智慧城市赛道
  5. AWZ爱伪装常用问题汇总
  6. 非主流照片制作软件 Picasa有哪些主要的功能
  7. 拓嘉辰丰电商:关于拼多多推广计划有哪些问题
  8. Libre OJ #10064 黑暗城堡(spfa+STL求短路)
  9. 用Python做九宫格照片
  10. 不忘初心Windows11精简版