16. 3Sum Closest (python)
来源:互联网 发布:修改图片软件有哪些 编辑:程序博客网 时间:2024/05/16 09:10
Given an array S of n integers, find three integers in S such that the sum is closest to a given number, target.
Return the sum of the three integers. You may assume that each input would have exactly one solution.
For example, given array S = {-1 2 1 -4}, and target = 1.
The sum that is closest to the target is 2. (-1 + 2 + 1 = 2).
题意:在数组S中找到三个元素相加和最接近目标值,只有一组解,返回三元素的和
思路:类似于15的思路,做稍许改动,先任意取三元素和triple;记录和目标的差值diff
每次取一个数,在后续列表中找2sum满足三数之和最接近target,通过判断三数之和和目标的差值和diff大小,小于diff则将三数之和和差值赋值给triple和diff,然后再分析和小于移动左指针,大于移动右指针,直到遍历找到最接近的数
注意:不能先比较三数之和和目标值大小移动左右指针,遍历完才计算差值。而应该每次移动指针后都要计算差值,取差值最小的三数之和存储。
举例说明:若目标值为0,三数之和为-1,需要移动左指针,假设移动后此时三数之和为2,那么计算时就会比较2而不是1和目标的差值。因此要在移动指针后就要计算差值,-1是计算一次,2时计算一次。
Runtime: 122 ms
class Solution(object): def threeSumClosest(self, nums, target): if len(nums)<3: return [] nums=sorted(nums) triple=nums[0]+nums[1]+nums[-1] #三数最接近目标值之和 diff=abs(target-triple) for i in range(0,len(nums)-2): if nums[i]!=nums[i-1] or i==0: #去重 l,r=i+1,len(nums)-1 while l<r: s=nums[l]+nums[r]+nums[i] d=abs(s-target) #三数之和和目标值的偏差 if d<diff: diff=d triple=s if s==target: return target elif s<target: l+=1 else: r-=1 return triple
- 16. 3Sum Closest (python)
- 16. 3Sum Closest Leetcode Python
- [leetcode: Python]16. 3Sum Closest
- 【Leetcode】【python】3Sum Closest
- 16. 3Sum Closest
- 16. 3Sum Closest
- 16. 3Sum Closest
- 16. 3Sum Closest
- 16. 3Sum Closest
- 16. 3Sum Closest
- 16. 3Sum Closest
- 16. 3Sum Closest
- 16. 3Sum Closest
- 16. 3Sum Closest
- 16. 3Sum Closest
- 16. 3Sum Closest
- 16. 3Sum Closest
- 16. 3Sum Closest
- 【Java】随机生成不重复的字母数组
- Java面试常考题目之数据库
- 15. 3Sum (python)
- 二叉树按层遍历打印的算法(c/c++)
- 【多媒体之声音总结】
- 16. 3Sum Closest (python)
- HDU 1503Advanced Fruits 递推
- 分类(1):决策树与模型评估
- uC/OS-III Note
- 18. 4Sum (python)
- php中魔术变量解析
- Astar A*算法 最短路径算法
- word-wrap、white-space和word break的区别
- iOS开发小技巧汇总