LeetCode 665. 非递减数列

题目:

给你一个长度为 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

题解:

在做这道题的时候,其实就是要找会不会有两次或者多次出现不是非递减数列的情况。这样我们可以通过遍历数组,并且维护一个记录修改次数的变量即可。在每次修改中,如果当前元素大于前两个元素,将当前有问题的元素修改为它的前一个元素即可。

本题代码如下,时间复杂度On。

bool checkPossibility(int* nums, int numsSize) {
    if (numsSize <= 1) return true; // 处理特殊情况

    bool modified = false; // 记录是否已经进行过一次修改
    for(int i = 1; i < numsSize; i++) {
        if (nums[i-1] > nums[i]) {
            if (modified) return false; // 如果已经修改过一次,则返回 false
            if (i >= 2 && nums[i] < nums[i-2]) {
                nums[i] = nums[i-1]; // 修改当前元素为前一个元素的值
            }
            modified = true; // 标记已经修改过一次
        }
    }
    return true;
}

这是我个人的刷题记录,欢迎大家给我的博客提建议,以及如果您有好的leetcode刷题流程,希望能给我指点。

个人的github主页:gushouchuanzhi1 (Deyu Tan) · GitHub

个人的刷题记录仓库:https://github.com/gushouchuanzhi1/2023_personal_training

相关推荐

  1. Leetcode 665. 递减数列

    2024-04-21 03:18:03       17 阅读
  2. LeetCode 665. 递减数列

    2024-04-21 03:18:03       16 阅读
  3. LeetCode-递增子序列

    2024-04-21 03:18:03       12 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-21 03:18:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-21 03:18:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-21 03:18:03       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-21 03:18:03       20 阅读

热门阅读

  1. Linux线程调度

    2024-04-21 03:18:03       15 阅读
  2. springboot 的jdk版本找不到8怎么办?

    2024-04-21 03:18:03       14 阅读
  3. Spring 依赖注入

    2024-04-21 03:18:03       14 阅读