侧边栏壁纸
博主头像
Hope博主等级

努力赚钱的工科研究生

  • 累计撰写 362 篇文章
  • 累计创建 129 个标签
  • 累计收到 5 条评论
标签搜索

LeetCode 735. 行星碰撞

Hope
2022-09-24 / 0 评论 / 0 点赞 / 589 阅读 / 958 字
温馨提示:
本文最后更新于 2022-09-24,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

LeetCode 735. 行星碰撞
思路:

实际就是模拟了栈的过程。
当前元素大于0,放入答案里面,
当前元素小于0,与答案末尾比较,如果绝对值大于答案末尾,末尾弹出,如果两个元素相同,则答案末尾弹出,当前元素不做处理,如果答案末尾是小于0的,说明两个行星永远不会碰撞,放入答案里面。

代码:

class Solution {
public:
    vector<int> asteroidCollision(vector<int>& asteroids) {
        vector<int> res;
        for(auto x : asteroids){
            if(x > 0) res.push_back(x);
            else{
                while(res.size() && res.back() > 0 && res.back() < -x) res.pop_back();
                if(res.size() && res.back() == -x) res.pop_back();
                else if(!res.size() || res.back() < 0) res.push_back(x);
            }
        }
        return res;
    }
};


class Solution {
public:
    vector<int> asteroidCollision(vector<int>& asteroids) {
        stack<int> stk;
        for(auto x : asteroids){
            if(x > 0) stk.push(x);
            else{
                while(stk.size() && stk.top() > 0 && stk.top() < -x) stk.pop();
                if(stk.empty() || stk.top() < 0) stk.push(x);
                else if(stk.size() && stk.top() == -x) stk.pop();
            }
        }
        vector<int> res;
        while(stk.size()) {
            res.push_back(stk.top());
            stk.pop();
        }
        reverse(res.begin(), res.end());
        return res;
    }
};
``
0

评论区