您现在的位置是:主页 > news > 做网站有用吗/天津seo外包团队
做网站有用吗/天津seo外包团队
admin2025/4/28 3:00:30【news】
简介做网站有用吗,天津seo外包团队,做电影收费网站,网站建设广州天河区C描述 LeetCode 665. 非递减数列 大家好,我叫亓官劼(q guān ji ),在CSDN中记录学习的点滴历程,时光荏苒,未来可期,加油~博主目前仅在CSDN中写博客,唯一博客更新的地址为:…
C++描述 LeetCode 665. 非递减数列
大家好,我叫亓官劼(qí guān jié ),在CSDN中记录学习的点滴历程,时光荏苒,未来可期,加油~博主目前仅在CSDN中写博客,唯一博客更新的地址为:亓官劼的博客 ,同时正在尝试在B站中做一些内容分享,B站主页为: 亓官劼的B站主页
本文原创为亓官劼,请大家支持原创,部分平台一直在恶意盗取博主的文章!!!
若需联系博主,可以联系本人微信:qiguanjie2015
给你一个长度为 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
解释: 你不能在只改变一个元素的情况下将其变为非递减数列。
说明:
1 <= n <= 10 ^ 4
- 10 ^ 5 <= nums[i] <= 10 ^ 5
解题思路
题目要求最多改变一个数的情况下,判断能否变为非递减序列,则我们从头遍历序列,如果出现num[i] > nums[i+1]
,我们判断能否通过这次修改后,使得整个数列是非递减序列。修改一共有2种情况,第一种是nums[i]
太大导致的递减,所以我们修改nums[i] = nums[i+1];
第二种情况,nums[i+1]太小所导致的,我们修改:nums[i+1] = nums[i]
。如果这两种修改都无法使得修改后的数列是非递减序列,则无法通过一次修改将这个序列变为非递减序列。在第二次修改的时候记得复原nums[i]
。
算法实现
class Solution {
public:bool checkPossibility(vector<int>& nums) {for(int i = 0 ; i < nums.size()-1; i++){if(nums[i] > nums[i+1]){// 当发现第一个num[i] > nums[i+1]时,设法让他成为非递减数列int x = nums[i];// 第一种情况,更改nums[i]nums[i] = nums[i+1];if(is_sorted(nums.begin(),nums.end()) )return true;nums[i] = x;//复原// 第二种情况,更改nums[i+1]nums[i+1] = x;return is_sorted(nums.begin(),nums.end());}}return true;}
};