行星碰撞


题目链接

https://leetcode-cn.com/problems/asteroid-collision/description/

题目分析

该题目也是一道用栈的思想的题,栈有两种操作,一种是入栈,一种是出栈。

什么时候入栈呢?分析题目知当当前数是整数时(asteroids[i]>0)一定入栈,无论当前栈顶是正是负,当栈顶为负数时,无论当前数是正是负,一定入栈。

出栈又细分为两种情况,第一种情况,当当前数小于0且绝对值大于栈顶时,出栈,直到遇到比他的绝对值大的,判断下一个数;当相等时,出栈,下一个数;当当前数小于零且绝对值小于栈顶时,下一个数。

class Solution {
public:
    vector<int> asteroidCollision(vector<int>& asteroids) {
        vector<int> s;
        int i = 0;
        while(i<asteroids.size()){
            if(s.size()==0||asteroids[i]>0||s.back()<0){
                s.push_back(asteroids[i]);
                i++;
            }
            else {
                if(s.back()>-1*asteroids[i])i++;
                else if(s.back()<-1*asteroids[i])s.pop_back();
                else {
                 s.pop_back();
                    i++;
                }
            }
        }
        return s;
        
    }
};


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值