算法每日一题——第二天——一手顺子

简介: 算法每日一题——第二天——一手顺子


解题思路:

(1)若 handSize % groupSize != 0,直接返回false

(2)若 groupSize = 1 ,直接return true。

(2)对数组hand进行排序,并且定义一个计数器count

(3)这个题如果直接拿数组写的话,难点就在有重复数字上,若 hand[i] = hand[i+1],那么直接跳过此次循环。若 hand[i] = hand[i+1]-1 ,满足题意,count ++,将hand[i]赋值为-1,表示这个数已经被用过。

(4)当 count = groupSize 时,令 i = 0 ,重新开始循环。

注意:

(1)因为我们是拿 hand[i] 与 hand[i+1]做的比较,我们只需要比较groupSize 次就能选出一组牌,所以count要从1开始。

(2)当遇到 hand[i+1] = -1 时,交换 hand[i+1]与hand[i] 的值,然后在跳过此次循环。

(3)当判断hand[i] = hand[i+1]成立之后,需要注意判断hand[i+1]是不是最后一项,若是最后一项的话,说明就剩余两张相同的牌,return false

代码:

int cmp_int(const void* x,const void* y)
{
    return *(int*)x-*(int*)y;
}
void swap( int *x,int *y)
{
    int tmp=*x;
    *x=*y;
    *y=tmp;
}
bool isNStraightHand(int* hand, int handSize, int groupSize)
{
    if(handSize%groupSize != 0)
    {
        return false;
    }
    if(groupSize==1)
    return true;
    qsort(hand,handSize,sizeof(int),cmp_int);
    int count=1;
    for(int i=0;i<handSize-1;i++)
    {
        if(count==groupSize)
        {
            hand[i]=-1;
            count=1;
            i=0;
        }
        if(hand[i]==-1||hand[i]==hand[i+1])
        {
            if(i+1==handSize-1)
            return false;
            continue;
        }
        if(hand[i+1]==-1)
        {
            swap(&hand[i],&hand[i+1]);
            continue;
        }
        if(hand[i]!=hand[i+1]-1)
        return false;
        hand[i]=-1;
        count++;
    }
    return true;
}

如果这个题拿链表写的话,就不需要考虑这么多情况了。


相关文章
|
3月前
leetcode-846:一手顺子
leetcode-846:一手顺子
12 0
|
5月前
|
算法
蓝桥杯算法竞赛第一周题型总结
蓝桥杯算法竞赛第一周题型总结
42 0
|
10月前
|
算法 测试技术
蓝桥杯2022年第十三届决赛真题-卡牌——二分法
蓝桥杯2022年第十三届决赛真题-卡牌——二分法
84 0
|
11月前
|
算法 C++ Python
【每日算法Day 87】今天我脱单了,所以大家不用做题了!
【每日算法Day 87】今天我脱单了,所以大家不用做题了!
|
存储
【蓝桥杯集训·每日一题】AcWing 4309. 消灭老鼠
文章目录 一、题目 1、原题链接 2、题目描述 二、解题报告 1、思路分析 2、时间复杂度 3、代码详解 三、知识风暴 最大公约数
57 0
周赛313赛后做题分析及总结
本文为力扣周赛313赛后做题分析及总结。
72 0
牛客练习赛87 牛老板 (记忆化搜索)
牛客练习赛87 牛老板 (记忆化搜索)
104 0
|
算法
每日一题冲刺大厂 第二十三天 奶牛晒衣服
大家好,我是泡泡,给大家带来每日一题的目的是为了更好的练习算法,我们的每日一题为了让大家练到各种各样的题目,熟悉各种题型,一年以后,蜕变成为一个不一样的自己!
107 0
|
算法
每日一题冲刺大厂第十天 淘汰赛
大家好,我是泡泡,给大家带来每日一题的目的是为了更好的练习算法,我们的每日一题这个月进度是数据结构,让大家练到各种各样的数据结构题目,熟悉数据结构的增删改查,一年以后,蜕变成为一个不一样的自己!
97 0
|
人工智能 测试技术
蓝桥杯倒数七天冲刺国一之每日复习第二天
距离蓝桥杯还有六天!!各位加油!!!不要忘了打印准考证测试环境!
75 0