剑指offer2之扑克牌中的顺子

题目(扑克牌中的顺子)

从扑克牌中随机抽 5 张牌,判断是不是一个顺子,即这 5 张牌是不是连续的。2-10 为数字本身,A 为 1,J 为 11,Q 为 12 ,K 为13,而大、小王可以看出任意数字。

算法思路

首先,考虑不是顺子的情况。当5张牌中至少存在相同的两张牌即可断定为非顺子。
然后,由于大小王可以当场任意数字,这里其将它们当成 0 处理,恰好也能和 1-13 之间的数字区分开。
那么,首先算法统计一遍 0 的个数,然后对数组升序处理;然后,再次统计除了 0 之外的相邻两牌之间所需的间隔数量以达到连续的目的,最后比较可用于填充的 0 的数量和间隔数量,那么这时候只要间隔数量足够用 0 填充那么就可以当场是顺子,否则为非顺子。

算法实现

复杂度分析

由于随机取出扑克牌数量固定,只有5,时间复杂度较低。具体算的话是O(nlogn)

参考

[1] <<剑指offer2>>

-------------本文结束感谢您的阅读-------------