1 Star 0 Fork 0

MetaverseMobile/leetcode

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
665_非递减数列.cpp 1.83 KB
一键复制 编辑 原始数据 按行查看 历史
TieNan2019 提交于 2020-11-16 22:01 +08:00 . Create 665_非递减数列.cpp
class Solution {
public:
bool checkPossibility(vector<int>& nums) {
stack<int> s;
// 哨兵,保证程序的简洁性,避免复杂边界条件判断
s.push(INT_MIN);
// 修改数字的次数
int cnt = 0;
for (int i = 0; i < nums.size(); i++) {
int x = nums[i];
// 条件符合直接入栈
if (x >= s.top())
s.push(x);
else {
// 当不符合递增时,存在两种可能性
// 1. 栈顶的数据太大,阻拦来后续数据的进入
// 2. 扫描到的数据太小,应该剔除
// 弹出栈顶元素,保存起来
int top = s.top();
s.pop();
// 如果弹出栈顶以后可以继续进行,说明栈顶元素太大了
if (s.top() <= x)
s.push(x);
// 如果栈顶弹出后仍然不能将扫描到的数据入栈,则说明数据太小了,
// 只有修改当前数据才能1次机会修改正确,还原堆栈
else
s.push(top);
// 记录这次修改
cnt++;
// 超过一次直接返回不能
if (cnt > 1)
return false;
}
}
return true;
}
};
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C++
1
https://gitee.com/MetaverseMobile/leetcode.git
git@gitee.com:MetaverseMobile/leetcode.git
MetaverseMobile
leetcode
leetcode
main

搜索帮助

371d5123 14472233 46e8bd33 14472233