LeetCode:16.3Sum Closest 最接近的三数之和(C语言)

题目描述:
给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。

例如,给定数组 nums = [-1,2,1,-4], 和 target = 1.

与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2).
解答:

  1. int comp(const void *a, const void *b)
  2. {
  3. return *(int*)a - *(int*)b;
  4. }
  5. int threeSumClosest(int* nums, int numsSize, int target)
  6. {
  7. int sum = 0;
  8. int i = 0;
  9. int ans = 0;
  10. int start = 0;
  11. int end = 0;
  12. qsort(nums, numsSize, sizeof(int), comp); //从小到大排序
  13. ans = nums[0] + nums[1] + nums[2];
  14. for(i = 0;i < numsSize; i++)
  15. {
  16. start = i + 1;
  17. end = numsSize - 1;
  18. while(start < end)
  19. {
  20. sum = nums[start] + nums[i] + nums[end];
  21. //判断距离
  22. if(abs(target - sum) < abs(target - ans))
  23. {
  24. ans = sum;
  25. }
  26. if(sum > target)
  27. {
  28. end--;
  29. }
  30. else if(sum < target)
  31. {
  32. start++;
  33. }
  34. else
  35. {
  36. return ans;
  37. }
  38. }
  39. }
  40. return ans;
  41. }

运行结果:
在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,94人围观)

还没有评论,来说两句吧...

相关阅读