【剑指offer】扑克牌的顺子,C++实现

# 题目

image

# 思路

顺子满足的条件:

  • 数组长度必须为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;
}
posted @ 2018-05-09 17:24  wanglei5205  阅读(1079)  评论(0编辑  收藏  举报
levels of contents