LeetCode- 16. 最接近的三数之和 (Medium)python和c++实现
2018-11-15 19:33
1031 查看
给定一个包括 n 个整数的数组
nums和 一个目标值
target。找出
nums中的三个整数,使得它们的和与
target最接近。返回这三个数的和。假定每组输入只存在唯一答案。
例如,给定数组 nums = [-1,2,1,-4], 和 target = 1. 与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2).
这里参考的是15.三数之和,都是把先把i固定,用j和k去遍历剩余的数,比15.简单在于默认了每组只存在唯一答案,这样就不用考虑不重复的问题。这里比较难比较纠结的一点,就是对于这个res 的初始值,我将它初始化为了前三个数与target的差值,再加上一,这样就保证,至少后面的计算中有结果比res小。
python的实现:
[code]class Solution: def threeSumClosest(self, nums, target): """ :type nums: List[int] :type target: int :rtype: int """ # res=10 nums.sort() res=abs(nums[0]+nums[1]+nums[2]-target)+1 for i in range(len(nums)-2): j=i+1 k=len(nums)-1 while j<k: thesum = nums[i]+nums[j]+nums[k] result = abs(thesum-target) if result<res: res=result clostsum=thesum if thesum<target: j+=1 elif thesum>target: k-=1 else: return thesum return clostsum
c++实现: 耗时12ms,但是只战胜了55.41%的记录。
[code]class Solution { public: int threeSumClosest(vector<int>& nums, int target) { sort(nums.begin(),nums.end()); int len=nums.size(); int i,j,k,sum,dif,clostsum; int res=abs(nums[0]+nums[1]+nums[2]-target)+1; for(i=0;i<len-2;i++) { j=i+1; k=len-1; while(j<k){ sum=nums[i]+nums[j]+nums[k]; dif=abs(sum-target); if(dif<res){ clostsum=sum; res=dif; } if(sum<target) j++; else if(sum>target) k--; else return clostsum; } } return clostsum; } };
阅读更多
相关文章推荐
- [leetcode]55. Jump Game ,C++/PYTHON实现,medium难度
- [LeetCode] 003. Longest Substring Without Repeating Characters (Medium) (C++/Java/Python)
- [LeetCode] 024. Swap Nodes in Pairs (Medium) (C++/Python)
- [LeetCode] 015. 3Sum (Medium) (C++/Java/Python)
- LeetCode的medium题集合(C++实现)一
- LeetCode的medium题集合(C++实现)十二
- [leetcode]53. Maximum Subarray 最大连续子串python实现【medium】
- [LeetCode] 029. Divide Two Integers (Medium) (C++/Python)
- LeetCode的medium题集合(C++实现)五
- LeetCode的medium题集合(C++实现)十六
- [leetcode]41. First Missing Positive,C++/python实现,hard难度
- leetcode 16 最接近的三数之和
- [LeetCode]5 Longest Palindromic Substring(C++,Python实现)
- [LeetCode] 017. Letter Combinations of a Phone Number (Medium) (C++/Java/Python)
- [LeetCode] 031. Next Permutation (Medium) (C++/Python)
- LeetCode的medium题集合(C++实现)六
- LeetCode的medium题集合(C++实现)四
- LeetCode的medium题集合(C++实现)十四
- LeetCode的medium题集合(C++实现)三
- [LeetCode] 001. Two Sum (Medium) (C++/Java/Python)