非递减数列
此博客链接:https://www.cnblogs.com/ping2yingshi/p/14383691.html
非递减数列
题目链接:https://leetcode-cn.com/problems/non-decreasing-array/
题目
给你一个长度为 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
解释: 你不能在只改变一个元素的情况下将其变为非递减数列。
题解
非递减数列,意思就是递增数列,但是包含数字相等的情况,如果出现递减的情况,可以把前一个数减小,或者后面一个数增大,变成递增的数列,我考虑了两种情况,如果前面一个数比后面一个数大的话,我把前面一个数赋值给后面一个数或者把后面一个数赋值给前面一个数,然后遍历整个数组,看是否还有递减的情况,如果有的话,就说明不能改变一个数把数组变成非递增的。
代码
class Solution { public boolean checkPossibility(int[] nums) { int len=nums.length; int count=0; int count1=0; int num1[]=new int[len]; int num2[]=new int [len]; for(int i=0;i<len;i++) { num1[i]=nums[i]; num2[i]=nums[i]; } for(int i=0;i<len-1;i++) { if(nums[i]>nums[i+1]) { num1[i]=nums[i+1]; num2[i+1]=nums[i]; break; } } for(int i=0;i<len-1;i++) { if(num1[i]>num1[i+1]) { count++; } if(num2[i]>num2[i+1]) { count1++; } } if(count>0&&count1>0) { return false; } return true; } }
结果
出来混总是要还的