LeetCode:665. 非递减数列

简介: LeetCode:665. 非递减数列

665. 非递减数列

难度中等688

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


思路

遍历数组,遇到nums[i] > nums[i+1] 将nums[i-1]和nums[i+1]进行比较,比较失败将nums[i+1] 赋值为nums[i] 在下一次遍历的时候比较,nums[i+1]和nums[i+2]  


提示:

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


/**
 * @param {number[]} nums
 * @return {boolean}
 */
var checkPossibility = function(nums) {
    const n = nums.length;
    let count = 0;
    for(let i = 0; i < n; i++) {
        let left = nums[i];
        let right = nums[i+1];
        // 将nums[i+1] 变为 nums[i]和nums[i+2]比较
        if(left > right) {
            count++;
            if(count > 1) {
                return false;
            }
            // 将nums[i+1]和nums[i-1]比较
            if(i > 0 && right < nums[i-1]) {
                nums[i+1] = nums[i]; // 将num[i+1] 变为 nums[i]
            }
        }
    }
    return true
};



目录
相关文章
Leetcode第38题(外观数列)
LeetCode第38题要求生成外观数列的第n项,该数列从数字1开始,每一项都是对前一项的描述,例如第1项是"1",第2项是"11",第3项是"21",以此类推。
81 0
LeetCode------斐波那契数列(2)
这篇文章提供了解决LeetCode上"斐波那契数列"问题的两种方法:一种是使用备忘录模式通过递归计算并存储结果以避免重复计算,另一种是自底向上的迭代方法,同时要求结果对1e9+7取模。
LeetCode------斐波那契数列(2)
|
算法 测试技术 C#
前缀和+单调双队列+贪心:LeetCode2945:找到最大非递减数组的长度
前缀和+单调双队列+贪心:LeetCode2945:找到最大非递减数组的长度
leetcode-38:外观数列
leetcode-38:外观数列
106 0
|
算法 安全 Swift
LeetCode - #38 外观数列
不积跬步,无以至千里;不积小流,无以成江海,Swift社区 伴你前行。如果大家有建议和意见欢迎在文末留言,我们会尽力满足大家的需求。
166 0
LeetCode - #38 外观数列
【leetcode每日一题】1027. 最长等差数列
【leetcode每日一题】1027. 最长等差数列
|
存储 Python
LeetCode 38. 外观数列
给定一个正整数 n ,输出外观数列的第 n 项。
134 0
LeetCode 1502. 判断能否形成等差数列
如果一个数列中,任意相邻两项的差总等于同一个常数,那么这个数列就称为 等差数列 。
184 0
leetcode剑指offer53–n-1中缺失的数字(二分//or等差数列)
leetcode剑指offer53–n-1中缺失的数字(二分//or等差数列)
183 0
|
Java C语言
LeetCode刷题计划——单调数列
LeetCode刷题计划——单调数列
158 0

热门文章

最新文章