题目
从若干副扑克牌中随机抽 5 张牌,判断是不是一个顺子,即这5张牌是不是连续的。2~10为数字本身,A为1,J为11,Q为12,K为13,而大、小王为 0 ,可以看成任意数字。A 不能视为 14。
示例 1:
输入: [1,2,3,4,5] 输出: True
示例 2:
输入: [0,0,1,2,5] 输出: True
解题
方法一:顺序遍历,记录最大值、最小值、set记录重复
此题限定是5张牌
判断顺子充分条件:
- 除大王小王外,所有牌无重复
- 设此 55 张牌中最大的牌为 max ,最小的牌为 min(大小王除外),则需满足:max-min<5
因此,使用maxNum、minNum分别记录出现最大最小值(大小王除外),用set记录牌是否重复。
class Solution { public: bool isStraight(vector<int>& nums) { int maxNum=INT_MIN; int minNum=INT_MAX; unordered_set<int> set; for(int num:nums){ if(num){ maxNum=max(maxNum,num); minNum=min(minNum,num); if(set.count(num)) return false; set.insert(num); } } return maxNum-minNum<5; } };