特判:如果size小于5 false 如果 有1个不为0的数且0的个数为4 true
思路:先排序计算再计算0的个数,然后去重。
去重之后暴力枚举所有1~5的子序列,检查相邻的差值-1的是否小于0的个数 并且 相邻的差值-1的和加上子序列的长度加上剩余0的个数是否大于等于5 如果满足则返回true
程序运行到底还无返回则默认返回false
class Solution { public: bool IsContinuous( vector<int> numbers ) { if(numbers.size() < 5) return false; sort(numbers.begin(), numbers.end()); int zero = 0,l = 0; while(numbers[zero] == 0) zero++; numbers.erase(unique(numbers.begin(),numbers.end()),numbers.end()); while(numbers[l] == 0) l++; int b = 0; if(zero > 0) b = 1; if(zero == 4 && numbers.size()-b >= 1) return true; for(int i = l; i < numbers.size(); i ++) { int sum = 0; for(int j = i+1; (j <= i+4) && j < numbers.size(); j ++) { sum += numbers[j]-numbers[j-1]-1; if(sum <= zero && j-i+1+sum+zero-sum>=5) return true; } } return false; } };