@@ -451,59 +451,50 @@ class Solution {
451
451
452
452
#### C
453
453
454
- ``` C
455
-
456
- int cmp (const void * a, const void * b) { return * (int * )a - * (int * )b; }
457
-
458
- int ** threeSum(int * nums, int numsSize, int * returnSize,
459
- int ** returnColumnSizes) {
460
- * returnSize = 0;
461
- int capacity = 100;
462
- int ** result = malloc(capacity * sizeof(int * ));
463
- int * colSizes = malloc(capacity * sizeof(int));
464
- qsort(nums, numsSize, sizeof(int), cmp);
465
-
466
- for (int i = 0; i < numsSize - 2; i++) {
467
- if (nums[ i] > 0)
468
- break;
469
- if (i > 0 && nums[ i] == nums[ i - 1] )
470
- continue;
471
-
472
- int j = i + 1, k = numsSize - 1;
473
- while (j < k) {
474
- int sum = nums[i] + nums[j] + nums[k];
475
- if (sum < 0) {
476
- j++;
477
- } else if (sum > 0) {
478
- k--;
479
- } else {
480
- if (*returnSize >= capacity) {
481
- capacity *= 2;
482
- result = realloc(result, capacity * sizeof(int *));
483
- colSizes = realloc(colSizes, capacity * sizeof(int));
484
- }
454
+ ``` c
455
+ int cmp (const void* a, const void* b) {
456
+ return * (int* ) a - * (int* ) b;
457
+ }
485
458
486
- result[*returnSize] = malloc(3 * sizeof(int));
487
- result[*returnSize][0] = nums[i];
488
- result[*returnSize][1] = nums[j];
489
- result[*returnSize][2] = nums[k];
490
- colSizes[*returnSize] = 3;
491
- (*returnSize)++;
492
-
493
- j++;
494
- k--;
495
- while (j < k && nums[j] == nums[j - 1])
496
- j++;
497
- while (j < k && nums[k] == nums[k + 1])
498
- k--;
499
- }
500
- }
501
- }
459
+ int** threeSum(int* nums, int numsSize, int* returnSize, int** returnColumnSizes) {
460
+ * returnSize = 0;
461
+ int cap = 1000;
462
+ int** ans = (int** ) malloc(sizeof(int* ) * cap);
463
+ * returnColumnSizes = (int* ) malloc(sizeof(int) * cap);
502
464
503
- * returnColumnSizes = colSizes;
504
- return result;
505
- }
465
+ qsort(nums, numsSize, sizeof(int), cmp);
506
466
467
+ for (int i = 0; i < numsSize - 2 && nums[i] <= 0; ++i) {
468
+ if (i > 0 && nums[i] == nums[i - 1]) continue;
469
+ int j = i + 1, k = numsSize - 1;
470
+ while (j < k) {
471
+ int sum = nums[i] + nums[j] + nums[k];
472
+ if (sum < 0) {
473
+ ++j;
474
+ } else if (sum > 0) {
475
+ --k;
476
+ } else {
477
+ if (*returnSize >= cap) {
478
+ cap *= 2;
479
+ ans = (int**) realloc(ans, sizeof(int*) * cap);
480
+ *returnColumnSizes = (int*) realloc(*returnColumnSizes, sizeof(int) * cap);
481
+ }
482
+ ans[*returnSize] = (int*) malloc(sizeof(int) * 3);
483
+ ans[*returnSize][0] = nums[i];
484
+ ans[*returnSize][1] = nums[j];
485
+ ans[*returnSize][2] = nums[k];
486
+ (*returnColumnSizes)[*returnSize] = 3;
487
+ (*returnSize)++;
488
+
489
+ ++j;
490
+ --k;
491
+ while (j < k && nums[j] == nums[j - 1]) ++j;
492
+ while (j < k && nums[k] == nums[k + 1]) --k;
493
+ }
494
+ }
495
+ }
496
+ return ans;
497
+ }
507
498
```
508
499
509
500
<!-- tabs:end -->
0 commit comments