⭐北邮复试刷题LCR 037. 行星碰撞__栈 (力扣119经典题变种挑战)

这篇具有很好参考价值的文章主要介绍了⭐北邮复试刷题LCR 037. 行星碰撞__栈 (力扣119经典题变种挑战)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

LCR 037. 行星碰撞

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

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

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

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

示例 2:
输入:asteroids = [8,-8]
输出:[]
解释:8 和 -8 碰撞后,两者都发生爆炸。

示例 3:
输入:asteroids = [10,2,-5]
输出:[10]
解释:2 和 -5 发生碰撞后剩下 -5 。10 和 -5 发生碰撞后剩下 10 。

示例 4:
输入:asteroids = [-2,-1,1,2]
输出:[-2,-1,1,2]
解释:-2 和 -1 向左移动,而 1 和 2 向右移动。 由于移动方向相同的行星不会发生碰撞,所以最终没有行星发生碰撞。

提示:
2 <= asteroids.length <= 104
-1000 <= asteroids[i] <= 1000
asteroids[i] != 0

题解:

本题借用栈来解决,只有±情况才会出现撞击,其余情况均会正常入栈,因此对±情况处理撞击,撞击可能会存在连环撞击,因此撞击完毕后需要回溯;

代码:

class Solution {
    public int[] asteroidCollision(int[] asteroids) {
        // 直到碰到第一个正数
        Stack<Integer> stack = new Stack<>();

        for(int i=0;i<asteroids.length;i++){
            if(stack.empty()){
                stack.push(asteroids[i]);
                continue;
            }
            int temp = stack.peek();
            if(temp < 0){
                stack.push(asteroids[i]);
                continue;
            }
            else if(temp > 0 && asteroids[i] > 0){
                stack.push(asteroids[i]);
                continue;
            }
            else{
                // 栈内有效可用数据绝对无负值
                if(Math.abs(asteroids[i]) > temp){
                    stack.pop();
                    // 回溯 因可能连环撞击
                    i--;
                }
                else if(Math.abs(asteroids[i]) == temp){
                    stack.pop();
                }
                else{
                    continue;
                }
            }
        }
        // stack长度会随着pop动态改变 因此需要先拿到静态数据
        int len = stack.size();
        int res[] = new int[len];
        for(int i=0;i<len;i++){
            res[len-1-i] = stack.pop();
        }
        return res;
    }
}

结果:

⭐北邮复试刷题LCR 037. 行星碰撞__栈 (力扣119经典题变种挑战),Leetcode每日刷题,# 栈,leetcode,算法,北邮,Java,栈文章来源地址https://www.toymoban.com/news/detail-836598.html

到了这里,关于⭐北邮复试刷题LCR 037. 行星碰撞__栈 (力扣119经典题变种挑战)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 力扣题库刷题笔记735-行星碰撞

    1、题目如下: 2、个人Python代码实现          个人代码思路,主要是新建一个列表stack,将原列表asteroids中的元素依次加入到stack中。以上代码可能会有两部分比较冗余的部分,一是两个标志位可以不用单独声明,二是当stack列表中的最后一个元素为负数的时候,无论astero

    2024年02月03日
    浏览(29)
  • 【算法】行星碰撞&机器人碰撞(栈的使用)

    本文记录了两个使用栈来处理碰撞问题的算法题目。 https://leetcode.cn/problems/asteroid-collision/ 对于这种题目,各个元素分别会向左或向右移动,可以使用栈模拟碰撞的过程。 由于从左往右进行遍历,因此遍历当前元素时,如果它是向右移动的,就只可能会碰撞到它右边还没有被

    2024年02月16日
    浏览(33)
  • 【栈】 735. 行星碰撞

    如果数组元素大于0 说明向右移动 那么不管 左边元素是不是大于0 都不会碰撞 如果数组元素小于0 说明想左边移动 那么判断左边元素 如果左边元素大于0 碰撞 那么遍历数组 当前元素大于0 直接入栈 如果当前元素小于0 判断栈顶元素是不是大于0 如果大于0 直接出栈 判断存活的

    2024年02月13日
    浏览(29)
  • LeetCode735. 行星碰撞 -- 栈模拟

    行星碰撞 提示 中等 421 相关企业 给定一个整数数组 asteroids,表示在同一行的行星。 对于数组中的每一个元素,其绝对值表示行星的大小,正负表示行星的移动方向(正表示向右移动,负表示向左移动)。每一颗行星以相同的速度移动。 找出碰撞后剩下的所有行星。碰撞规

    2024年02月15日
    浏览(32)
  • 【leetcode 力扣刷题】字符串匹配之经典的KMP!!!

    以下是能用KMP求解的算法题,KMP是用于字符串匹配的经典算法【至今没学懂………啊啊啊】 题目链接:28. 找出字符串中第一个匹配项的下标 题目内容: 题意还是很好理解的,要在字符串haystack中查找一个完整的needle,即字符串匹配。 暴力求解就是用 两层循环 :haystack从第

    2024年02月09日
    浏览(32)
  • 力扣119双周赛

    模拟 贪心,一个变了下一个肯定不用变 滑动窗扣维持k个 二进制枚举+Floyd –

    2024年02月04日
    浏览(29)
  • #力扣:LCR 182. 动态口令@FDDLC

    LCR 182. 动态口令 一、Java 二、C++ 三、Python 四、JavaScript 五、Go

    2024年02月07日
    浏览(67)
  • 力扣LCR 166. 珠宝的最高价值(java 动态规划)

    Problem: LCR 166. 珠宝的最高价值 改题目与本站64题实质上是一样的,该题目在64题的基础上将求取 最小路径和 改成了求取 最大路径和 。具体实现思路如下: 1.定义一个int类型的二维数组dp大小为给定矩阵frame的行数与列数。该数组用于记录每个当前阶段的 最大路径和 (也是本

    2024年02月01日
    浏览(33)
  • 【LeetCode力扣】LCR170 使用归并排序的思想解决逆序对问题(详细图解)

    目录 1、题目介绍 2、解题思路 2.1、暴力破解法 2.2、归并排序思想 2.2.1、画图详细讲解 2.2.2、归并排序解决逆序对的代码实现 首先阅读题目可以得出要点,即当 前数 大于 后数 时则当作一个【逆序对】,而题目是要求在一个数组中计算一共存在多少个这样的逆序对并输出结

    2024年02月08日
    浏览(32)
  • 考研算法复试刷题19天:Prim算法求最小生成树 【prim,最小生成树】

    参考博客:图解:什么是最小生成树? - 知乎 (zhihu.com)  总结下来的过程就是,一张图,我们将他化为树的形式,也就是生成树。那么最小生成树有是啥呢? 所谓一个 带权图 的最小生成树,就是原图中边的权值最小的生成树 ,所谓最小是指边的权值之和小于或者等于其它

    2024年02月07日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包