版权声明:转载请说明出处,谢谢 https://blog.csdn.net/Asher117/article/details/89225165
【LeetCode】打卡–Python3算法16. 最接近的三数之和
题目
给定一个包括 n 个整数的数组 nums
和 一个目标值 target
。找出 nums
中的三个整数,使得它们的和与 target
最接近。返回这三个数的和。假定每组输入只存在唯一答案。
例如,给定数组 nums = [-1,2,1,-4], 和 target = 1. 与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2).
结果
执行用时 : 156 ms, 在3Sum Closest的Python3提交中击败了60.60% 的用户
内存消耗 : 13.2 MB, 在3Sum Closest的Python3提交中击败了24.37% 的用户
Python解答
如果使用暴力法,三重循环的话,会显示时间复杂度太高,不通过。
于是选择使用外层循环,加上里层双向指针,时间复杂度为O(N*N)
import math
class Solution:
def threeSumClosest(self, nums: List[int], target: int) -> int:
nums.sort()
data = math.inf
sumClosest = 0
for i in range(len(nums)-2):
j = i + 1
k = len(nums) - 1
while(j<k):
delta = nums[i] + nums[j] + nums[k] - target
if(delta==0):
return target
elif(abs(delta)>=data and delta>0):
k = k - 1
continue
elif(abs(delta)>=data and delta<0):
j = j + 1
continue
elif(abs(delta)<data and delta>0):
data = abs(delta)
sumClosest = nums[i] + nums[j] + nums[k]
k = k - 1
else:#(abs(delta)<data and delta<0)
data = abs(delta)
sumClosest = nums[i] + nums[j] + nums[k]
j = j + 1
return sumClosest
我们下次再见,如果还有下次的话!!!
欢迎关注微信公众号:516数据工作室