【leetcode+剑指offer】LCR 186. 文物朝代判断(LCR表示剑指offer,原题题干有问题)

LCR 186. 文物朝代判断: https://leetcode.cn/problems/bu-ke-pai-zhong-de-shun-zi-lcof/description/

教学-图解算法数据结构:https://leetcode.cn/leetbook/detail/illustration-of-algorithm/

原题(表达有问题,建议直接看解析)

展览馆展出来自 13 个朝代的文物,每排展柜展出 5 个文物。某排文物的摆放情况记录于数组 places,其中 placesi 表示处于第 i 位文物的所属朝代编号。其中,编号为 0 的朝代表示未知朝代。请判断并返回这排文物的所属朝代编号是否连续(如遇未知朝代可算作连续情况)。

示例 1:

输入: places = 0, 6, 9, 0, 7

输出: True

示例 2:

输入: places = 7, 8, 9, 10, 11

输出: True

提示:

places.length = 5

0 <= placesi <= 13

思路

https://leetcode.cn/problems/bu-ke-pai-zhong-de-shun-zi-lcof/description/comments/2236358

连续不管在数组中顺序,即0, 6, 9, 0, 7是连续是因为 0 6 7 0 9,返回true,

0像扑克牌的赖子,可以替代任何数

不能有重复的数

第一:只有五个数

第二:如果五个数是连续的 比如:1 2 3 4 5 返回true

第三:重复的即使连续也要返回false 比如:1 1 2 3 4

第四:0可以代替任何数:比如0 0 0 1 5也是返回true 因为可以变成 1 2 3 4 5

代码

from: https://leetcode.cn/problems/bu-ke-pai-zhong-de-shun-zi-lcof/solutions/212071/mian-shi-ti-61-bu-ke-pai-zhong-de-shun-zi-ji-he-se/

  1. 除未知朝代外,所有朝代 无重复 ;
  2. 设 5 个朝代中最大的朝代序号为 ma ,最小的朝代序号为 mi (未知朝代除外),则需满足 ma-mi<5 (python中自带的函数为min ,max注意区分)
  3. 代码遇到0跳过
python 复制代码
class Solution:
    def checkDynasty(self, places: List[int]) -> bool:
        repeat = set()
        ma, mi = 0, 14
        for place in places:
            if place == 0: continue # 跳过未知朝代
            ma = max(ma, place) # 最大编号朝代
            mi = min(mi, place) # 最小编号朝代
            if place in repeat: return False # 若有重复,提前返回 false
            repeat.add(place) # 添加朝代至 Set
        return ma - mi < 5 # 最大编号朝代 - 最小编号朝代 < 5 则连续 
#https://leetcode.cn/problems/bu-ke-pai-zhong-de-shun-zi-lcof/solutions/212071/mian-shi-ti-61-bu-ke-pai-zhong-de-shun-zi-ji-he-se/

本地调试版本

bash 复制代码
def checkDynasty(places):
    mi,ma=15,-1
    repeat=set()
    for p in places:
        print("p",p)
        if p==0: 
            print('i')
            continue
        # print("mi,ma",mi,ma)

        if p>ma: ma=p 
        if p<mi: mi=p
        if p in repeat: return False
        repeat.add(p)
        print("mi,ma",mi,ma)

    return ma-mi<5


input2=[0,6,9,0,7]
a=checkDynasty(input2)
print(a)
相关推荐
ting94520007 小时前
Humalike X Hermes 深度技术剖析:单指令注入群聊社交智能的底层架构、算法与跨 IM 平台实现
人工智能·算法·架构
吴声子夜歌7 小时前
Java面试——算法
java·算法·面试
evans在进步8 小时前
LeetCode 64:最小路径和——Java 原地动态规划详解
java·leetcode·动态规划
h_a_o777oah8 小时前
【图论】Tarjan 缩点:解决有向图中环的问题
c++·算法·图论·acm·强连通分量·缩点·tarjan
Tisfy8 小时前
LeetCode 1386.安排电影院座位:哈希表+位运算
算法·leetcode·散列表·题解·哈希表
Nil2089 小时前
leetcode 199二叉树的右视图
算法·leetcode·深度优先
M78佐菲9 小时前
c语言学习笔记:排序与查找方法整理
linux·c语言·笔记·学习·算法
AI备案指南-满满11 小时前
人工智能拟人化互动服务安全自评估报告的评估要点有哪些?
人工智能·算法·安全·机器人·大模型备案·算法备案
土司大王13 小时前
LeetCode hot100——两两交换链表中的节点
算法·leetcode·职场和发展