leetcode 659. Split Array into Consecutive Subsequences

来源:互联网 发布:针锋对决网络剧爱奇艺 编辑:程序博客网 时间:2024/05/17 22:15

原题:

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: TrueExplanation:You can split them into two consecutive subsequences : 1, 2, 33, 4, 5

Example 2:

Input: [1,2,3,3,4,4,5,5]Output: TrueExplanation:You can split them into two consecutive subsequences : 1, 2, 3, 4, 53, 4, 5

Example 3:

Input: [1,2,3,4,4,5]Output: False

Note:

  1. 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;}

就是构建几个桶一样,往里面扔数字,规则就是从后往前(时间顺序)。

最后检索有没有桶不够三个。

得出结论。

阅读全文
0 0
原创粉丝点击