简单思路 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