LeetCode:3Sum Closest
2013-08-27 19:20
239 查看
前两个数遍历,最后一个数使用二分搜索。时间复杂度O(N*N*logN).
这题可能是我没想明白,边界条件没处理好,弄了半天。脑子不好使。
这题可能是我没想明白,边界条件没处理好,弄了半天。脑子不好使。
import java.util.Arrays; public class L3SumClosest { public static void main(String[] args) { L3SumClosest l = new L3SumClosest(); int[] num = new int[3]; num[0] = 0; num[1] = 1; num[2] = 2; int m = l.threeSumClosest(num, 0); System.out.println(m); } public int threeSumClosest(int[] num, int target) { Arrays.sort(num); int min = Integer.MAX_VALUE; int sum = 0; for (int i = 0; i < num.length - 1; i++) { for (int j = i + 1; j < num.length - 1; j++) { int s = num[i] + num[j]; int k = target - s; int index = Arrays.binarySearch(num, k); if (index > 0) { if (index > j) { return target; } else { int ss = s + num[j + 1]; if (Math.abs(ss - target) < min) { min = Math.abs(ss - target); sum = ss; } } } else { int ss; index = 0 - index - 1; if (index > j) { if (index == j + 1) { ss = s + num[index]; } else if (index == num.length) { ss = s + num[index - 1]; } else { int left = num[index - 1]; ss = s + left; int right = num[index]; int sss = s + right; if (Math.abs(ss - target) > Math.abs(sss - target)) { ss = sss; } } //System.out.println(ss); if (Math.abs(ss - target) < min) { min = Math.abs(ss - target); sum = ss; } } else { int sss = s + num[j + 1]; if (Math.abs(sss - target) < min) { min = Math.abs(sss - target); sum = sss; } } } } } return sum; } }
相关文章推荐
- LeetCode 3Sum Closest
- [Leetcode]3Sum Closest
- LeetCode题解——3Sum Closest
- leetcode - 3Sum Closest
- LeetCode(16) 3Sum Closest
- 2017-09-09 LeetCode_016 3Sum Closest
- leetcode[16]3Sum Closest
- [LeetCode] 16. 3Sum Closest
- LeetCode:3Sum Closest
- LeetCode Online Judge 题目C# 练习 - 3SUM Closest
- 【小熊刷题】3Sum Closest <Leetcode 16, Java>
- leetcode ----16. 3Sum Closest
- 【JAVA、C++】LeetCode 016 3Sum Closest
- leetcode-java-16. 3Sum Closest
- Leetcode 16. 3Sum Closest
- LeetCode 3Sum Closest
- [Leetcode 16, Medium] 3Sum Closest
- Leetcode 16[medium]--3Sum Closest
- Leetcode习题记录——3Sum Closest
- 【Leetcode】3Sum Closest