1. 题目原址
https://leetcode.com/problems/3sum-closest/
2. 题目描述
3. 题目大意
给定一个一维数组和一个目标值,返回和最接近目标值的和。
4. 解题思路
二分法来做。
- 先将一维数组排序
- 然后第一个元素+最后一个元素+中间元素的和与目标值进行比较。按照比较结果继续遍历。
5. AC代码
class Solution {
public int threeSumClosest(int[] nums, int target) {
int sum = nums[0] + nums[1] + nums[nums.length - 1];
int min = sum - target;
Arrays.sort(nums);
for(int left = 0; left < nums.length; left ++) {
int right = nums.length - 1;
int medium = left + 1;
while(medium < right) {
sum = nums[left] + nums[medium] + nums[right];
if(Math.abs(sum - target) < Math.abs(min)) {
min = sum - target;
}
if(sum == target)
return sum;
else if(sum < target)
medium ++;
else
right --;
}
}
return min + target;
}
}
6. 相似题型
【1】 1. Two Sum 题目原址:https://leetcode.com/problems/two-sum/
【2】 15. 3Sum 题目原址: https://leetcode.com/problems/3sum/
【3】 18. 4Sum 题目原址: https://leetcode.com/problems/4sum/
【4】167. Two Sum II - Input array is sorted 题目原址: https://leetcode.com/problems/two-sum-ii-input-array-is-sorted/
【5】 560. Subarray Sum Equals K 题目原址:https://leetcode.com/problems/subarray-sum-equals-k/
【6】 653. Two Sum IV - Input is a BST 题目原址:https://leetcode.com/problems/two-sum-iv-input-is-a-bst/
【7】 16. 3Sum Closest 题目原址: https://leetcode.com/problems/3sum-closest/