企业门户网站案例,有什么wordpress,开创集团与百度,哪里找专业做网站的人16. 最接近的三数之和
题目描述
给你一个长度为 n 的整数数组 nums 和 一个目标值 target。请你从 nums 中选出三个整数#xff0c;使它们的和与 target 最接近。
返回这三个数的和。
假定每组输入只存在恰好一个解。
示例 1#xff1a;
输入#xff1a;nums [-1,2,1…16. 最接近的三数之和
题目描述
给你一个长度为 n 的整数数组 nums 和 一个目标值 target。请你从 nums 中选出三个整数使它们的和与 target 最接近。
返回这三个数的和。
假定每组输入只存在恰好一个解。
示例 1
输入nums [-1,2,1,-4], target 1输出2解释与 target 最接近的和是 2 (-1 2 1 2) 。
示例 2
输入nums [0,0,0], target 1输出0
提示
3 nums.length 1000-1000 nums[i] 1000-104 target 104
解题方法
排序双指针
C 语言
int my_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), my_cmp); // 排序int left 0, right 0; // 定义双指针int min INT_MAX / 10;for (int i 0; i numsSize; i) {if (i 0 nums[i] nums[i - 1]) // 跳过重复元素{continue;}left i 1;right numsSize - 1;while (left right) {int sum nums[i] nums[left] nums[right];if (sum target) {left; // 移动左指针使和增大} else if (sum target) {right--; // 移动右指针使和减小} else {return sum; // 相等直接返回}if (abs(sum - target) abs(min - target)) {min sum; // 保存最接近的和}}}return min;
}