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

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


解题思路:

(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;
}

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


目录
打赏
0
0
0
0
14
分享
相关文章
基于GRU网络的MQAM调制信号检测算法matlab仿真,对比LSTM
本研究基于MATLAB 2022a,使用GRU网络对QAM调制信号进行检测。QAM是一种高效调制技术,广泛应用于现代通信系统。传统方法在复杂环境下性能下降,而GRU通过门控机制有效提取时间序列特征,实现16QAM、32QAM、64QAM、128QAM的准确检测。仿真结果显示,GRU在低SNR下表现优异,且训练速度快,参数少。核心程序包括模型预测、误检率和漏检率计算,并绘制准确率图。
81 65
基于GRU网络的MQAM调制信号检测算法matlab仿真,对比LSTM
|
14天前
|
基于遗传优化算法的风力机位置布局matlab仿真
本项目基于遗传优化算法(GA)进行风力机位置布局的MATLAB仿真,旨在最大化风场发电效率。使用MATLAB2022A版本运行,核心代码通过迭代选择、交叉、变异等操作优化风力机布局。输出包括优化收敛曲线和最佳布局图。遗传算法模拟生物进化机制,通过初始化、选择、交叉、变异和精英保留等步骤,在复杂约束条件下找到最优布局方案,提升风场整体能源产出效率。
基于包围盒的机械臂防碰撞算法matlab仿真
基于包围盒的机械臂防碰撞算法通过构建包围盒来近似表示机械臂及其环境中各实体的空间占用,检测包围盒是否相交以预判并规避潜在碰撞风险。该算法适用于复杂结构对象,通过细分目标对象并逐级检测,确保操作安全。系统采用MATLAB2022a开发,仿真结果显示其有效性。此技术广泛应用于机器人运动规划与控制领域,确保机器人在复杂环境中的安全作业。
基于CS模型和CV模型的多目标协同滤波跟踪算法matlab仿真
本项目基于CS模型和CV模型的多目标协同滤波跟踪算法,旨在提高复杂场景下多个移动目标的跟踪精度和鲁棒性。通过融合目标间的关系和数据关联性,优化跟踪结果。程序在MATLAB2022A上运行,展示了真实轨迹与滤波轨迹的对比、位置及速度误差均值和均方误差等关键指标。核心代码包括对目标轨迹、速度及误差的详细绘图分析,验证了算法的有效性。该算法结合CS模型的初步聚类和CV模型的投票机制,增强了目标状态估计的准确性,尤其适用于遮挡、重叠和快速运动等复杂场景。
基于WOA鲸鱼优化的CNN-GRU-SAM网络时间序列回归预测算法matlab仿真
本项目基于MATLAB 2022a实现时间序列预测,采用CNN-GRU-SAM网络结构,结合鲸鱼优化算法(WOA)优化网络参数。核心代码含操作视频,运行效果无水印。算法通过卷积层提取局部特征,GRU层处理长期依赖,自注意力机制捕捉全局特征,全连接层整合输出。数据预处理后,使用WOA迭代优化,最终输出最优预测结果。
|
17天前
|
基于SOA海鸥优化算法的三维曲面最高点搜索matlab仿真
本程序基于海鸥优化算法(SOA)进行三维曲面最高点搜索的MATLAB仿真,输出收敛曲线和搜索结果。使用MATLAB2022A版本运行,核心代码实现种群初始化、适应度计算、交叉变异等操作。SOA模拟海鸥觅食行为,通过搜索飞行、跟随飞行和掠食飞行三种策略高效探索解空间,找到全局最优解。
基于机器学习的人脸识别算法matlab仿真,对比GRNN,PNN,DNN以及BP四种网络
本项目展示了人脸识别算法的运行效果(无水印),基于MATLAB2022A开发。核心程序包含详细中文注释及操作视频。理论部分介绍了广义回归神经网络(GRNN)、概率神经网络(PNN)、深度神经网络(DNN)和反向传播(BP)神经网络在人脸识别中的应用,涵盖各算法的结构特点与性能比较。
一维信号的小波变换与重构算法matlab仿真
本程序使用MATLAB2022A实现一维信号的小波变换与重构,对正弦测试信号进行小波分解和重构,并计算重构信号与原信号的误差。核心步骤包括:绘制分解系数图像、上抽取与滤波重构、对比原始与重构信号及误差分析。小波变换通过多分辨率分析捕捉信号的局部特征,适用于非平稳信号处理,在信号去噪、压缩等领域有广泛应用。
基于NURBS曲线的数据拟合算法matlab仿真
本程序基于NURBS曲线实现数据拟合,适用于计算机图形学、CAD/CAM等领域。通过控制顶点和权重,精确表示复杂形状,特别适合真实对象建模和数据点光滑拟合。程序在MATLAB2022A上运行,展示了T1至T7的测试结果,无水印输出。核心算法采用梯度下降等优化技术调整参数,最小化误差函数E,确保迭代收敛,提供高质量的拟合效果。

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等