dijk 22/32

class Solution {public:int minJumps(vector<int>& arr) {// dijk? 最短路径?if(arr.size() == 0) return 0;int n = arr.size();int inf = 0x7f7f7f7f;vector<vector<int>> edge(n, vector<int>(n, inf));//cout << edge[0][0] << endl;// 相邻元素距离为1for(int i = 1; i < n; i++) {edge[i][i - 1] = 1;edge[i - 1][i] = 1;}// 用map记录相同元素的位置unordered_map<int, vector<int>> mp;for(int i = 0; i < n; i++) {mp[arr[i]].push_back(i);}//cout << mp[100][1] << endl;// 更新edgefor(auto it = mp.begin(); it != mp.end(); it++) {auto tempArray = it->second;//cout << it->first << endl;for(int i = 0; i < tempArray.size(); i++)for(int j = i + 1; j < tempArray.size(); j++) {edge[tempArray[i]][tempArray[j]] = 1;edge[tempArray[j]][tempArray[i]] = 1;}}//cout << edge[0][4] << " " << edge[5][7] << endl;//开始dijk作妖!vector<int> dist(n, inf);vector<bool> visit(n, false);dist[0] = 0;for(int i = 0; i < n; i++) {int u = -1, minu = inf;for(int j = 0; j < n; j++) {if(visit[j] == false && dist[j] < minu) {minu = dist[j];u = j;}}if(u == -1) break;// 选定visit[u] = true;// 更新for(int v = 0; v < n; v++) {if(!visit[v] && dist[v] > dist[u] + edge[u][v]) {dist[v] = dist[u] + edge[u][v];}}}return dist[n - 1];}
};

还是超时了

看答案呗

class Solution:def minJumps(self, arr: List[int]) -> int:# 广度优先搜索,相同值的但凡遍历到就可以skipidxSameValue = defaultdict(list)for i, a in enumerate(arr):idxSameValue[a].append(i)visited = set()q = deque()#[idx, step]q.append([0, 0])visited.add(0)# bfswhile q:idx, step = q.popleft()# 若到了最后一个了if idx == len(arr) - 1:return stepv = arr[idx]step += 1# 找相同值的for i in idxSameValue[v]:if i not in visited:visited.add(i)q.append([i, step])# 找到了就是最短step,就可以deldel idxSameValue[v]# 右边if idx + 1 < len(arr) and (idx + 1) not in visited:visited.add(idx + 1)q.append([idx + 1, step])# 左边if idx - 1 >= 0 and (idx - 1) not in visited:visited.add(idx - 1)q.append([idx - 1, step])

总结:
你说这代码难吗?也不难。。。
这就是求无权图两点最短路,三种情况:相同值,右,左
相同值构成稠密子图,访问一次之后就可以清空

leetcode:跳跃游戏 IV相关推荐

  1. 1345. 跳跃游戏 IV

    Powered by:NEFU AB-IN Link 文章目录 1345. 跳跃游戏 IV 题意 思路 代码 1345. 跳跃游戏 IV 题意 略 思路 先用哈希表将每个相同元素的位置记下来,每个形成 ...

  2. Leetcode跳跃游戏

    文章目录 Leetcode跳跃游戏 题目简介 跳跃游戏1 跳跃游戏2 Leetcode跳跃游戏 题目简介 给定一个非负整数数组,你最初位于数组的第一个位置. 数组中的每个元素代表你在该位置可以跳跃的最 ...

  3. leetcode 跳跃游戏系列 c++

    文章目录 [55. 跳跃游戏](https://leetcode-cn.com/problems/jump-game/) [45. 跳跃游戏 II](https://leetcode-cn.com/p ...

  4. LeetCode(跳跃游戏)

    20200404 题目 :跳跃游戏 给定一个非负整数数组,你最初位于数组的第一个位置. 数组中的每个元素代表你在该位置可以跳跃的最大长度. 判断你是否可以到达最后的位置. 示例: 输入: [2,3,1 ...

  5. Leetcode 跳跃游戏

    跳跃游戏 题目描述: 给定一个非负整数数组 nums ,你最初位于数组的 第一个下标 . 数组中的每个元素代表你在该位置可以跳跃的最大长度. 判断你是否能够到达最后一个下标. 提示: 1 <= ...

  6. leetcode 1345. Jump Game IV | 1345. 跳跃游戏 IV(BFS)

    题目 https://leetcode.com/problems/jump-game-iv/ 题解 好久没做 hard 了,今天时间多,挑战一下.用 lqy 同学的话说,这题叫做 "苦难题& ...

  7. Leetcode 1345 跳跃游戏 IV

    题目 给你一个整数数组 arr ,你一开始在数组的第一个元素处(下标为 0). 每一步,你可以从下标 i 跳到下标: i + 1 满足:i + 1 < arr.length i - 1 满足:i ...

  8. leetcode跳跃游戏C语言,LeetCode:跳跃游戏

    给定一个非负整数数组,你最初位于数组的第一个位置. 数组中的每个元素代表你在该位置可以跳跃的最大长度. 判断你是否能够到达最后一个位置. 示例 1: 输入: [2,3,1,1,4] 输出: true ...

  9. 2022.01.21 - 215.跳跃游戏 IV

    文章目录 1. 题目 2. 思路 (1) BFS 3. 代码 1. 题目 2. 思路 (1) BFS 首先统计每个值出现的所有位置,然后从头开始广度优先搜索. 由于从头开始的步数必然是最小的,因此,先 ...

最新文章

  1. 知方可补不足~SQL2008中的发布与订阅模式~续
  2. [转载]在Eclipse CDT中编译含有多个main函数的项目
  3. 分析一个文本(英文文章)(300k—500k)中的词出现的频率,并且把频率最高的10个词打印出来。...
  4. SQL Server 创建定时任务JOB
  5. 如何在不增加人员的情况下自动化API安全程序
  6. python 代码格式规范脚本_Python编码规范
  7. c++运算符优先级总结
  8. 【Elasticsearch】elasticsearch里面的关于批量读取mget的用法
  9. elasticsearch 删除满足条件的语句_ElasticSearch的基本概念和集群分布式底层实现
  10. 《python接口自动化测试》笔记
  11. 大前端主题添加强力推荐和联系我们模块
  12. 拉斯韦加斯夜景走马观花
  13. 液晶电子手写板,达威尔儿童涂鸦画板手写板,写字板手绘板绘画板
  14. 调皮的表情图(Emoji)
  15. Buffer(缓冲区)
  16. 基于Java Web考生评分系统设计实现毕业设计源码071114
  17. 只要8元,就能体验美国第一夫人的乐趣
  18. Wordpress网页直接插入bilibili视频方法
  19. MybatisX idea 快速开发插件
  20. 机器学习基础学习笔记【二】

热门文章

  1. 文件批量重命名工具.exe
  2. Ubuntu安装搜狗输入法指南
  3. android电视传屏软件下载,MAXHUB传屏助手
  4. C语言处理excel
  5. 微软云 (Microsoft Cloud) 技术概述
  6. 使用protege过程中的一些小技巧
  7. 中国锂电池电解液行业竞争状况及发展规划分析报告(2022-2027年)
  8. linux安装vmware tools成功后无法复制解决办法
  9. 远程网络教学系统功能
  10. The IIIustrated Word2vec