leetcode:跳跃游戏 IV
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相关推荐
- 1345. 跳跃游戏 IV
Powered by:NEFU AB-IN Link 文章目录 1345. 跳跃游戏 IV 题意 思路 代码 1345. 跳跃游戏 IV 题意 略 思路 先用哈希表将每个相同元素的位置记下来,每个形成 ...
- Leetcode跳跃游戏
文章目录 Leetcode跳跃游戏 题目简介 跳跃游戏1 跳跃游戏2 Leetcode跳跃游戏 题目简介 给定一个非负整数数组,你最初位于数组的第一个位置. 数组中的每个元素代表你在该位置可以跳跃的最 ...
- leetcode 跳跃游戏系列 c++
文章目录 [55. 跳跃游戏](https://leetcode-cn.com/problems/jump-game/) [45. 跳跃游戏 II](https://leetcode-cn.com/p ...
- LeetCode(跳跃游戏)
20200404 题目 :跳跃游戏 给定一个非负整数数组,你最初位于数组的第一个位置. 数组中的每个元素代表你在该位置可以跳跃的最大长度. 判断你是否可以到达最后的位置. 示例: 输入: [2,3,1 ...
- Leetcode 跳跃游戏
跳跃游戏 题目描述: 给定一个非负整数数组 nums ,你最初位于数组的 第一个下标 . 数组中的每个元素代表你在该位置可以跳跃的最大长度. 判断你是否能够到达最后一个下标. 提示: 1 <= ...
- leetcode 1345. Jump Game IV | 1345. 跳跃游戏 IV(BFS)
题目 https://leetcode.com/problems/jump-game-iv/ 题解 好久没做 hard 了,今天时间多,挑战一下.用 lqy 同学的话说,这题叫做 "苦难题& ...
- Leetcode 1345 跳跃游戏 IV
题目 给你一个整数数组 arr ,你一开始在数组的第一个元素处(下标为 0). 每一步,你可以从下标 i 跳到下标: i + 1 满足:i + 1 < arr.length i - 1 满足:i ...
- leetcode跳跃游戏C语言,LeetCode:跳跃游戏
给定一个非负整数数组,你最初位于数组的第一个位置. 数组中的每个元素代表你在该位置可以跳跃的最大长度. 判断你是否能够到达最后一个位置. 示例 1: 输入: [2,3,1,1,4] 输出: true ...
- 2022.01.21 - 215.跳跃游戏 IV
文章目录 1. 题目 2. 思路 (1) BFS 3. 代码 1. 题目 2. 思路 (1) BFS 首先统计每个值出现的所有位置,然后从头开始广度优先搜索. 由于从头开始的步数必然是最小的,因此,先 ...
最新文章
- 知方可补不足~SQL2008中的发布与订阅模式~续
- [转载]在Eclipse CDT中编译含有多个main函数的项目
- 分析一个文本(英文文章)(300k—500k)中的词出现的频率,并且把频率最高的10个词打印出来。...
- SQL Server 创建定时任务JOB
- 如何在不增加人员的情况下自动化API安全程序
- python 代码格式规范脚本_Python编码规范
- c++运算符优先级总结
- 【Elasticsearch】elasticsearch里面的关于批量读取mget的用法
- elasticsearch 删除满足条件的语句_ElasticSearch的基本概念和集群分布式底层实现
- 《python接口自动化测试》笔记
- 大前端主题添加强力推荐和联系我们模块
- 拉斯韦加斯夜景走马观花
- 液晶电子手写板,达威尔儿童涂鸦画板手写板,写字板手绘板绘画板
- 调皮的表情图(Emoji)
- Buffer(缓冲区)
- 基于Java Web考生评分系统设计实现毕业设计源码071114
- 只要8元,就能体验美国第一夫人的乐趣
- Wordpress网页直接插入bilibili视频方法
- MybatisX idea 快速开发插件
- 机器学习基础学习笔记【二】