[LeetCode][LCR186]文物朝代判断——贪心

文章介绍了在给定文物朝代数组中,判断文物所属朝代编号是否连续的问题,提供了两种解决方案:一种利用哈希表检测非0朝代的唯一性和范围,另一种是排序后检查相邻元素是否相等。
摘要由CSDN通过智能技术生成

题目

LCR 186. 文物朝代判断

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

  • 示例 1:

输入:places = [0, 6, 9, 0, 7]
输出:True

  • 示例 2:

输入:places = [7, 8, 9, 10, 11]
输出:True

  • 提示:

places.length = 5
0 <= places[i] <= 13

解法1:哈希表

  • 由于0可以当成任何数字
  • 所以只要除了0没有其他重复数字,且除了0之外的最大值和最小值相差不超过5,0都能对序列进行填充使之符合题意(顺子)

class Solution {
public:
    bool checkDynasty(vector<int>& places) {
        int min=14, max=-1;
        set<int> st;
        for(auto &ele:places){
            if(!ele) continue;
            if(st.find(ele)!=st.end())return false;
            st.insert(ele);
            if(ele<min) min=ele;
            if(ele>max) max=ele;
        }
        return max-min<5;
    }
};

解法2:排序

  • 由于数组很小,直接对数组进行排序,并判断前一个和后一个是否相等,如果相等则有数字重复,不符合要求
  • 最终也是同解法1一样判断除了0之外的最大值和最小值差值是否小于5

class Solution {
public:
    bool checkDynasty(vector<int>& places) {
        sort(places.begin(), places.end());
        int zero_end=0;
        while(!places[zero_end]) zero_end++;

        for(int i=zero_end; i<places.size()-1; ++i){
            if(places[i]==places[i+1]) return false;
        }
        return places[4]-places[zero_end]<5;
    }
};
  • 7
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

__Witheart__

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值