解题思路
参考自面试题61. 扑克牌中的顺子(集合 Set / 排序,清晰图解)
满足顺子的条件
1、除大小王外,所有牌无重复;
2、除此5张牌中最大的牌为max
,最小的牌为min
(大小王除外),则需满足:max-min<5
时间复杂度O(NlogN)
,此处N=5,数组排序使用NlogN
空间复杂度O(1)
代码
class Solution {
public:
bool isStraight(vector<int>& nums) {
int numsWang = 0;
sort(nums.begin(), nums.end());//排序
for (int i = 0; i < 4; i++) {
if (nums[i] == 0) numsWang++;//统计大小王的数量
else if (nums[i + 1] == nums[i]) return false;//有重复,提前返回false
}
return (nums[4] - nums[numsWang]) < 5;//最大和最小两者差值判断
}
};