首页 > 编程语言 >常见面试算法题-跳格子

常见面试算法题-跳格子

时间:2024-03-31 13:29:43浏览次数:24  
标签:格子 示例 nums 开启 dic 面试 算法 steps

■ 题目描述

【跳格子】

地上共有N个格子,你需要跳完地上所有的格子,但是格子间是有强依赖关系的,跳完前一个格子后,后续的格子才会被开启,格子间的依赖关系由多组steps数组给出,steps[0]表示前一个格子,steps[1]表示steps[0]可以开启的格子:

比如[0,1]表示从跳完第0个格子以后第1个格子就开启了,比如[2,1],[2,3]表示跳完第2个格子后第1个格子和第3个格子就被开启了。

请你计算是否能由给出的steps数组跳完所有的格子,如果可以输出yes,否则输出no。

说明:

1.你可以从一个格子跳到任意一个开启的格子

2.没有前置依赖条件的格子默认就是开启的

3.如果总数是N,则所有的格子编号为[0,1,2,3…N-1]连续的数组

输入描述:

输入一个整数N表示总共有多少个格子,接着输入多组二维数组steps表示所有格子之间的依赖关系。

输出描述:

如果能按照steps给定的依赖顺序跳完所有的格子输出yes,

否则输出no。

输入

3

0 1

0 2

输出

yes

说明

总共有三个格子[0,1,2],跳完0个格子后第1个格子就开启了,跳到第0个格子后第2个格子也被开启了,按照0->1->2或者0->2->1的顺序都可以跳完所有的格子

示例2   输入输出示例仅供调试,后台判题数据一般不包含示例

输入

2

1 0

0 1

输出

no

说明

总共有2个格子,第1个格子可以开启第0格子,但是第1个格子又需要第0个格子才能开启,相互依赖,因此无法完成

示例3   输入输出示例仅供调试,后台判题数据一般不包含示例

输入

6

0 1

0 2

0 3

0 4

0 5

输出

yes

说明

总共有6个格子,第0个格子可以开启第1,2,3,4,5个格子,所以跳完第0个格子之后其他格子都被开启了,之后按任何顺序可以跳完剩余的格子

示例4   输入输出示例仅供调试,后台判题数据一般不包含示例

输入

5

4 3

0 4

2 1

3 2

输出

yes

说明

跳完第0个格子可以开启格子4,跳完格子4可以开启格子3,跳完格子3可以开启格子2,跳完格子2可以开启格子1,按照0->4->3->2->1这样就跳完所有的格子

以下代码为本人原创,可以供大家参考,若有不足之处,感谢指出!!!!

n = int(input())
dic = dict()
while True:
    nums = list(map(int, input().split()))
    if len(nums) != 0:
        if nums[0] in dic:
            dic[nums[0]].append(nums[1])
        else:
            dic[nums[0]] = [nums[1]]
    else:
        break
cur = []
for i in dic.values():
    cur += i
cur = set(cur)
x = []
for i in range(n):
    if i not in cur:
        x.append(i)
if len(x) == 0:
    print('NO')
else:
    stack = []
    ans = []
    for i in x:
        ans.append(i)
        stack += dic[i]
        stack = list(set(stack))
    while stack:
        stack1 = []
        for j in stack:
            if j not in ans:
                stack1 += dic.get(j, [])
                ans.append(j)
        stack1 = list(set(stack1))
        stack = stack1
    if len(ans) == n:
        print('YES')
    else:
        print('NO')

标签:格子,示例,nums,开启,dic,面试,算法,steps
From: https://blog.csdn.net/YW2019/article/details/137197753

相关文章

  • C语言实现半定规划(Semidefinite Programming, SDP)算法
    目录前言A.建议B.简介一代码实现A.半定规划的基本概念B.使用C语言进行半定规划建模二时空复杂度A.时间复杂度B.空间复杂度C.实际考虑三优缺点A.优点B.缺点C.总结四现实中的应用前言A.建议1.学习算法最重要的是理解算法的每一步,而不是记住算法。2.......
  • C语言实现随机游走算法(Random Walks)
    目录前言A.建议B.简介一代码实现二时空复杂度A.时间复杂度:B.空间复杂度:C.总结:三优缺点A.优点:B.缺点:C.总结:四现实中的应用前言A.建议1.学习算法最重要的是理解算法的每一步,而不是记住算法。2.建议读者学习算法的时候,自己手动一步一步地运行算法。B.......
  • 算法——动态规划
    算法之动态规划文章目录算法之动态规划前言1.1相关定义&理论1.2体会寻找子问题:最大子数组和1.3体会“备忘录”到“迭代解法”:fib函数(重叠子问题的消除方式)1.4体会最优子结构:凑零钱问题前言借助解决实际代码问题来理解动态规划!对于可以用动态规划求解的问题可......
  • 【Java编程】【算法面试题】【数组合并】以数组 intervals 表示若干个区间的集合,其中
    原始题目:以数组intervals表示若干个区间的集合,其中单个区间为intervals[i]=[starti,endi]。请你合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。......
  • 神经网络算法:一文搞懂Attention(注意力)机制
    本文将从Attention的本质、Attention的原理、Attention的应用三个方面,带您一文搞懂Attention(注意力)机制。Attention的本质核心逻辑:从关注全部到关注重点Attention机制处理长文本时,能从中抓住重点,不丢失重要信息。Attention机制像人类看图片的逻辑,当我们看一张图片的......
  • 算法---动态规划练习-9(粉刷房子)
    题目1.题目解析2.讲解算法原理3.编写代码1.题目解析题目地址:点这里2.讲解算法原理创建dp表:vector<vector>dp(n,vector(3))。这里创建了一个二维向量dp,其中dp[i][j]表示第i天选择颜色j的最小成本。初始化第一天的成本:for(inti=0;i<3;i++)......
  • java数据结构与算法刷题-----LeetCode1091. 二进制矩阵中的最短路径
    java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完):https://blog.csdn.net/grd_java/article/details/123063846文章目录广度优先+双分裂蛇广度优先+双分裂蛇双分裂蛇:是求二维表中从起点到终点的经典思路(也是......
  • java数据结构与算法刷题-----LeetCode95. 不同的二叉搜索树 II
    java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完):https://blog.csdn.net/grd_java/article/details/123063846文章目录分治回溯+记忆化搜索分治回溯+记忆化搜索卡特兰数,例如对于n个进栈元素,有多少种出栈顺序,......
  • Python 潮流周刊第 44 期(摘要)+ 赠书 5 本《明解Python算法与数据结构》
    本周刊由Python猫出品,精心筛选国内外的250+信息源,为你挑选最值得分享的文章、教程、开源项目、软件工具、播客和视频、热门话题等内容。愿景:帮助所有读者精进Python技术,并增长职业和副业的收入。周刊全文:https://pythoncat.top/posts/2024-03-30-weekly特别提醒:本期赠书5......
  • .NET DataTable 去重过滤高级算法
     ///<summary>///过滤DataTalbe添加处理(使用hashkey处理)最快///</summary>///<paramname="dataTable"></param>///<paramname="selectedNodes"></param>///<returns></returns>publicDataTabl......