zoukankan      html  css  js  c++  java
  • [LeetCode in Python] 1345 (H) jump game iv 跳跃游戏 IV

    题目

    https://leetcode-cn.com/problems/jump-game-iv/solution/

    给你一个整数数组 arr ,你一开始在数组的第一个元素处(下标为 0)。

    每一步,你可以从下标 i 跳到下标:

    i + 1 满足:i + 1 < arr.length
    i - 1 满足:i - 1 >= 0
    j 满足:arr[i] == arr[j] 且 i != j
    请你返回到达数组最后一个元素的下标处所需的 最少操作次数 。

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

    示例 1:

    输入:arr = [100,-23,-23,404,100,23,23,23,3,404]
    输出:3
    解释:那你需要跳跃 3 次,下标依次为 0 --> 4 --> 3 --> 9 。下标 9 为数组的最后一个元素的下标。

    示例 2:

    输入:arr = [7]
    输出:0
    解释:一开始就在最后一个元素处,所以你不需要跳跃。

    示例 3:

    输入:arr = [7,6,9,6,9,6,9,7]
    输出:1
    解释:你可以直接从下标 0 处跳到下标 7 处,也就是数组的最后一个元素处。

    示例 4:

    输入:arr = [6,1,9]
    输出:2

    示例 5:

    输入:arr = [11,22,7,7,7,7,7,7,7,22,13]
    输出:3

    提示:

    1 <= arr.length <= 5 * 10^4
    -10^8 <= arr[i] <= 10^8

    解题思路

    • 先用字典存储数组值及下标列表
    • 对于连续出现的字符,如“77...77”这样的情况,只记录首尾,跳过中间,否则TLE
    • 其余就是标准BFS流程了

    代码

    class Solution:
        def minJumps(self, arr: List[int]) -> int:
            g = defaultdict(list)
            for i,a in enumerate(arr):
                # - key optimization
                # - skip continous value, such as '77...77', only keep first and last 7
                if (i > 0) and (i < len(arr) - 1) and (a == arr[i-1] == arr[i+1]):
                    continue
    
                g[a].append(i)
    
            seen_set = set([0])
            q = [(0,0)]
            step = 0
            while q:
                p, step = q.pop(0)
    
                # - check if touch the end
                if p == len(arr) - 1:
                    return step
                
                for k in [p-1, p+1] + g[arr[p]]:
                    if k in seen_set: continue
    
                    if 0 <= k <= len(arr)-1:
                        seen_set.add(k)
                        q.append((k, step+1))
            
            return 0
    
  • 相关阅读:
    Linux命令应用大词典-第11章 Shell编程
    Kubernetes 学习12 kubernetes 存储卷
    linux dd命令
    Kubernetes 学习11 kubernetes ingress及ingress controller
    Kubernetes 学习10 Service资源
    Kubernetes 学习9 Pod控制器
    Kubernetes 学习8 Pod控制器
    Kubernetes 学习7 Pod控制器应用进阶2
    Kubernetes 学习6 Pod控制器应用进阶
    Kubernetes 学习5 kubernetes资源清单定义入门
  • 原文地址:https://www.cnblogs.com/journeyonmyway/p/12729724.html
Copyright © 2011-2022 走看看