华为OD机试107-跳格子游戏
原始题目链接可以参考如下链接 某厂机试算法刷题一览_@_南先森的博客-CSDN博客
在阅读代码时,建议拷贝到idea或者eclipse里面看,为了便于理解代码,注释比较多,
在阅读代码时,可以先删掉注释
这个题目需要用到栈做广度优先搜索,解题主要有以下几个要点
1:要找到没有依赖关系的数字作为起始数字,从起始数字出发
像多米诺骨牌一样往后面的数字传递,依次解锁后面数字
2:使用Map<Integer, List<Integer>>数据结构来记录
数字之间的依赖关系,value依赖key
3:需要用到Stack,可以解锁的数字入栈,用出栈来模拟解锁过程
public class Demo107 {//测试代码public static void main(String[] args) {int n = 6;int[][] grids = {{0, 1}, {0, 2}, {0, 3}, {0, 4}, {0, 5}};boolean r = skipGrid(n, grids);System.out.println(r);}/** n代表总共几个数字* grids存放每一行的两个数字* 举个例子,如果用户输入下面的数据* 2* 1 0* 0 1* 那么n = 2 grids = {{1,0},{0,1}}**/public static boolean skipGrid(int n, int[][] grids) {/** x数组的设计很有讲究,其索引代表需要解锁的数字,其值代表依赖数字* 如国值为null,说明当前数字无依赖数字,可以直接解锁,下面举2个例子* 便于理解* 如果用户输入* 2* 1 0* 0 1* 那么x=[1,0]* 观察上面的数据,可以看到 x[0] = 1; x[1] = 0* 以上是索引0依赖数字1,索引1依赖数字0* 再举个例子* 3* 0 1* 0 2* 则x=[null,0,0]* 观察上面的数据,可以看到 x[0] = null; x[1] = 0; x[2] = 0* 说明索引0没有依赖数字,可以直接解锁.而索引1,2都依赖0**/Integer[] x = new Integer[n];// key和value都存放的是数字,key可以解锁valueMap<Integer, List<Integer>> map = new HashMap<>();for (int i = 0; i < grids.length; i++) {int[] a = grids[i];List<Integer> list = map.getOrDefault(a[0], new ArrayList<>());list.add(a[1]);map.put(a[0], list);// 理解了上面的注释,这行代码就好理解,简单说,就是记录索引依赖的数字x[a[1]] = a[0];}Stack<Integer> stack = new Stack<>();//值为空的找出来,值为空说明没有依赖关系,可以直接解锁for (int i = 0; i < x.length; i++) {if (x[i] == null) {stack.add(i);}}//如果所有的数字都有依赖关系,说明没法解锁if (stack.isEmpty()) {return false;}while (!stack.isEmpty()) {// 一个个弹出,然后赋值为-1,代表已经解锁过了.后面不要重复访问解锁过的元素int index = stack.pop();x[index] = -1;// 获取以index为前提条件的数字,因为index解锁了,那么以index为前提条件的数字也可以解锁List<Integer> list = map.get(index);if (list == null) {continue;}list.forEach(item -> {// 等于 -1说明已经解锁过了,不需要重复解锁,避免死循环if (x[item] != -1) {stack.add(item);}});}for (int i = 0; i < x.length; i++) {if (x[i] != -1) {return false;}}return true;}
}
华为OD机试107-跳格子游戏相关推荐
- 华为OD机试 - 密室逃生游戏(Python)
密室逃生游戏 题目 小强增在参加<密室逃生>游戏,当前关卡要求找到符合给定 密码 K(升序的不重复小写字母组成) 的箱子, 并给出箱子编号,箱子编号为 1~N . 每个箱子中都有一个 字符 ...
- 华为OD机试 - 密室逃生游戏(Java JS Python)
题目描述 小强正在参加<密室逃生>游戏,当前关卡要求找到符合给定 密码K(升序的不重复小写字母组成) 的箱子,并给出箱子编号,箱子编号为 1~N . 每个箱子中都有一个 字符串s ,字符串 ...
- 华为OD机试 - 密室逃生游戏(Java) | 机试题+算法思路+考点+代码解析 【2023】
密室逃生游戏 小强增在参加<密室逃生>游戏,当前关卡要求找到符合给定 密码K(升序的不重复小写字母组成) 的箱子, 并给出箱子编号,箱子编号为 1~N . 每个箱子中都有一个 字符串s , ...
- 华为OD机试真题大全完整目录
华为OD机试真题大全完整目录 专栏说明如下 专栏目录 专栏说明如下 内容:华为OD机试真题大全 数量:406篇博文(2023年5月16日截止) 更新时间至:2023年5月16日(后续加上去的博文,会每 ...
- 【华为OD机试真题 JAVA】跳格子游戏
JS版:[华为OD机试真题 JS]跳格子游戏 标题:跳格子游戏 | 时间限制:1秒 | 内存限制:262144K | 语言限制:不限 地上共有N个格子,你需要跳完地上所有的格子,但是格子间是有强依赖关 ...
- 【华为OD机试真题 C++】单词搜索 - 找到它游戏
前言:本专栏将持续更新华为OD机试题目,并进行详细的分析与解答,包含完整的代码实现,希望可以帮助到正在努力的你.关于OD机试流程.面经.面试指导等,如有任何疑问,欢迎联系我,wechat:steven ...
- 【华为OD机试真题 JAVA】报数游戏
JS版:[华为OD机试真题 JS]报数游戏 标题:报数游戏 | 时间限制:1秒 | 内存限制:262144K | 语言限制:不限 100个人围成一圈,每个人有一个编码,编号从1开始到100.他们从1开 ...
- 【100%通过率】华为OD机试C++/python【密室逃生游戏】【2022.11 Q4 新题|100分】
华为OD机试- 题目列表 2023Q1 点这里!! 2023华为OD机试-刷题指南 点这里!! 题目描述 小强在参加<密室逃生>游戏,当前关卡要求找到符合给定 密码K(升序的不重复小写字母 ...
- 【华为OD机试真题 Python】单词搜索 - 找到它游戏
前言:本专栏将持续更新华为OD机试题目,并进行详细的分析与解答,包含完整的代码实现,希望可以帮助到正在努力的你.关于OD机试流程.面经.面试指导等,如有任何疑问,欢迎联系我,wechat:steven ...
最新文章
- java Timer定时器管理类
- 以后开药的时候,最后一定问一句,哪些药有激素
- c++ 虚继承与继承的差异
- 一个java文件中可包含多个main方法
- [单刷 APUE 系列] 第十四章——高级 I/O
- 使用IDEA的Spring Initializr创建SpringBoot工程
- Open Source Blog 开源ASP.NET/C# 博客平台 v2.5 发布(提供源码下载)
- java.util.timertask_java.util.TimerTask翻译
- linux chromebook arm,第一款可拆卸 ARM Chromebook 可能是 KODAMA
- SUN:开源在Web2.0时代
- 如何在ASP.NET Core中上传文档
- 《Cassandra权威指南》第二版书评及访谈
- 【翻译】Geometric Features-Based Parking Slot Detection
- 本特利探头177230-01-02-CN
- 深度学习视频压缩3——M-LVC: Multiple Frames Prediction for Learned Video Compression
- 动态规划——1292:宠物小精灵之收服(二维背包问题)
- 用python画玫瑰花
- 关于系统架构你不知道的那些事-架构设计流程:设计备选方案
- excel插件开发,Smartbi免费版安装流程
- 华为虚拟服务器忘记密码,华为云服务器忘记密码了怎么办