[leetcode] 16. 3Sum Closest
2016-01-13 11:13
375 查看
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.
这道题是找出数组中三个数相加最接近给定值的相加和,题目难度为Medium。
这道题基本和第15题一样,解题思路请查看第15题(传送门)的详解。不同的地方是需要记录下当前最接近给定值的相加和,每次进行判断取最接近的替换记录值。具体代码:
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).
这道题是找出数组中三个数相加最接近给定值的相加和,题目难度为Medium。
这道题基本和第15题一样,解题思路请查看第15题(传送门)的详解。不同的地方是需要记录下当前最接近给定值的相加和,每次进行判断取最接近的替换记录值。具体代码:
class Solution { public: int threeSumClosest(vector<int> &num, int target) { int rst = 0; if(num.size() < 3) return 0; sort(num.begin(), num.end()); rst = num[0] + num[1] + num[2]; for(int i=0; i<num.size()-2; i++) { if(i > 0 && num[i] == num[i-1]) continue; for(int j=i+1, k=num.size()-1; j<k;) { int sum = num[i] + num[j] + num[k]; if(abs(sum-target) < abs(rst-target)) rst = sum; if(sum < target) { do {j++;} while(num[j] == num[j-1] && j < k); } else if(sum > target) { do {k--;} while(num[k] == num[k+1] && j < k); } else { return target; } } } return rst; } };
相关文章推荐
- leetcode 179 Largest Number
- leetcode 24 Swap Nodes in Pairs
- leetcode 2 Add Two Numbers 方法1
- leetcode 2 Add Two Numbers 方法2
- leetcode----Longest Substring Without Repeating Characters
- [LeetCode]47 Permutations II
- [LeetCode]65 Valid Number
- [LeetCode]123 Best Time to Buy and Sell Stock III
- [LeetCode] String Reorder Distance Apart
- [LeetCode] Sliding Window Maximum
- [LeetCode] Find the k-th Smallest Element in the Union of Two Sorted Arrays
- [LeetCode] Determine If Two Rectangles Overlap
- [LeetCode] A Distance Maximizing Problem
- leetcode_linearList
- leetcode_linearList02
- 021-Merge Two Sorted Lists(合并两个排好序的单链表);leetcode
- LeetCode[Day 1] Two Sum 题解
- LeetCode[Day 2] Median of Two Sorted Arrays 题解
- LeetCode[Day 3] Longest Substring Without... 题解
- LeetCode [Day 4] Add Two Numbers 题解