[LeetCode] 735. Asteroid Collision
2024-09-06 02:54:34
行星碰撞。
题意是给一个数组 asteroids,表示在同一行的行星。对于数组中的每一个元素,其绝对值表示行星的大小,正负表示行星的移动方向(正表示向右移动,负表示向左移动)。每一颗行星以相同的速度移动。找出碰撞后剩下的所有行星。
碰撞规则:两个行星相互碰撞,较小的行星会爆炸。如果两颗行星大小相同,则两颗行星都会爆炸。两颗移动方向相同的行星,永远不会发生碰撞。例子,
Example 1:
Input: asteroids = [5, 10, -5] Output: [5, 10] Explanation: The 10 and -5 collide resulting in 10. The 5 and 10 never collide.Example 2:
Input: asteroids = [8, -8] Output: [] Explanation: The 8 and -8 collide exploding each other.Example 3:
Input: asteroids = [10, 2, -5] Output: [10] Explanation: The 2 and -5 collide resulting in -5. The 10 and -5 collide resulting in 10.Example 4:
Input: asteroids = [-2, -1, 1, 2] Output: [-2, -1, 1, 2] Explanation: The -2 and -1 are moving left, while the 1 and 2 are moving right. Asteroids moving the same direction never meet, so no asteroids will meet each other.
思路是用stack做。先创建一个空的stack,一开始当stack为空的时候,直接就把数组里面的元素加进去;当stack不为空的时候,做如下判断
1. 先看一下栈顶元素的正负和要塞入的元素的正负。如果栈顶元素为负(往左)或者要塞入的元素为正(往右),说明加入栈的时候不会发生碰撞,直接就加了;
2. 除了第一种情况,其他情况就有可能会发生碰撞了。这时候判断如果栈顶元素 + 塞入元素 < 0说明两者会相向碰撞并且栈顶元素会被损毁,此时要pop出栈顶元素并且i--,看看试图加入栈的元素能否把新的栈顶元素(原来是在i - 1的位置上的元素)再次损毁
3. 如果两者相向碰撞但是速度一样,两者互相抵消,栈顶元素直接pop
时间O(n)
空间O(n)
/** * @param {number[]} asteroids * @return {number[]} */ var asteroidCollision = function (asteroids) { const stack = []; const len = asteroids.length; for (let i = 0; i < len; i++) { const cur = asteroids[i]; // if stack is empty, just push if (!stack.length) { stack.push(cur); } else { // peek the stack top const pop = stack[stack.length - 1]; if (pop < 0 || cur > 0) { stack.push(cur); } else if (pop + cur < 0) { stack.pop(); i--; } else if (pop + cur === 0) { stack.pop(); } } } return stack; };
最新文章
- Vagrant的一个BUG - 不支持&#39;change_host_name&#39;
- Redis基础命令
- Maven-005-部署构件至 nexus 私服
- java事务理解
- Rich控件一
- java基础:学生管理系统
- 使用Bitbucket Pipeline进行.Net Core项目的自动构建、测试和部署
- /usr/lib/uwsgi/plugins/python_plugin.so: cannot open shared object file: No such file or directory
- BZOJ1061 NOI2008 志愿者招募 线性规划、费用流
- 安排~~炒鸡全的JS兼容问题,码上-----【XUEBIG】
- MSComm控件与Win32 API操作串口有何区别?
- 【JMeter】基础元件
- RMI non-JRMP server at remote endpoint
- Python csv.md
- 2018-2019 Exp2 后门原理与实践
- 蓝桥杯 地宫寻宝 DFS 动态规划
- JavaBean与Map<;String,Object>;相互转换
- 使用mac学习java的一些基本操作
- MySQL复制 -- 应用场景
- 在weka中添加libSVM或者HMM等新算法