DAY6-T1345&T39 -2022-01-21-非自己作答

1345 跳跃游戏 IV
给一个整数数组 arr ,一开始在数组的第一个元素处(下标为 0)。 每一步,你可以从下标 i 跳到下标:

  • i + 1 满足:i + 1 < arr.length
  • i - 1 满足:i - 1 >= 0
  • j 满足:arr[i] == arr[j] 且 i != j

请你返回到达数组最后一个元素的下标处所需的 最少操作次数 。

注意:任何时候你都不能跳到数组外面。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/jump-game-iv

# 等值跳或左右跳,DFS
class Solution:
    def minJumps(self, arr: List[int]) -> int:
        idx_map, steps = defaultdict(list), [len(arr) - 1] * len(arr)
        for i, num in enumerate(arr):
            idx_map[num].append(i)
        queue = deque([0])
        steps[0] = 0
        while queue:
            idx = queue.popleft()
            if idx == len(arr) - 1:
                break
            nxt_step = steps[idx] + 1
            idx_map[arr[idx]] += [idx+1,idx-1] if idx else [idx+1]
            while idx_map[arr[idx]]:
                if steps[(other:=idx_map[arr[idx]].pop())] > nxt_step:
                    steps[other] = nxt_step
                    queue.append(other)
        return steps[-1]

#作者:himymBen
#链接:https://leetcode-cn.com/problems/jump-game-iv/solution/pythonjavajavascriptgo-bfs-by-himymben-2l8g/
#来源:力扣(LeetCode)

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/asteroid-collision

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

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

class Solution(object):
    def asteroidCollision(self, asteroids):
        ans = []
        for new in asteroids:
            while ans and new < 0 < ans[-1]:
                if ans[-1] < -new:
                    ans.pop()
                    continue
                elif ans[-1] == -new:
                    ans.pop()
                break
            else:
                ans.append(new)
        return ans

#作者:LeetCode
#链接:https://leetcode-cn.com/problems/asteroid-collision/solution/xing-xing-peng-zhuang-by-leetcode/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值