LeetCode - 3Sum Closest
2017-03-23 21:10
239 查看
题目
输入一个数组和一个目标值target,返回数组中任意3个数的和最接近target的值。思路
和 3Sum 类似,每次先确定一个数的值,然后计算选出来的两个数和当前确定的数的和,进行比较,如果和目标值相同,则返回目标值,否则选取更接近的值作为结果值。继续计算,知道找到和目标值相同的值或者计算完毕。代码
public int threeSumClosest(int[] nums, int target) { int res = 0; if (nums == null || nums.length < 3) { return res; } ArrayList<Integer> list = new ArrayList<>(); f 4000 or (int i : nums) { list.add(i); } Collections.sort(list); // 初始化res为前三个数之和 res = list.get(0) + list.get(1) + list.get(2); for (int i = 0 ; i < nums.length - 2 ;) { // 当前计算的3个数的和 int sum = 0; // 从i后一个结点开始查找 int left = i + 1; int right = nums.length - 1; while (left < right) { sum = list.get(i) + list.get(left) + list.get(right); // 如果当前3个数的值更接近target if (Math.abs(sum - target) < Math.abs(res - target)) { res = sum; } // 如果找到的和目标相等,直接返回 if (sum == target) { return target; } else if (sum < target) { int num = list.get(left); while (num == list.get(left) && left < right) { left++; } } else { int num = list.get(right); while (num == list.get(right) && right > left) { right--; } } } // 跳过重复的 int num = list.get(i); // 注意判断顺序,如果颠倒了会抛出异常,应该先判断是否越界 while (i < nums.length && list.get(i) == num) { i++; } } return res; }
相关文章推荐
- 【leetcode】3Sum Closest
- LeetCode:3Sum Closest
- [LeetCode] 3Sum Closest
- LeetCode[16]: 3Sum Closest
- LeetCode:3Sum Closest
- [LeetCode]题解(python):016-3Sum Closest
- LeetCode(16)题解--3Sum Closest
- [Leetcode]3Sum Closest
- leetcode 日经贴,python code - 3sumClosest
- [Leetcode] 3Sum Closest
- [Leetcode] 16. 3Sum Closest
- [leetcode]16. 3Sum Closest
- LeetCode 016 3Sum Closest
- [LeetCode][Java] 3Sum Closest
- [LeetCode]016-3Sum-Closest
- 【Leetcode】3Sum Closest
- LeetCode 3Sum Closest
- LeetCode 3Sum Closest
- leetcode 57: 3Sum Closest
- Leetcode 刷题: 3Sum Closest