简单思路 c++ ////

扑克牌顺子

http://www.nowcoder.com/questionTerminal/762836f4d43d43ca9deb273b3de8e1f4

想越多反而越乱,如果单单用0去补,先统计0,再在不连续的时候补0,会遇到这样问题:
(1)2 3 5 6 可以只补一个,但2 3 6 中间要补两次,补0得用while而不是if
(2)补0是基于有数字,如果除0外数字只有一个如何保存last(第一个出现的数,用于比较后面的递增关系)
如果数字全是0怎么补?
反而越想越乱。

不如换种方法,实际上去掉重复的(重复是肯定不行的)后,确保都是不相同的,既然不相同那么顺5只能顺在5的区间。5张不重复的牌补5要么不满足,要么不到,但不到除非是有0,总之最大-最小<5 已经可以了 【因为是“数” 5-1=4 所以<5 】
开始统计了0的个数cnt,发现其实没用的,遂删去

class Solution {
public:
    bool IsContinuous( vector<int> numbers ) {
        if(numbers.size()==0)return false;
        sort(numbers.begin(),numbers.end());
        int last=-1; int minn;//int maxx;
        for(int i=0;i<numbers.size();i++){
            if(numbers[i]==0){}
            else if(last==-1){
                last=numbers[i];
                minn=last;
            }else{
                if(last==numbers[i]) return false;
                else last=numbers[i];
            }
        }
        if(last==-1)return true;
        //maxx=numbers[numbers.size()-1];
        if(numbers[numbers.size()-1]-minn>=5)return false;
        return true;
     }
};


222
全部评论

相关推荐

刘湘_passion:出国旅游?那就小心你的腰子咯
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务