一、题目:
从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。2~10为数字本身,A为1,J为11,Q为12,K为13,而大、小王为 0 ,可以看成任意数字。A 不能视为 14。
二、思路和代码:
记录0数量t,也就是第一个不为0的数字出现的位置,其余数字如果有相同的且不为0就不可能是顺子,此处用哈希表统计出现次数,最大值减最小值(nums[t])<=4即顺子
class Solution {
public:
bool isStraight(vector<int>& nums) {
sort(nums.begin(),nums.end());//题目中有未排序的测试用例
int t=0;
unordered_map<int,int>m;
while(!nums[t])t++;//统计第一个不为0的下标t
//如果有两个相等的数字且不为1,那肯定没有顺子
for(auto n:nums){
m[n]++;
if(m[n]==2 && n!=0)return false;
}
return nums.back()-nums[t]<5;//=数组最大值减去除0外的最小值
}
};
怕什么真理无穷,进一步有进一步的欢喜!