zoukankan      html  css  js  c++  java
  • 扑克牌顺子问题,C++

    首先统计有多少个可以抵牌的赖子(可以当任何一张其它牌使用)

    然后统计Max减Min是否超过了所有的牌,毕竟如果这样的话,即使全是赖子都不能使用

    将所有的牌按照所在值减Min排列起来,如果存在设为true。如果不存在则使用赖子抵用,当来自使用完了之后,则说明不可以构成顺子

    代码如下:

    #include<iostream>
    #include<vector>
    using namespace std;
    class Solution {
    public:
        bool IsContinuous( vector<int> numbers ) {
            int luckyCount = 0;
            vector<bool> tag;
            //tag.reserve(numbers.size());
            int minNumber = 1<<30;
            int maxNumber = 0;
            for (int i = 0; i < numbers.size(); i++)
            {
                    if (numbers[i] == 0)
                    {
                        luckyCount++;
                    } else {
                         if (numbers[i] < minNumber)
                         {
                               minNumber = numbers[i];
                         }
                         if (numbers[i] > maxNumber) {
                            maxNumber = numbers[i];
                            }
                    } 
                    tag.push_back(false);
            }
            /*
            *确保最大的数字也能够放进数组里 
            */
            if (maxNumber - minNumber + 1 > tag.size())
            {
                return false;
            }
            for (int i = 0; i < numbers.size(); i++)
            {
                if (numbers[i] != 0)
                {
                    //numbers[i]可能是一个很大的数,超过了tag的size
                    tag[numbers[i] - minNumber] = true; 
                }  
            }
            for (int i = 0; i < tag.size();i++)
            {
                if (!tag[i])
                {
                    luckyCount--;
                }
                if (luckyCount < 0)
                {
                    return false;
                }
            }
            return true;
        }
    };
    int main()
    {
        int array[] = {3,0,0,0,0};
        vector<int> vec(array, array + sizeof(array)/sizeof(int));
        cout<<Solution().IsContinuous(vec);
        return 0;
    }
  • 相关阅读:
    monaco editor
    javascript for of 和 for in 在数组和对象中的区别
    django rest 版本控制器
    学习
    day 22
    day 21
    day20
    day21 数据处理自我小结
    day20 【手写数字识别】之数据处理(搬运)
    day19 通过极简方案快速构建手写数字识别模型 (百度飞浆搬运)
  • 原文地址:https://www.cnblogs.com/adamhome/p/8011365.html
Copyright © 2011-2022 走看看