题目描述:
解题方法(栈思想):
/**
* @param {number[]} asteroids
* @return {number[]}
*/
var asteroidCollision = function(asteroids) {
let i = 0 ; // 扫描指针
let len = asteroids.length;
const stack = []; // 设置一个辅助栈
while(i < len) {
// 如果当前栈为空 且扫描的元素为大于0, 直接入栈
if(stack.length === 0 || asteroids[i] >0) {
stack.push(asteroids[i]);
} else {
// 若当前栈顶元素小于0 那么直接将当前元素 入栈,因为同向永远不会发生爆炸
if(stack[stack.length - 1] < 0) {
stack.push(asteroids[i]);
} else {
const topValue = stack.pop();
//如果栈顶元素大于0 ,并且栈顶元素的绝对值小于 扫描的元素,那么栈顶元素出栈,i不继续扫描,继续对栈顶判断
if(topValue < Math.abs(asteroids[i])) {
continue; // 不往前继续扫描
} else if(topValue > Math.abs(asteroids[i])){
// 如果栈顶元素大于0 ,并且栈顶元素的绝对值大于 扫描的元素,那么栈顶元素重新压入栈中
stack.push(topValue);
}
}
}
i++;
}
return stack;
};