/*
 * @lc app=leetcode.cn id=735 lang=javascript
 *
 * [735] 小行星碰撞
 */

// @lc code=start
/**
 * @param {number[]} asteroids
 * @return {number[]}
 */
var asteroidCollision = function (asteroids) {
  const stack = [];
  for (let ast of asteroids) {
    const top = stack[stack.length - 1];
    if (!top || top * ast > 0 || (top < 0 && ast > 0)) {
      stack.push(ast);
      continue;
    }

    while (stack.length && stack[stack.length - 1] > 0 && ast < 0) {
      if (Math.abs(stack[stack.length - 1]) > Math.abs(ast)) {
        break;
      }
      if (Math.abs(stack[stack.length - 1]) === Math.abs(ast)) {
        stack.pop();
        break;
      }
      stack.pop()

      // 如果栈空了,则直接添加,并退出 while 循环
      if (stack.length === 0) {
        stack.push(ast);
        break;
      }

      if (stack[stack.length - 1] < 0 && ast < 0) {
        stack.push(ast)
      }
    }
  }
  return stack;
};
// @lc code=end

// console.log(asteroidCollision([5, 10, -5]))
// console.log(asteroidCollision([8, -8]))
// console.log(asteroidCollision([10, 2, -5]))
// console.log(asteroidCollision([-2, -1, 1, 2]))
// console.log(asteroidCollision([-2, -2, 1, -2]))
// console.log(asteroidCollision([-2, 1, 1, -1]))
console.log(asteroidCollision([1, -2, -2, -2]))