【剑指offer】扑克牌的顺子,C++实现
# 题目
# 思路
顺子满足的条件:
- 数组长度必须为5
- 除0外没有重复的牌(0表示大小王)
- 顺子中最大值和最小值的差值小于5
# 代码
#include <iostream> #include <vector> using namespace std; class Solution { public: bool IsContinuous( vector<int> numbers ) { // 数组长度必须为5 if(numbers.size() != 5) return 0; // 统计每个元素出现的次数;以numbers中的元素作为下标(最大K,对应13) int count[14]={0}; // 辅助变量 int len=numbers.size(); int max=-1; int min=14; for(int i=0;i<len;++i) { count[numbers[i]]++; if(numbers[i]==0) continue; // 大小王可以重复 if(count[numbers[i]]>1) return 0; // 其他牌不可以重复
if(numbers[i]>max) max=numbers[i];// 更新max if(numbers[i]<min) min=numbers[i];// 更新min }
if(max-min<5) return 1; return 0; } }; int main() { vector<int> numbers = {1,2,3,5,0}; Solution solution; cout<<solution.IsContinuous(numbers)<<endl; return 0; }