题目:最接近的三数之和
给定一个包括 n 个整数的数组 nums
和 一个目标值 target
。找出 nums
中的三个整数,使得它们的和与 target
最接近。返回这三个数的和。假定每组输入只存在唯一答案。
1 | 例如,给定数组 nums = [-1,2,1,-4], 和 target = 1. |
思路
这题和之前的三数之和类似,在遍历是比较保留与target最近接的值即可。
- 使用sort()方法进行排序,如果长度小于3直接返回sum(nums)
- 初始化三数之和为
out_sum=None
- 依次取i为第0到len(nums)-2个数作为第一个数num1
- 为了防止重复,如果i不是0的情况下,当前num1与上一轮的num1相同则跳过
- 初始化第2个数的index为l,第三个数的index为r=len(nums)-1
- 在确保l<r的情况下开始移动
- 如果
out_sum
为None,即第一次遍历,或者out_sum与target的距离比当前三数之和temp_sum大,则将temp_sum赋值给out_sum - 如果当前三数之和等于target:直接返回,必定是最接近target的值
- 如果当前三数之和大于target:r向左移动
- 如果当前三数之和小于target:l向右移动
- 如果
实现:
1 | class Solution: |
如果大家有更好的方法,欢迎一起探讨。