非递减数列
题目

思路
左右开弓,两端特殊处理。
代码
class Solution {
public:
bool checkPossibility(vector<int>& nums) {
int l=nums.size();
int p1=0,p2=l-1;
while(p1<p2&&nums[p1]<=nums[p1+1])
p1++;
while(p1<p2&&nums[p2]>=nums[p2-1])
p2--;
int begin,end;
if(p1==0) begin=INT_MIN;
else begin=nums[p1-1];
if(p2==l-1) end=INT_MAX;
else end=nums[p2+1];
if(p2-p1<=1&&(begin<=nums[p2]||nums[p1]<=end)) return true;
else return false;
}
};
本文介绍了一种高效检查数列是否可通过一次修改变为非递减的算法。通过两端逼近的方式,快速定位可能的问题元素,并判断调整的可能性。代码实现简洁,适用于面试或竞赛场景。

500

被折叠的 条评论
为什么被折叠?



