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