-
题目:剑指Offer61.扑克牌中的顺子
A对应1,2 ~ 10对应2 ~ 10,JQK对应11,12,13,大小王为万能牌;
输入一个长为5的数组,判断是否能构成一个链(类似于1,2,3,4,5) -
思路:
1.益智题:时间O(n):遍历一次,空间O(n):需要一个大小为5的哈希表
满足要求的条件:① 非0牌不能重复 ② 非0牌差距不能过大,例如要想构成1,2,3,4,5,非0牌的的边界为1和5,其它牌只能位于1,5之间或有大小王;
class Solution {
public:
bool isStraight(vector<int>& nums) {//5张牌,取值为[0, 13]
int set[14] = {0};//
int minVal = 14, maxVal = -1;
for (auto x : nums) {
++set[x];
if (x != 0) {
if (set[x] > 1) return false;//非0牌重复了
minVal = min(minVal, x);
maxVal = max(maxVal, x);
if (maxVal - minVal > 4) return false;//非0牌差距过大,即便靠万能牌也连不起来
}
}
return true;
}
};