最接近的三数之和
Posted pigdragon
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了最接近的三数之和相关的知识,希望对你有一定的参考价值。
给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。
例如,给定数组 nums = [-1,2,1,-4], 和 target = 1.
与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2).
方法一:
解题思路:
最接近的三数之和其实和三数之和的解题思路是相同的,而且要更简单,因为不需要考虑重复组合的问题,采用的都是排序加双指针的做法
(1)针对排序,采用的是快速排序,我用的是C语言实现的,所以直接调用了C语言的qsort函数直接对数组进行排序,时间复杂度是O(NLOGN);
(2)按照升序排列之后,从数组头部开始,定住一个元素,nums[ii], 然后针对该元素,遍历他的所有可能性,在遍历他所有的可能性的时候
使用双指针,左指针left指向ii+1的位置,右指针right指向numsSize-1的位置,也就是数组的最后一个元素,然后开始遍历;
(3)针对该题的遍历原则是,将每次遍历得到的sum值与target比较,如果差值等于0, 则直接返回0;如果差值不等于0, 则比较abs(sum-target)
与abs(result-target)的值,如果发现abs(sum-target)较小, 则将新得到的sum赋给result, 接着开始比较sum与target的大小,如果sum较大,则
right--; 如果sum较小, 则left++,直接left>=right, 本轮循环结束。ii++,开始新的循环,直到,ii>= numsSize-2所有的循环结束。
代码实现如下:
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/3sum-closest
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
以上是关于最接近的三数之和的主要内容,如果未能解决你的问题,请参考以下文章