美文网首页
栈-N735-行星碰撞

栈-N735-行星碰撞

作者: 三次元蚂蚁 | 来源:发表于2019-04-15 22:27 被阅读0次

题目

  • 概述:给定一个数组,代表移动速度相同的行星,数组元素的绝对值表示行星的大小,正负代表行星的移动方向(左负右正),移动方向不同的行星会发生碰撞,小的行星遇到大的行星会爆炸,大小相同的行星相遇都会爆炸,问最后剩下哪些行星

  • 输入:行星数组,长度范围[0, 10000]

  • 输入子项:非零整数,大小范围[-1000, 1000]

  • 输出:碰撞后最终剩下的行星数组

  • 出处:https://leetcode-cn.com/problems/asteroid-collision/

思路

  • 由于需要记录之前的行星信息用来判断是否会发生碰撞,所以考虑用栈实现

  • 遍历行星数组:

    1. 正数 => 直接入栈
    2. 负数:
      1. 栈为空 => 直接入栈
      2. 栈顶元素为负数 => 直接入栈
      3. 栈顶元素为正数:
        1. 当前元素绝对值 == 栈顶元素绝对值 => 栈顶元素出栈
        2. 当前元素绝对值 > 栈顶元素绝对值 => 栈顶元素出栈,重复
  • 栈中所剩元素即为碰撞后最终剩下的行星

代码

class Solution {
    public int[] asteroidCollision(int[] asteroids) {
        LinkedList<Integer> stack = new LinkedList<>();
        for (int i = 0; i < asteroids.length; ++i) {
            if (asteroids[i] > 0) {
                stack.push(asteroids[i]);
            } else {
                while (true) {
                    if (stack.isEmpty() || stack.peek() < 0) {
                        stack.push(asteroids[i]);
                        break;
                    } else {
                        if (asteroids[i] + stack.peek() == 0) {
                            stack.pop();
                            break;
                        } else if (asteroids[i] + stack.peek() < 0) {
                            stack.pop();
                        } else {
                            break;
                        }
                    }
                }
            }
        }
        
        int[] result = new int[stack.size()];
        for (int i = stack.size() - 1; i >= 0; --i) {
            result[i] = stack.pop();
        }
        return result;
    }
}

相关文章

  • 栈-N735-行星碰撞

    题目 概述:给定一个数组,代表移动速度相同的行星,数组元素的绝对值表示行星的大小,正负代表行星的移动方向(左负右正...

  • leetcode_735_行星碰撞

    给定一个整数数组asteroids,表示在同一行的行星。 对于数组中的每一个元素,其绝对值表示行星的大小,正负表示...

  • 735. 行星碰撞(Python)

    难度:★★★☆☆类型:数组方法:栈 力扣链接请移步本题传送门[https://leetcode-cn.com/pr...

  • 开普勒-107系统,遭正面且高速的星际碰撞造成巨大冲击!

    天文学家在一个系外行星系统中发现了行星多样性的新证据,表明巨大的高速碰撞是行星演化的部分原因。一个由意大利国家天体...

  • 触不到的恋人

    几十亿年前,两颗巨大的行星相互沿着各自的轨迹飞行,在引力的作用下,相互碰撞从而产生了时空碰撞,而我们就像撞击后的余...

  • 12♡17

    每个人都如大海中一粒沉沙,却也是能碰撞地球的小行星。如此伟大,也如此渺小。 我迷茫了好久,不知该相信行星的未来,还...

  • 形成月球的行星碰撞使地球上的生命成为可能

    形成月球的行星碰撞使地球上的生命成为可能 研究:行星运输解释了地球碳和氮的神秘特征 地球上的大部分生命必需元素——...

  • 恐龙灭绝的原因

    恐龙灭绝的原因是小行星碰撞地球,地球的体温明显下降不适合恐龙生活的环境,所以恐龙都灭绝啦。

  • 星城之恋

    浩瀚夜空, 两颗行星。 脱轨尔后, 一席碰撞。 源于音信, 始于轨迹, 隐约的初遇, 于宇宙的葬礼。 纠缠与折磨,...

  • 水星的碰撞理论

    对于充满了神秘色彩的水星,科学界存在一种十分吸引人的碰撞理论,既水星在早期形成的过程中与另一颗行星发生碰撞,...

网友评论

      本文标题:栈-N735-行星碰撞

      本文链接:https://www.haomeiwen.com/subject/hzrmwqtx.html