• 扑克牌顺子问题,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;
    }
  • 相关阅读:
    Jackrabbit 中Session最佳实践
    Android 学习历程
    SmartFoxServer 学习笔记 002
    互联网的下一代
    VirtualBox 中 安装 Ubuntu Desktop 10 桌面分辨率的调整
    学习 SmartFoxServer 笔记 001
    手工转换中缀式与前、后缀式
    汉字传值奇数乱码问题解决策略
    git权限管理工具gitolite使用笔记(一)
    git 安装笔记
  • 原文地址:https://www.cnblogs.com/adamhome/p/8011365.html
Copyright © 2020-2023  润新知