《LeetCode力扣练习》第15题 C语言版 (做出来就行,别问我效率。。。。)

库你急哇,哈集美马戏特~~

一题二写,三数之和,题解四瞅五瞄六瞧,水平还七上八下九流,十分辣鸡。

十推九敲,八种思路,用光七情六欲五感,在这里四覆三翻二挠,一拳爆屏。

十赢九输,赢了八千,七百六十五万,打了四个三带二,爽的一批

一天两道,三月打卡,刷的四分五裂六离,现在是七零八落九散,十分难受。

一顿操作猛如虎,点击提交超时了。

二话不说翻题解,评论区里全人才。

反反复复终得道,再次尝试却报错。

——————————————————————————

来自力扣评论区的神评

题目难度还好,主要难在题目要求函数的参数列表中的参数,看不懂看不懂。。。。。

题目:
力扣官方题库

上代码(经过线上OJ测试)

#include 
#include 

int compareByIncrease(const void *a,const void *b)
{
    return *(int *)a-*(int *)b;
}


int** threeSum(int* nums, int numsSize, int* returnSize, int** returnColumnSizes){

    *returnSize=0;
    if(numsSize<3)
    {
        return NULL;
    }

    int cur=0;
    int low=cur+1;
    int high=numsSize-1;

    int **returnArray=(int **)malloc(sizeof(int *)*numsSize*numsSize);
    *returnColumnSizes=(int *)malloc(sizeof(int *)*numsSize*numsSize);

    qsort(nums,numsSize,sizeof(int),compareByIncrease);

    while((nums[cur]<=0)&&(cur+1<numsSize-1))
    {
        low=cur+1;
        high=numsSize-1;

        while(low<high)
        {
            if((nums[cur]+nums[low]+nums[high])==0)
            {
                returnArray[*returnSize]=(int *)malloc(sizeof(int)*3);
                (*returnColumnSizes)[*returnSize]=3;
                returnArray[*returnSize][0]=nums[cur];
                returnArray[*returnSize][1]=nums[low];
                returnArray[*returnSize][2]=nums[high];
                ++(*returnSize);

                low++;
                while(1)
                {
                    if((nums[low]==nums[low-1])&&(low<high))
                    {
                        low++;
                    }
                    else
                    {
                        break;
                    }
                }

                high--;
                while(1)
                {
                    if((nums[high]==nums[high+1])&&(low<high))
                    {
                        high--;
                    }
                    else
                    {
                        break;
                    }
                }
            }
            else if((nums[cur]+nums[low]+nums[high])>0)
            {
                --high;
            }
            else
            {
                ++low;
            }
        }
        cur++;
        while(1)
        {
            if((nums[cur]==nums[cur-1])&&(cur+1<numsSize-1))
            {
                cur++;
            }
            else
            {
                break;
            }
        }
    }
    return returnArray;
}


int main()
{
    return 0;
}


你可能感兴趣的:(LeetCode,leetcode,c语言)