【LeetCode】3Sum Closest
2013-10-27 10:48
471 查看
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.
java code : 复杂度 O(n^2 logn) 最内层用二分查找
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).
java code : 复杂度 O(n^2 logn) 最内层用二分查找
public class Solution { public int threeSumClosest(int[] num, int target) { // Note: The Solution object is instantiated only once and is reused by each test case. if(num.length < 3) return 0; Arrays.sort(num); int sum = num[0] + num[1] + num[2]; int dist = Math.abs((num[0] + num[1] + num[2] - target)); if(dist == 0) return sum; for(int i = 0; i < num.length - 2; i++) { for(int j = i + 1; j < num.length -1; j++) { int val = target - num[i] - num[j]; int index = binarysearch(num, val, j+1, num.length - 1); if(num[index] == val) return target; else { int sum1 = num[i] + num[j] + num[index]; int dist1 = Math.abs((target - sum1)); if(dist1 < dist) { sum = sum1; dist = dist1; } if(index < num.length -1) { int sum2 = num[i] + num[j] + num[index + 1]; int dist2 = Math.abs((target - sum2)); if(dist2 < dist) { sum = sum2; dist = dist2; } } } } } return sum; } public int binarysearch(int[] array, int key, int st, int end) { int lhs = st, rhs = end; if(st == end) return st; while(lhs <= rhs) { int mid = (lhs + rhs) >> 1; if(array[mid] == key) return mid; else if(array[mid] < key) lhs = mid + 1; else rhs = mid - 1; } if(rhs < st) return st; return rhs; } }
相关文章推荐
- leetcode 16. 3Sum Closest
- 【C++】【LeetCode】15. 3Sum & 16. 3Sum Closest & 18. 4Sum
- [Leetcode]_16 3Sum Closest
- [leetcode] 3Sum Closest
- LeetCode解题报告—— Container With Most Water & 3Sum Closest & Letter Combinations of a Phone Number
- 【leetcode】3Sum Closest
- Leetcode16. 3Sum Closest
- LeetCode 3Sum Closest
- LeetCode 3Sum Closest
- leetcode --3Sum Closest
- LeetCode——3Sum Closest
- 【LeetCode】16. 3Sum Closest
- leetcode 15. 3sum && 16. 3Sum Closest && 18. 4Sum
- LeetCode 16. 3Sum Closest
- Leetcode_3Sum Closest
- [LeetCode16]3Sum Closest
- leetcode题解-16. 3Sum Closest
- 3Sum Closest[leetcode]
- [leetcode]16. 3Sum Closest
- [leetcode 15] 3sum && [leetcode 16] 3sum closest