LeetCode16 3Sum Closest
2017-12-22 20:34
429 查看
LeetCode16题:求取一个数组中,三个数字之和与所给target最接近。
给定的数组为nums,目标值为target
解题思路:
1、首先判断nums个数是否大于三个;若<=3,返回三个数的和即可,否则对nums排序;
2、nums数字大于三个时。首先初始化result为前两个值和最后一个值的和。
3、遍历其中所有的值,并从两边(left、right)向中间靠近。将其三个数的值sum,如果sum大于target,则right减小(因为加的大了),sum小于时,则left增加(sum加的小了),如此循环并更新最近的值result。
给定的数组为nums,目标值为target
解题思路:
1、首先判断nums个数是否大于三个;若<=3,返回三个数的和即可,否则对nums排序;
2、nums数字大于三个时。首先初始化result为前两个值和最后一个值的和。
3、遍历其中所有的值,并从两边(left、right)向中间靠近。将其三个数的值sum,如果sum大于target,则right减小(因为加的大了),sum小于时,则left增加(sum加的小了),如此循环并更新最近的值result。
package Array; import java.util.Arrays; /** * Created by AllenLee on 2017/12/22. */ public class ThreeSumClosest { public int threeSumClosest(int[] nums, int target) { int result = 0; if (nums.length <= 3) { for (int num : nums) { result += num; } return result; } result = nums[0] + nums[1] + nums[nums.length - 1]; Arrays.sort(nums); for (int i = 0; i < nums.length - 2; i++) { int left = i + 1, right = nums.length - 1; while (left < right) { int sum = nums[i] + nums[left] + nums[right]; if (sum > target) right--; else left++; if (Math.abs(sum - target) < Math.abs(result - target)) result = sum; } } return result; } }
相关文章推荐
- LeetCode[16]: 3Sum Closest
- [LeetCode] 16. 3Sum Closest
- LeetCode 16 3Sum Closest
- [Leetcode 16, Medium] 3Sum Closest
- Leetcode 16 - 3Sum Closest
- [LeetCode] 16. 3Sum Closest
- LeetCode_OJ【16】3Sum Closest
- [LeetCode] 16. 3Sum Closest
- Leetcode--16. 3Sum Closest
- leetcode (16) - 3Sum Closest
- leetcode: 16. 3Sum Closest
- LeetCode(16)--3Sum Closest
- 【小熊刷题】3Sum Closest <Leetcode 16, Java>
- leetcode question 16: 3Sum Closest
- Java [leetcode 16] 3Sum Closest
- LeetCode(16) 3Sum Closest
- leetcode-16 3Sum Closest
- LeetCode-16-3Sum-Closest 贪心
- LeetCode16——3Sum Closest
- [Leetcode] 16 - 3Sum Closest