@@ -453,6 +453,54 @@ class Solution {
453453}
454454```
455455
456+ #### C
457+
458+ ``` c
459+ int cmp (const void* a, const void* b) {
460+ return * (int* ) a - * (int* ) b;
461+ }
462+
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);
468+
469+ qsort(nums, numsSize, sizeof(int), cmp);
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+ }
502+ ```
503+
456504<!-- tabs:end -->
457505
458506<!-- solution:end -->
0 commit comments