从扑克牌中随机抽 5 张牌,判断是不是一个顺子,即这 5张牌是不是连续的。
2∼10为数字本身,A 为 1,J 为 11,Q 为 12,K 为 13,大小王可以看做任意数字。
为了方便,大小王均以 0来表示,并且假设这副牌中大小王均有两张。
样例1
输入:[8,9,10,11,12]
输出:true
样例2
输入:[0,8,9,11,12]
输出:true
分析:
时间复杂度
1.先把数组元素排序
2.把0过滤掉
3.遍历剩下的数,看是否有相同的元素,有就返回false
4.判断数组末尾元素减去数组首元素是否小于等于4,是就返回true,否则返回false
class Solution {
public:
bool isContinuous( vector<int> numbers ) {
/*
1.先把数组元素排序
2.把0过滤掉
3.遍历剩下的数,看是否有相同的元素,有就返回false
4.判断数组末尾元素减去数组首元素是否小于等于4,是就返回true,否则返回false
*/
if(numbers.empty()) return false;
sort(numbers.begin(), numbers.end());
int k = 0;
while(!numbers[k]) k++;
for(int i = k+1; i<numbers.size(); i++)
if(numbers[i]==numbers[i-1]) return false;
return numbers.back() - numbers[k] <= 4;
}
};
网友评论