首页 > 其他分享 >leet code 735. 行星碰撞

leet code 735. 行星碰撞

时间:2023-09-18 17:32:14浏览次数:49  
标签:peek leet code int 元素 break asteroid 735 stack

735.行星碰撞

题目解析

一道典型的运用单调栈解决的问题,元素入栈,然后当前元素和栈中元素相比较。最终得出结果。


总结反思

第一次遇到该问题的时候,脑海中没有丝毫关于单调栈的相关内容。想着双指针遍历数组解决问题。 毫无疑问能够通过一些用例,不过不是正确的解。 再次回顾,解决思路在脑海中清晰浮现

  • 那么,再次遇到数组相关问题的时候。静下心来,读懂题目意思之后,要首先要思考是否能够用如下思路解决问题
  1. 二分法
  2. 单调栈
  3. 滑动窗口
  4. 双重循环
  • 再然后,解决题目的时候要学会关注题目中给定的数据量级。根据数据量级判断是否能够双重或者多重循环来解决问题
  • 举例:当数据量级达到 leet code 735. 行星碰撞_二分法左右的时候,可以明确不能够使用双重循环来解决问题了。
  • 其次:要冷静,冷静才能够发挥出脑袋最大的能力

show code

class Solution {
    public int[] asteroidCollision(int[] asteroids) {
        Deque<Integer> stack = new LinkedList<>();

        for (int asteroid : asteroids) {
            if(stack.isEmpty()) {
                stack.push(asteroid);
            } else {
                while(!stack.isEmpty()) {
                    // 取出栈顶元素.
                    int peek = stack.peek();
                    // 判断栈顶元素 和 当前元素的碰撞关系.
                    if(peek > 0 && asteroid < 0) {
                        // 表示会发生碰撞.
                        int ret = peek + asteroid;
                        if(ret > 0) {
                            // 表示 当前行星爆炸了.
                            break;
                        } else if (ret == 0) {
                            // 都爆炸了.
                            stack.pop();
                            break;
                        } else {
                            // 栈顶行星爆炸了.
                            stack.pop();
                            if(stack.isEmpty()) {
                                stack.push(asteroid);
                                break;
                            }
                        }
                    } else {
                        // 不会发生碰撞.
                        stack.push(asteroid);
                        break;
                    }
                }
            }
        }

        // 这里把栈中的元素转化成数组然后输出.
        int sz = stack.size();
        int[] ans = new int[sz];
        for (int i = sz - 1; i >= 0; i--) {
            ans[i] = stack.pop();
        }
        return ans;
    }
}

标签:peek,leet,code,int,元素,break,asteroid,735,stack
From: https://blog.51cto.com/u_16079703/7512634

相关文章

  • LeetCode 周赛上分之旅 #46 经典二分答案与质因数分解
    ⭐️本文已收录到AndroidFamily,技术和职场问题,请关注公众号[彭旭锐]和BaguTreePro知识星球提问。学习数据结构与算法的关键在于掌握问题背后的算法思维框架,你的思考越抽象,它能覆盖的问题域就越广,理解难度也更复杂。在这个专栏里,小彭与你分享每场LeetCode周赛的解题报告,一......
  • VSCode快捷键(MAC版本)
    常用添加注释注释一行代码:cmd+/注释一整段代码:option+shift+A格式化代码格式化代码:option+shift+F格式化选中行代码:cmd+Kcmd+F代码缩进:cmd+shift+P查找替换Command+F查找Command+Option+F替换Command+G查找下一个Command+Shift......
  • MyCode代码生成器v1.0.0.2(BCB版)
    BCB开发管理系统之类的软件非常方便,而管理系统离不开数据库,对于我们开发人员而言,编写数据库操作代码比较繁琐,每次一个项目都得重新或大部分编写数据库操作代码,同时还得面对代码中可能存在的bug,有鉴于此,本人编写了MyCode-代码生成器,让我们一键生成对数据库操作的代码(cpp、h文件),直接......
  • 亚马逊云科技Amazon CodeWhisperer支持15种变种语言,为代码提供个性化建议
    AmazonCodeWhisperer介绍 AmazonCodeWhisperer是亚马逊云科技出品的一款基于机器学习的通用代码生成器,可实时提供代码建议。类似Cursor和GithubCopilot编码工具。在编写代码时,它会自动根据您现有的代码和注释生成建议。从单行代码建议到完整的函数,它可为您提供各种大小和范围的......
  • EasyCode自定义模板
    一、前言最近做了几个傻瓜式的CRUD模块,光调整EasyCode生成的代码格式就调整了半天,毫无意义,但又必不可少。于是,网上找了关于EasyCode自定义模板的文章,尝试自定义模板,从根本上解决代码格式调整的痛点。EasyCode是IDEA开发的一个代码生成插件,主要通过自定义模板(基......
  • Codeforces Round 897 (Div. 2) A-E
    A.green_gold_dog,arrayandpermutation题意:给出一个长为\(n\)的数组\(a\),找到一个长为\(n\)的排列\(b\),使得\(a\)与\(b\)对应位置上的元素的差尽可能大Solution将数组\(a\)排序,然后令排列\(n,n-1,...,2,1\)对应到对应的元素即可structnode{intx,id;boolope......
  • Leetcode刷题1.两数之和
     1.两数之和给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。示......
  • 算法训练day11 栈与队列 02 LeetCode20
    算法训练day11栈与队列02LeetCode20.1047.15020.有效的括号:题目:20.有效的括号-力扣(LeetCode)题解:代码随想录(programmercarl.com)classSolution{public:boolisValid(strings){stack<char>str;if(s.size()%2==1)......
  • VSCode中react项目格式错乱解决
    因为我设置了保存自动格式化代码,在ctrl+s保存的时候,代码就格式化了,格式化后代码格式错乱,如下图在vscode编辑器的右下角,选择javascript然后在弹出的窗口中,输入选择JavascriptReact或者TypescriptReact,如图再进行保存,就不会错乱了......
  • mysql连接不上Job for mysqld.service failed because the control process exited wi
    问题:mysql服务器链接不上我们是自己买的服务器搭建的,查看mysql的服务器能不能连的上,看服务是否正常查看进程:top-c;查看磁盘:df-h;linux环境有很多大小,只需要看最大的一个存储就行了,发现可使用的没了,我这图片是清理过后的问题解决先要排查是哪些文件堆满了磁盘,极大的......