
解法:排序
思路:如果有重复元素,则不可能构成顺子。
没有重复元素,则最大牌减去最小牌(除了大小王)的值应该小于5。
评论区图文解析
void *cmp(void *a, void *b)
{
return *(int*)a - *(int*)b;
}
bool isStraight(int* nums, int numsSize){
// 排序
qsort(nums, numsSize, sizeof(int), cmp);
int count = 0;
for(int i=0; i<numsSize; i++)
{
if(nums[i] == 0) count++;//统计王牌的个数
else if(i+1 < numsSize && nums[i] == nums[i+1]) return false; //有重复元素就直接返回false
}
return nums[4] - nums[count] < 5; //除了大小王,最大牌-最小牌要小于5才能构成顺子
}
时间复杂度 O ( n l o g n ) O(nlogn) O(nlogn),空间复杂度 O ( 1 ) O(1) O(1)。
顺子判断算法:C++实现的快速顺子检测
本文介绍了一种使用C++实现的判断整数数组是否能构成顺子的算法。通过排序和特殊检查重复元素及大小王,时间复杂度为O(nlogn),空间复杂度为O(1)。重点讲解了如何利用qsort进行排序并处理特殊情况来确保顺子条件的满足。

被折叠的 条评论
为什么被折叠?



