其他分享
首页 > 其他分享> > 非递减数列

非递减数列

作者:互联网

题目描述:
给定一个长度为 n 的整数数组,你的任务是判断在最多改变 1 个元素的情况下,该数组能否变成一个非递减数列。

我们是这样定义一个非递减数列的: 对于数组中所有的 i (1 <= i < n),满足 array[i] <= array[i + 1]。

方法一:
一,当数组长度小于3时,最多需要调整一次就能满足条件
二,当数组长度大于等于3时,出现第i+1个元素大于第i个元素时,当第i-1个元素大于第i+1个元素时,nums[i+1]=nums[i];

class Solution {
    public boolean checkPossibility(int[] nums) {
        int len=nums.length;
        if(len<3){
            return true;
        }
        int count=0;
        for(int i=0;i<len-1;i++){
            if(nums[i+1]<nums[i]){
                count++;
                if(count>1){
                    return false;
                }
                if(i>0&&nums[i-1]>nums[i+1]){
                    nums[i+1]=nums[i];
                }
            }
        }
        return true;
    }
}

方法二:
需要改变的数有两种情况,一种是该数比两边的数都小,一种是比两边的数都大;

最后只要count1和count2只要有一个小于等于1就满足要求

class Solution {
    public boolean checkPossibility(int[] nums) {
        int count1=0;
        int count2=0;
        int len=nums.length;
        int max=nums[0];
        int min=nums[len-1];
        for(int i=1;i<len;i++){
            if(nums[i]<max){
                count1++;
            }
            if(nums[len-i-1]>min){
                count2++;
            }
            max=max>nums[i]?max:nums[i];
            min=min<nums[len-1-i]?min:nums[len-1-i];
        }
        return count1<=1||count2<=1;
    }
}
ZQQ~BK 发布了98 篇原创文章 · 获赞 12 · 访问量 2003 私信 关注

标签:递减,数列,nums,int,max,min,count1,count2
来源: https://blog.csdn.net/qq_42174669/article/details/104092473