16. 3Sum Closest
来源:互联网 发布:上海淘宝厂家 编辑:程序博客网 时间:2024/06/08 10:06
思路:
先任意取三元素和res;记录和目标的差值diff
每次取一个数,在后续列表中找2个元素,满足三数之和最接近target,通过判断三数之和和目标的差值和diff大小,小于diff则将三数之和和差值赋值给res和diff,然后再分析和小于移动左指针,大于移动右指针,直到遍历找到最接近的数
Python:
class Solution(object): def threeSumClosest(self, nums, target): """ :type nums: List[int] :type target: int :rtype: int """ if len(nums) < 3: return [] nums.sort() #先任意取三元素和triple;记录和目标的差值diff res = nums[0] + nums[1] + nums[2] diff = abs(target - res) for i in range(0,len(nums)-2): if nums[i] != nums[i-1] or i == 0: l = i + 1 r = len(nums) - 1 while l < r: s = nums[i] + nums[l] + nums[r] d = abs(target - s) #每次都计算差值 if d < diff: diff = d res = s if s == target: return target elif s < target: l += 1 else: r -= 1 return res
C++:
class Solution {public: int threeSumClosest(vector<int>& nums, int target) { if (nums.size() < 3){ return 0; } sort(nums.begin(),nums.end()); int res = nums[0] + nums[1] + nums[2]; int diff = abs(target - res); for (int i = 0; i < nums.size()-2;++i){ if (nums[i] == nums[i-1] && i > 0){ continue; } int left = i + 1; int right = nums.size() - 1; while(left < right){ int s = nums[i] + nums[left] + nums[right]; int d = abs(target - s); if (d < diff){ diff = d; res = s; } if(s == target){ return target; } else if (s < target){ left ++; } else{ right --; } } } return res; }};
阅读全文
0 0
- 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
- 16. 3Sum Closest
- 16. 3Sum Closest
- 16. 3Sum Closest
- 16. 3Sum Closest
- PAT a1048题解
- 安卓性能优化之布局优化(一)
- Matlab绘制三维曲线(plot3)和三维图形(mesh & surf)
- [leetcode]30. Substring with Concatenation of All Words@Java
- Python基础——read(),readline(),readlines()的区别
- 16. 3Sum Closest
- 电脑无线网络固定IP设置方法
- PAT a1049题解
- CSS学习--CSS属性书写顺序和命名规则
- 初涉Linux(无代码)
- 机器学习实战_初识kNN算法_理解其python代码
- PAT a1050题解
- ‘XXXX’ was compiled with optimization
- Matlab常用概率密度函数、累计概率分布函数及其逆函数