【leetcode】18. 四数之和

 

#define MAXLEN 50
int cmp(const void* a, const void* b){
    return *(int*)a - *(int*)b;
}
int** fourSum(int* nums, int numsSize, int target, int* returnSize, int** returnColumnSizes){
    int first=0, secend, left, right, temp;
    *returnSize=0;
    *returnColumnSizes=(int*)calloc(MAXLEN,sizeof(int));
    int** arr=(int**)calloc(MAXLEN,sizeof(int*));
    qsort(nums, numsSize, sizeof(int), cmp);
    while(first<numsSize-3 ){        
        secend=first+1;
        while (secend < numsSize - 2 ){        
            left = secend + 1; right = numsSize - 1;            
            while (left < right){
                temp = nums[first] + nums[secend] + nums[left] + nums[right];    
                if (temp == target){
                    arr[(*returnSize)]=(int*)calloc(4,sizeof(int));
                    arr[(*returnSize)][0]=nums[first];
                    arr[(*returnSize)][1]=nums[secend];
                    arr[(*returnSize)][2]=nums[left];
                    arr[(*returnSize)][3]=nums[right];
                    (*returnColumnSizes)[(*returnSize)++]=4;
                    while (nums[left] == nums[++left] && left < right);
                    while (nums[right] == nums[--right] && left < right);
                }
                else if (temp < target){
                    while (nums[left] == nums[++left] && left < right);
                }            
                else{
                    while (nums[right] == nums[--right] && left < right);
                }                    
            }
            while (nums[secend] == nums[++secend] && secend < numsSize - 2);
        }
        while (nums[first] == nums[++first] && first < numsSize - 3);
    }   
    return arr;
}

 

上一篇:Leetcode 589. N叉树的前序遍历(DAY 3)


下一篇:实现数组加一