特判:如果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;
}
};
京公网安备 11010502036488号