【一天一道LeetCode】#16. 3Sum Closest
来源:互联网 发布:石家庄优化公司 编辑:程序博客网 时间:2024/05/15 23:44
一天一道LeetCode系列
(一)题目:
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).
(二)解题
直接用三重循环,然后考虑到重复的数字,则需要先排序,以便于后续去重。
其次,当等于target时,则直接返回
class Solution {public: int threeSumClosest(vector<int>& nums, int target) { int min = 2147438647; int key =0; std::sort(nums.begin() , nums.end()); for(int i = 0 ; i < nums.size()-2 ; ) { for(int j = i+1 ; j < nums.size()-1 ;) { for(int k = j+1 ; k < nums.size() ; ) { int gap = nums[i]+nums[j]+nums[k]; int temp = gap-target>0?gap-target:target-gap; if(temp<min){ min = temp; key = gap; if(min ==0) //如果找到等于0的则返回 { return key; } } k++; while(k<nums.size() && nums[k] == nums[k-1]) ++k; } j++; while(j<nums.size()-1 && nums[j] == nums[j-1]) ++j; } i++; while(i<nums.size()-2 && nums[i] == nums[i-1]) ++i; } return key; }};
在网上看到另外一种快速的解法。O(n^2)
class Solution {public: int threeSumClosest(vector<int>& nums, int target) { std::sort(nums.begin() , nums.end()); bool isfirst = true; int ret; for(int i = 0 ; i < nums.size() ; i++) { int j = i+1; int k = nums.size()-1; while(j<k){ int sum = nums[i]+nums[j]+nums[k]; if(isfirst) { ret = sum; isfirst = false; } else { if(abs(sum - target) < abs(ret - target)) { ret = sum; } } if(ret == target) return ret; if(sum>target) k--; else j++; } } return ret; }};
0 0
- 【一天一道LeetCode】#16. 3Sum Closest
- LeetCode 16. 3Sum Closest
- LeetCode --- 16. 3Sum Closest
- [Leetcode] 16. 3Sum Closest
- 【leetcode】16. 3Sum Closest
- [leetcode] 16. 3Sum Closest
- leetcode 16. 3Sum Closest
- leetcode 16. 3Sum Closest
- leetcode 16. 3Sum Closest
- LeetCode - 16. 3Sum Closest
- [LeetCode]16. 3Sum Closest
- LeetCode 16. 3Sum Closest
- LeetCode *** 16. 3Sum Closest
- Leetcode 16. 3Sum Closest
- leetcode 16. 3Sum Closest
- 【LeetCode】16. 3Sum Closest
- leetcode 16. 3Sum Closest
- 【leetcode】16. 3Sum Closest
- 系统环境需求及注意事项: DedeCMS
- hdu4411--最小费用最大流
- CodeForces 164C Machine Programming(费用流)
- 拍照识别小工具
- 【opencv】goodFeaturesToTrack源码分析-2-Shi-Tomasi角点检测
- 【一天一道LeetCode】#16. 3Sum Closest
- sleep和wait的区别
- 学习笔记:The Log(我所读过的最好的一篇分布式技术文章)
- 数据结构与算法简介
- View的事件体系
- zzulioj--10465--最长匹配子串(栈模拟)
- 10倍效率的程序员的好习惯,你有几个?
- SSL 1230 战略游戏 树形dp
- Odd Even Linked List