首页 > 其他分享 >1345. 跳跃游戏 IV

1345. 跳跃游戏 IV

时间:2023-04-04 13:23:17浏览次数:44  
标签:cnt dist 等值 arr 1345 跳跃 inf IV append

题目描述

给一个数组arr,起点是0,终点是n-1
有3种选择:可以退一步、进一步、跳到值相等的位置
问跳到终点的最少操作次数?

f1 哈希表+bfs

基本分析

  1. 为什么是bfs?求从起点到终点的最短路
  2. 图是什么?当前节点到前、后、等值可跳的索引
  3. 怎么获取x到所有等值点索引y的映射关系?哈希表预处理
  4. 怎么保证等值跳一次后不再等值跳了?哈希表中删除x处的值

代码

class Solution:
    def minJumps(self, arr: List[int]) -> int:
        n = len(arr)
        mp = defaultdict(list)

        for i in range(n-1, -1, -1):
            mp[arr[i]].append(i)
        
        dist = [inf] * n
        dist[0] = 0

        q = deque([0])

        while q:
            x = q.popleft()
            cnt = dist[x]
            if x == n-1:
                return cnt
            
            for y in mp[arr[x]]:
                if dist[y] == inf:
                    dist[y] = cnt + 1
                    q.append(y)
            mp.pop(arr[x])

            if dist[x+1] == inf:
                dist[x + 1] = cnt + 1
                q.append(x + 1)
            if x > 0 and dist[x - 1] == inf:
                dist[x - 1] = cnt + 1
                q.append(x - 1)
        
        return -1

总结

  1. 为了尽快出来,建立哈希表的时候有啥技巧?倒序遍历,最靠后地位置更早入队,如果最后位置是等值跳而来,能更早的出队?
f2 双向bfs
待完善

标签:cnt,dist,等值,arr,1345,跳跃,inf,IV,append
From: https://www.cnblogs.com/zk-icewall/p/17286073.html

相关文章

  • CodeTON Round 4 (Div. 1 + Div. 2, Rated, Prizes!)-C
    参考了佬的c题题解思路,感觉很巧妙,记录一下https://zhuanlan.zhihu.com/p/618685370#include<bits/stdc++.h>usingnamespacestd;#defineintlonglongconstintN=2*100010;inta[N];voidsolve(){ intn,c,d; cin>>n>>c>>d; set<int>se......
  • reactive
    reactivereactive系统有些特性成棒为低延时,高通工载.项目reactor和spring套装共事使开发亻建企业级reactive系统是响应,恢复,弹性,消息驱动的.什是reactive处理?reactive处理是范例使开发亻建非阻,异步app可拿捏背压(流控)为什用reactive处理?reactive系统更好使用当下处理......
  • React Native学习笔记(三)—— 组件
    一、ReactNative项目1.1、创建ReactNative项目ReactNative有一个内置的命令行界面,你可以用它来生成一个新项目。您可以使用Node.js附带的访问它,而无需全局安装任何内容。让我们创建一个名为“AwesomeProject”的新ReactNative项目:npxnpxreact-native@latestinitAw......
  • MATH1023 Multivariable Calculus
    TheUniversityofSydneySchoolofMathematicsandStatisticsLecturesWeek2–SeparableDifferentialEquations&NewtonianDynamicsMATH1023:MultivariableCalculusandModellingSemester1,20231.Existenceanduniquenessofsolutions2.Simple1stOrde......
  • Multimedia (MP3, MPEG-4, AVI, DiVX, etc.) support in Ubuntu 12.04 (Precise)
    Whydoesn’tUbuntusupportMP3‘outofthebox’?UbuntucannotincludesupportforMP3orDVDvideoplaybackorrecording.MP3formatsarepatented,andthepatentholdershavenotprovidedthenecessarylicenses.Ubuntualsoexcludesothermultimediasof......
  • Objective-C的self.用法的一些总结
    关于什么时候用全局变量,什么时候用self.赋值的问题,其实是和Objective-c的存取方法有关,网上很多人也都这么解答的,不过如何与存取方式有关究竟他们之间的是什么样的关系就很少有同学回答了。我总结了一下,发出来给大家参考.有什么问题请大家斧正. 进入正题,我们经常会在官方文......
  • cf-div.2-862d
    题目链接:https://codeforces.com/contest/1805/problem/D赛时没过的题。思路:首先发现一个性质:对于k来说,如果树上的一个点到树的直径的两个端点的距离都小于k的话,那么这个点一定是一个孤立点。证明:采用反证法:假设\(x,y\)为树的直径的两个端点,\(a,b\)为另外两个点,且有\(d[a][x]<k......
  • Hive 如何巧用分布函数percent_rank()剔除极值求均值
    场景描述前期写过一篇关于剔除订单极值求订单均值的案例,之前使用的是 dense_rank 函数对订单金额进行排序后,过滤掉最大值最小值后进行处理,最近工作刚好使用到分布函数percent_rank,想起来应该也可以用到这个场景;percent_rank()简介percent_rank()函数为分布函数,用于返回某个......
  • Codeforces Round 862 (Div. 2) A-D题解
    比赛地址A.WeNeedtheZero题意:给出一个数组,对任意1<=i<=n,令bi=aix,问是否存在x,使得b<sub>1</sub>b2...bn=0Solution如果n为奇数,那么x一定存在,因为偶数个x异或得到的是0,直接令x=0(a<sub>1</sub>a2...an)即可如果n为偶数,那么x取任何值都不会影响结果,所以只用看a1a<sub>2</sub......
  • Codeforces Round 862 (Div. 2) (4.2)
    CodeforcesRound862(Div.2)A-WeNeedtheZero思路:某个数被异或两次相当于没变,即判断n的奇偶性;n为偶数时判断所有数异或后的数是否为0,若为0,输出任意数;n为奇数时答案为所有数异或后的值#include<bits/stdc++.h>usingnamespacestd;typedefpair<int,int>PII;consti......