LeetCode2

题目:找出数组中的所有三元组a,b,c使得a+b+c = 0,所有的三元组不能重复

提供一个复杂度O(n2)的代码,复杂度为O(n3)会超时。

 1 int cmp(const void *a, const void *b){
 2     return *((int*)a) - *((int*)b);
 3 }
 4 
 5 int** threeSum(int* nums, int numsSize, int* returnSize) {
 6     int i,j,k;
 7     int **results = (int**)malloc(sizeof(int*)*100000);
 8     int temp[3];
 9     *returnSize = 0;
10     qsort(nums, numsSize, sizeof(int), cmp);
11     for(i=0; i<numsSize; i++){
12         j = i+1; k = numsSize-1;
13         while(j<k){
14             if(nums[j]+nums[k]<-nums[i])
15                 j++;
16             else if(nums[j]+nums[k]>-nums[i])
17                 k--;
18             else{
19                 results[*returnSize] = (int*)malloc(sizeof(int)*3);
20                 results[*returnSize][0] = nums[i];
21                 results[*returnSize][1] = nums[j];
22                 results[*returnSize][2] = nums[k];
23                 do{j++; }while(j<k && nums[j] == results[*returnSize][1]);
24                 do{k--; }while(j<k && nums[k] == results[*returnSize][2]);
25                 (*returnSize)++;
26             }
27         }
28         do{i++; }while(i<numsSize && nums[i]==nums[i-1]);
29         i--;
30     }
31     return results;    
32 }
原文地址:https://www.cnblogs.com/lwyeah/p/8858502.html