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;
    }
  • 相关阅读:
    NoSQL 数据库中的 CAP 理论
    JVM 相关概念
    Servlet 生命周期
    RabbitMQ
    消息队列概述
    05.类加载器深入解析及重要特性剖析
    LINUX笔记3(用户管理)
    LINUX笔记2(创建和编辑文本)
    修改httpd端口后,服务不能启动。
    LINUX笔记1(命令行和目录结构)
  • 原文地址:https://www.cnblogs.com/adamhome/p/8011365.html
Copyright © 2011-2022 走看看