当前位置: 首页 > news >正文

LeetCode_贪心算法_中等_665.非递减数列

目录

  • 1.题目
  • 2.思路
  • 3.代码实现(Java)

1.题目

给你一个长度为 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/problems/non-decreasing-array

2.思路

(1)贪心算法
本题参考该 LeetCode 用户题解。

3.代码实现(Java)

//思路1————贪心算法
class Solution {
    public boolean checkPossibility(int[] nums) {
        int n = nums.length;
        if (n <= 2) {
            return true;
        }
        // cnt 记录改变元素的次数
        int cnt = nums[0] <= nums[1] ? 0 : 1;
        for (int i = 1; i < n - 1; i++) {
        	//遇到了递减的情况
            if (nums[i] > nums[i + 1]) {
                //改变元素的次数加一
                cnt++;
                //如果次数超过 1,则在最多改变 1 个元素的情况下,该数组不能变成一个非递减数列
                if (cnt > 1) {
                    return false;
                }
                /*
                	还允许修改,但需要注意以下 2 点:
					(1) 需要尽可能不放大 nums[i + 1],这样会让后续非递减更困难;
					(2) 如果缩小 nums[i],但不破坏前面的子序列的非递减性;
				*/
                if (nums[i + 1] < nums[i - 1]) {
                    nums[i + 1] = nums[i];
                } else {
                	nums[i] = nums[i + 1];
				}
            }
        }
        return true;
    }
}

相关文章:

  • JS课堂案例
  • 搭建组件私有仓库 - Hexo
  • 【转载】RocketMQ和RabbitMQ的特性及区别
  • 『Java安全』初试JDWP攻击
  • JUCE框架教程(6)——通过AudioProcessorValuetTeeState链接数据和UI
  • IDC TechScape中国数据安全发展路线图,美创两款产品获重点推荐
  • python语言通过neo4j构建知识图谱
  • JAVA基于微信小程序的校园信息共享平台毕业设计-附源码211615
  • javaweb医院科室管理系统springboot
  • 深度学习(PyTorch)——长短期记忆神经网络(LSTM)
  • 外贸怎么在谷歌搜索客户?
  • L73.linux命令每日一练 -- 第十章 Linux网络管理命令 -- dig和host
  • 用MicroPython开发ESP32-用TFT-LCD(ST7735S)显示图像
  • off-by-one+overlapped chunk
  • Debian/Ubuntu/Kali 如何安装 Spotify 音乐白嫖神器
  • SegmentFault for Android 3.0 发布
  • 【162天】黑马程序员27天视频学习笔记【Day02-上】
  • 11111111
  • egg(89)--egg之redis的发布和订阅
  • ES学习笔记(12)--Symbol
  • HTTP 简介
  • input的行数自动增减
  • iOS动画编程-View动画[ 1 ] 基础View动画
  • Mac转Windows的拯救指南
  • react-core-image-upload 一款轻量级图片上传裁剪插件
  • VirtualBox 安装过程中出现 Running VMs found 错误的解决过程
  • vue2.0项目引入element-ui
  • vue脚手架vue-cli
  • Work@Alibaba 阿里巴巴的企业应用构建之路
  • 创建一个Struts2项目maven 方式
  • 关键词挖掘技术哪家强(一)基于node.js技术开发一个关键字查询工具
  • 后端_MYSQL
  • 全栈开发——Linux
  • 微信小程序上拉加载:onReachBottom详解+设置触发距离
  • 写代码的正确姿势
  • 用 Swift 编写面向协议的视图
  • 翻译 | The Principles of OOD 面向对象设计原则
  • 回归生活:清理微信公众号
  • 机器人开始自主学习,是人类福祉,还是定时炸弹? ...
  • #微信小程序:微信小程序常见的配置传旨
  • #中国IT界的第一本漂流日记 传递IT正能量# 【分享得“IT漂友”勋章】
  • (html转换)StringEscapeUtils类的转义与反转义方法
  • (附源码)计算机毕业设计ssm电影分享网站
  • (免费领源码)python+django+mysql线上兼职平台系统83320-计算机毕业设计项目选题推荐
  • (四)Controller接口控制器详解(三)
  • (一)eclipse Dynamic web project 工程目录以及文件路径问题
  • (原創) 如何解决make kernel时『clock skew detected』的warning? (OS) (Linux)
  • (转)nsfocus-绿盟科技笔试题目
  • (转)如何上传第三方jar包至Maven私服让maven项目可以使用第三方jar包
  • *p=a是把a的值赋给p,p=a是把a的地址赋给p。
  • .\OBJ\test1.axf: Error: L6230W: Ignoring --entry command. Cannot find argumen 'Reset_Handler'
  • .Net 4.0并行库实用性演练
  • .NET Core 实现 Redis 批量查询指定格式的Key
  • .NET MVC第五章、模型绑定获取表单数据
  • .NET 读取 JSON格式的数据