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

这篇具有很好参考价值的文章主要介绍了力扣题库刷题笔记735-行星碰撞。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、题目如下:

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

2、个人Python代码实现

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

         个人代码思路,主要是新建一个列表stack,将原列表asteroids中的元素依次加入到stack中。以上代码可能会有两部分比较冗余的部分,一是两个标志位可以不用单独声明,二是当stack列表中的最后一个元素为负数的时候,无论asteroids中的下一个元素是正数还是负数,都是直接加入到stack中。

        个人代码如下:

class Solution:

    def asteroidCollision(self, asteroids: List[int]) -> List[int]:

        stack = []                                          #声明一个空列表用于输出结果

        flag1 = 1                                           #标志位1,用于判断stack最后一个元素是否为正数

        flag2 = 1                                           #标志位2,用于判断asteroids第一个元素是否为正数

        i = 0                                               #下标,用于表示asteroids列表的第一个元素下标

        while len(asteroids) > 0:                           #当asteroids不为空时,循环继续

            if not stack:                                   #当stack不为空的时候,flag1为2

                flag1 = 2

            elif stack[-1] > 0:                             #当stack最后一个元素为正数的时候,flag1为1

                flag1 = 1

            else:                                           #当stack最后一个元素为负数的时候,flag1为0

                flag1 = 0

            if asteroids[i] == 0:                           #当asteroids第一个元素为0时,flag2为2

                flag2 = 2

            elif asteroids[i] > 0:                          #当asteroids第一个元素为正数的时候,flag2为1

                flag2 = 1

            else:                                           #当asteroids第一个元素为负数的时候,flag2为0

                flag2 = 0

            if flag1 == 2:                                  #当stack为空时,将asteroids第一个元素加入stack,并在asteroids中删除该元素

                stack.append(asteroids[i])

                del asteroids[i]

            elif flag1 == 1:                                #当stack最后一个元素为正数时

                if flag2 == 2:                              #当asteroids第一个元素为0时,在asteroids中删除该元素

                    del asteroids[i]

                elif flag2 == 1:                            #当asteroids第一个元素为正数时,将钙元素假如stack,并在asteroids中删除该元素

                    stack.append(asteroids[i])

                    del asteroids[i]

                elif flag2 == 0:                            #当asteroids第一个元素为负数时

                    if stack[-1] + asteroids[i] > 0:        #如果stack最后一个元素和asteroids第一个元素相加为正数,在asteroids中删除第一个元素

                        del  asteroids[i]

                    elif stack[-1] + asteroids[i] == 0:     #如果stack最后一个元素和asteroids第一个元素相加为0,删除这两个元素

                        del asteroids[i]        

                        stack.pop()

                    else:                                   #如果stack最后一个元素和asteroids第一个元素相加为负数,删除stack最后一个元素

                        stack.pop()

            elif flag1 == 0:                                #当stack最后一个元素为负数时,asteroids中的元素直接加入stack中,并唉asteroids中删除他

                if flag2 == 2:

                    del asteroids[i]

                elif flag2 == 1:

                    stack.append(asteroids[i])

                    del asteroids[i]

                elif flag2 == 0:

                    stack.append(asteroids[i])

                    del asteroids[i]

        return stack

3、题解Python代码如下:

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

        题解代码简洁很多,需要稍微调试才能理解,但是个人很难单独写出来,仅作为对比,表示个人代码长度。

        题解代码如下:

asteroids = [5, 10, -15, 6]
st = []
for aster in asteroids:
alive = True #每个asteroids列表中的元素初始化标志位都为True
#当且仅当标志位为True,当前元素asteroid为负数,st列表不为空且st最后一个元素为正数时,进入循环
while alive and aster < 0 and st and st[-1] > 0:
#当asteroid为负数且绝对值小于st最后一个元素时(即两数之和也为负数),标志位为True,否则为False
alive = st[-1] < -aster
#当两数之和为负数时,移除st最后一个元素
if st[-1] <= -aster:
st.pop()
if alive:
st.append(aster)
print(st)

 文章来源地址https://www.toymoban.com/news/detail-437810.html

 

 

到了这里,关于力扣题库刷题笔记735-行星碰撞的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 力扣题库刷题笔记5--最长回文子串

    1、题目如下: 2、个人Python代码实现:         首先想到的是通过类似冒泡排序的方式进行切片,然后判断切片的子字符串是否为回文字符串,然后记录出最长的回文字符串,代码如下:         可以看到,通过切片的方式,在字符串长度只有1的时候,会报错。当然,这里

    2024年02月09日
    浏览(55)
  • 力扣题库刷题笔记36--有效的数独

    1、题目如下:  2、个人Python代码实现如下: 3、个人Python代码思路:         先放一个AI解释的思路:         个人理解,本题思路其实很简单,判断每一行、每一列、每一个3*3的子数独是否存在重复数字,如果存在则返回False,如果不存在则返回True。         1、首先

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

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

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

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

    2024年02月15日
    浏览(45)
  • 力扣题库刷题笔记496-下一个更大元素

    1、题目如下: 2、个人Python代码实现   代码如下: class Solution:     def nextGreaterElement(self, nums1: List[int], nums2: List[int]) - List[int]:         #空列表用于输出结果         ans = []         for i in nums1:             #如果nums2中不包含或者最后一位元素为当

    2023年04月26日
    浏览(37)
  • ⭐北邮复试刷题LCR 037. 行星碰撞__栈 (力扣119经典题变种挑战)

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

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

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

    2024年02月16日
    浏览(46)
  • 力扣刷题笔记

    诸神缄默不语-个人CSDN博文目录 我以前刷过一波力扣,然后全忘了……从0开始的力扣复活赛! 以前刷题用的是Java,现在Java几乎忘光了,所以现在是Python 3 + Java双语选手。 以下题目按照力扣官方顺序排列。 449. 序列化和反序列化二叉搜索树 1281. 整数的各位积和之差 1749. 任意

    2024年02月14日
    浏览(38)
  • 力扣刷题笔记-07 整数反转

    狗看了都摇头的年纪,纯爱战士一败涂地。 temp用来保存个位数 res用来保存当前结果 123,取模运算,这样就可以获得最后一位。比如对123%10,得到temp=3. 判断res是不是溢出( 重点 ) 如果没有溢出,res扩大十倍,再加上个位数,就相当于是反转了。res = res * 10 + temp; 返回res。

    2024年02月08日
    浏览(40)
  • 力扣刷题笔记-05 最长回文子串

    半山腰有点拥挤,你要去山顶看看。 什么是回文 从左边出发,字符的顺序和从右边出发是一样的,比如aba,abba。那么基于这个理论,我们就可以想到解决方案: 找一个中心点,向两边出发,左右两边各移动一位,如果相同就证明是回文子串,不相同就停止,找下一个中心点

    2024年02月08日
    浏览(45)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包