题目
给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。
例如,给定数组 nums = [-1,2,1,-4], 和 target = 1.
与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2).
解题思路
1. 将数组排序 时间复杂度是O(nlogn)
2. 利用三个指针对数组进行遍历与target比较, 找出最接近的三个数
3. 对于指针,一个是固定的i, 一个是start-> i+1, 一个是end->length-1
4. min_value = nums[0] + nums[1] + nums[2]
5. temp = nums[i] + nums[start] + nums[end]
6. 比较abs(target - min_value)和abs(target - temp)
7. 然后比较target和temp
8. 当end<=start时,退出循环
9. 开始利用i遍历数组, 直到i遍历结束,整个结束
10. 2~9的时间复杂度是O(n^2)
所以总的时间复杂度是O(n^2).若使用暴力法,则是O(n^3)
代码
class Solution(object):
def threeSumClosest(self, nums, target):
nums.sort()
n = len(nums)
min_value = nums[0] +nums[1] + nums[2]
for i in range(n):
start = i+1
end = n-1
while start < end:
temp = nums[i] + nums[start] +nums[end]
if abs(target - temp) < abs(target - min_value):
min_value = temp
if temp < target:
start += 1
elif temp > target:
end -=1
else:
return min_value
return min_value
网友评论