一、环境说明
- 本文是 LeetCode 15题 : 三数之和,使用c语言实现。
- 快排+对撞指针。
- 测试环境:Visual Studio 2019。
二、代码展示
C
int cmp(const void *a,const void *b){
return *(int*)a > *(int*)b;
}
int** threeSum(int* nums, int numsSize, int* returnSize, int** returnColumnSizes) {
qsort(nums, numsSize, sizeof(int), cmp);
int** ans = (int**)malloc(sizeof(int*) * numsSize * (numsSize-1)/2);
*returnSize = 0;
*returnColumnSizes = (int*)malloc(sizeof(int) * numsSize * (numsSize-1)/2);
for (int i = 0; i < numsSize; ++i) {
if (nums[i] > 0) {
break;
}
if (i > 0 && nums[i] == nums[i - 1]) {
continue;
}
int left = i + 1, right = numsSize - 1;
while (left < right) {
int sum = nums[left] + nums[right] + nums[i];
if (sum == 0) {
ans[*returnSize] = (int*)malloc(sizeof(int) * 3);
(*returnColumnSizes)[*returnSize] = 3;
ans[*returnSize][0] = nums[i];
ans[*returnSize][1] = nums[left];
ans[*returnSize][2] = nums[right];
(*returnSize)++;
while ((left < right) && (nums[left] == nums[left+1