非递减数列 | 刷题打卡

165 阅读1分钟

来源:LeetCode:非递减数列

一.题目描述

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

二.解题思路

在改变最多一个元素下,该数组变成一个非递减数列(nums[i]<=nums[i+1]),只要检测到数组需要改变两次就返回当前数组不可能在改变一个元素的情况下变成一个非递减数列。定义一个变量flag来保存需要改变几次元素。

三.代码

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

四.总结

最近发现算法进阶太难了。嗖嗖

本文正在参与「掘金 2021 春招闯关活动」, 点击查看 活动详情