题解 | #扑克牌顺子#
扑克牌顺子
https://www.nowcoder.com/practice/762836f4d43d43ca9deb273b3de8e1f4
#include <climits>
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param numbers int整型vector
* @return bool布尔型
*/
bool IsContinuous(vector<int>& nums) {
vector<int>& numbers = nums;
sort(numbers.begin(), numbers.end());
int zero = 0;
int gap = 0;
for (int i = 0; i < numbers.size() - 1; i++) {
while (numbers[i] == 0) {
zero++;
i++;
}
if(i == numbers.size()-1){
return true;
}
if(numbers[i+1] == numbers[i]){
return false;
}
gap += numbers[i + 1] - numbers[i] - 1;
}
if (gap > zero) {
return false;
} else {
return true;
}
}
};
先对扑克牌进行排序,然后计算扑克牌中零的个数和非零牌之间的间隔总数,对比零牌张数和非零牌间隔总数,如果间隔总数 > 零牌数,则无法构成顺子,否则可以构成顺子。时间复杂度O(nlogn), 空间复杂度O(1).
查看12道真题和解析
