【栈】B031

编程入门 行业动态 更新时间:2024-10-09 18:17:39

【栈】B031

【栈】B031

给定一个整数数组 asteroids,表示在同一行的行星。

对于数组中的每一个元素,其绝对值表示行星的大小,正负表示行星的移动方向(正表示向右移动,负表示向左移动)。每一颗行星以相同的速度移动。

找出碰撞后剩下的所有行星。碰撞规则:两个行星相互碰撞,较小的行星会爆炸。如果两颗行星大小相同,则两颗行星都会爆炸。两颗移动方向相同的行星,永远不会发生碰撞。

示例 1:
输入: 
asteroids = [5, 10, -5]
输出: [5, 10]
解释: 
10 和 -5 碰撞后只剩下 10。 5 和 10 永远不会发生碰撞。示例 2:
输入: 
asteroids = [8, -8]
输出: []
解释: 
8 和 -8 碰撞后,两者都发生爆炸。

说明:
数组 asteroids 的长度不超过 10000
每一颗行星的大小都是非零整数,范围是 [-1000, 1000]

方法一:

思路

这题核心逻辑是需要一直模拟碰撞过程,而不是逐个添加;

class Solution {
public:vector<int> asteroidCollision(vector<int>& A) {int n=A.size();stack<int> st;for (int w : A) {if (w < 0) {while (!st.empty() && st.top()>0 && st.top()<-w) st.pop();if (!st.empty() && st.top()+w==0) st.pop();else if (st.empty() || st.top()<0) st.push(w);} else {st.push(w);}}vector<int> ans(st.size());int i=st.size()-1;while (!st.empty()) ans[i--]=st.top(), st.pop();return ans;}
};

复杂度分析

  • Time: O ( n ) O(n) O(n),
  • Space: O ( n ) O(n) O(n)

更多推荐

【栈】B031

本文发布于:2024-03-23 23:13:39,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1743981.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!