2
2
#include <stdlib.h>
3
3
#include <string.h>
4
4
5
+
5
6
static int compare (const void * a , const void * b )
6
7
{
7
8
return * (int * ) a - * (int * ) b ;
8
9
}
9
10
10
11
static void k_sum (int * nums , int low , int high , int target , int total , int k ,
11
- int * stack , int len , int * * results , int * count , int * columnSizes )
12
+ int * stack , int len , int * * results , int * count , int * col_sizes )
12
13
{
13
14
int i ;
14
15
if (k == 2 ) {
@@ -23,7 +24,7 @@ static void k_sum(int *nums, int low, int high, int target, int total, int k,
23
24
stack [len ++ ] = nums [high ];
24
25
results [* count ] = malloc (total * sizeof (int ));
25
26
memcpy (results [* count ], stack , total * sizeof (int ));
26
- columnSizes [* count ] = total ;
27
+ col_sizes [* count ] = total ;
27
28
(* count )++ ;
28
29
len -= 2 ;
29
30
while (++ low < high && nums [low ] == nums [low - 1 ]) {}
@@ -34,19 +35,19 @@ static void k_sum(int *nums, int low, int high, int target, int total, int k,
34
35
/* k > 2 */
35
36
for (i = low ; i <= high - k + 1 ; i ++ ) {
36
37
if (i > low && nums [i ] == nums [i - 1 ]) continue ;
37
- stack [len ++ ] = nums [i ];
38
- k_sum (nums , i + 1 , high , target - nums [i ], 4 , k - 1 , stack , len , results , count , columnSizes );
39
- len -- ;
38
+ stack [len ] = nums [i ];
39
+ k_sum (nums , i + 1 , high , target - nums [i ], 4 , k - 1 , stack , len + 1 , results , count , col_sizes );
40
40
}
41
41
}
42
42
}
43
43
44
44
/**
45
45
* Return an array of arrays of size *returnSize.
46
46
* The sizes of the arrays are returned as *returnColumnSizes array.
47
- * Note: Both returned array and *columnSizes array must be malloced, assume caller calls free().
47
+ * Note: Both returned array and *returnColumnSizes array must be malloced, assume caller calls free().
48
48
*/
49
- int * * fourSum (int * nums , int numsSize , int target , int * returnSize , int * * returnColumnSizes ) {
49
+ int * * fourSum (int * nums , int numsSize , int target , int * returnSize , int * * returnColumnSizes )
50
+ {
50
51
* returnSize = 0 ;
51
52
int i , j , capacity = 50000 ;
52
53
int * * results = malloc (capacity * sizeof (int * ));
@@ -62,11 +63,11 @@ int** fourSum(int* nums, int numsSize, int target, int* returnSize, int** return
62
63
63
64
int main (void )
64
65
{
65
- int i , count ;
66
+ int i , count , target = 11 , * col_sizes ;
66
67
//int nums[] = { 1, 0, -1, 0, -2, 2 };
67
68
//int nums[] = { -3, -2, -1, 0, 0, 1, 2, 3 };
68
69
int nums [] = { 0 , 1 , 5 , 0 , 1 , 5 , 5 , -4 };
69
- int * * quadruplets = fourSum (nums , sizeof (nums ) / sizeof (* nums ), 11 , & count );
70
+ int * * quadruplets = fourSum (nums , sizeof (nums ) / sizeof (* nums ), target , & count , & col_sizes );
70
71
for (i = 0 ; i < count ; i ++ ) {
71
72
printf ("%d %d %d %d\n" , quadruplets [i ][0 ], quadruplets [i ][1 ], quadruplets [i ][2 ], quadruplets [i ][3 ]);
72
73
}
0 commit comments