最接近的三数之和C语言
时间: 2023-07-24 14:06:55 浏览: 44
以下是最接近的三数之和的C语言代码:
```c
#include <stdio.h>
#include <stdlib.h>
int cmp(const void *a, const void *b) {
return *(int *)a - *(int *)b;
}
int threeSumClosest(int* nums, int numsSize, int target) {
qsort(nums, numsSize, sizeof(int), cmp); // 排序
int closest = nums[0] + nums[1] + nums[2];
for (int i = 0; i < numsSize - 2; ++i) {
int left = i + 1, right = numsSize - 1;
while (left < right) {
int sum = nums[i] + nums[left] + nums[right];
if (abs(target - sum) < abs(target - closest)) {
closest = sum;
}
if (sum > target) {
--right;
} else if (sum < target) {
++left;
} else {
return target;
}
}
}
return closest;
}
int main() {
int nums[] = {-1, 2, 1, -4};
int numsSize = sizeof(nums) / sizeof(nums[0]);
int target = 1;
printf("%d\n", threeSumClosest(nums, numsSize, target));
return 0;
}
```
该算法的时间复杂度为 O(n^2),其中 n 为数组的长度。