原题:
You are given an integer array sorted in ascending order (may contain duplicates), you need to split them into several subsequences, where each subsequences consist of at least 3 consecutive integers. Return whether you can make such a split.
Example 1:
Input: [1,2,3,3,4,5] Output: True Explanation: You can split them into two consecutive subsequences : 1, 2, 3 3, 4, 5
Example 2:
Input: [1,2,3,3,4,4,5,5] Output: True Explanation: You can split them into two consecutive subsequences : 1, 2, 3, 4, 5 3, 4, 5
Example 3:
Input: [1,2,3,4,4,5] Output: False
Note:
- The length of the input is in range of [1, 10000]
代码如下:
bool isPossible(int* nums, int numsSize) {
if(numsSize<3)
return false;
struct listnode
{
int lastnum;
int count;
};
struct listnode* test;
test=(struct listnode*)malloc(sizeof(struct listnode)*20000);
int amount=0;
for(int n=0;n<numsSize;n++)
{
int flag=1;
for(int m=amount-1;m>=0;m--)
{
if((test+m)->lastnum==(*(nums+n)-1))
{
flag=0;
(test+m)->lastnum+=1;
(test+m)->count+=1;
break;
}
}
if(flag==1)
{
(test+amount)->lastnum=*(nums+n);
(test+amount)->count=1;
amount++;
}
}
for(int n=0;n<amount;n++)
{
//printf("F%d",(test+n)->count);
if((test+n)->count<3)
return false;
}
return true;
}
就是构建几个桶一样,往里面扔数字,规则就是从后往前(时间顺序)。
最后检索有没有桶不够三个。
得出结论。