16.3Sum Closest
来源:互联网 发布:russell tovey知乎 编辑:程序博客网 时间:2024/05/19 09:50
题目链接:3sum-closest
import java.util.Arrays;/** * * 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. * 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). * */public class ThreeSumClosest {//超时 static int threeSumClosest(int[] num, int target) { Arrays.sort(num); int left = 0; int right = num.length - 1; int minGap = Integer.MAX_VALUE; int closest = 0; while(right >= 2 ) { while(left < right - 1) { for (int mid = left + 1; mid < right; mid++) {int gap =Math.abs(num[left] + num[mid] + num[right] - target) ;if(gap < minGap) {closest = num[left] + num[mid] + num[right];minGap = gap;}} int preLeft = num[left]; while(left < right - 1 && num[left] == preLeft) left++; } left = 0; int preRight = num[right]; while(right >= 2 && num[right] == preRight)right --; } return closest; } //超时 static int threeSumClosest1(int[] num, int target) { Arrays.sort(num); int left = 0; int right = num.length - 1; int minGap = Integer.MAX_VALUE; int closest = 0; while(right >= 2 ) { while(left < right - 1) { boolean isFirst = true; int preGap = 0; for (int mid = left + 1; mid < right; mid++) {int gap =Math.abs(num[left] + num[mid] + num[right] - target) ;if(isFirst) {preGap = gap;isFirst = false;}if(gap > preGap) break;if(gap < minGap) {closest = num[left] + num[mid] + num[right];minGap = gap;}} int preLeft = num[left]; while(left < right - 1 && num[left] == preLeft) left++; } left = 0; int preRight = num[right]; while(right >= 2 && num[right] == preRight)right --; } return closest; } // accepted static int threeSumClosest2(int[] num, int target) { // 120 / 120 test cases passed.// Status: Accepted// Runtime: 278 ms// Submitted: 0 minutes ago Arrays.sort(num); int minGap = Integer.MAX_VALUE; int closest = 0; for(int left = 0; left < num.length - 2; left ++) { int mid = left + 1; int right = num.length - 1; while(mid < right) { int sum = num[left] + num[mid] + num[right]; if(Math.abs(sum - target) < minGap) { closest = sum; minGap = Math.abs(sum - target); } if(sum < target) mid++; else right --; } } return closest; }public static void main(String[] args) {System.out.println(threeSumClosest2(new int[]{43,75,-90,47,-49,72,17,-31,-68,-22,-21,-30,65,88,-75,23,97,-61,53,87,-3,33,20,51,-79,43,80,-9,34,-89,-7,93,43,55,-94,29,-32,-49,25,72,-6,35,53,63,6,-62,-96,-83,-73,66,-11,96,-90,-27,78,-51,79,35,-63,85,-82,-15,100,-82,1,-4,-41,-21,11,12,12,72,-82,-22,37,47,-18,61,60,55,22,-6,26,-60,-42,-92,68,45,-1,-26,5,-56,-1,73,92,-55,-20,-43,-56,-15,7,52,35,-90,63,41,-55,-58,46,-84,-92,17,-66,-23,96,-19,-44,77,67,-47,-48,99,51,-25,19,0,-13,-88,-10,-67,14,7,89,-69,-83,86,-70,-66,-38,-50,66,0,-67,-91,-65,83,42,70,-6,52,-21,-86,-87,-44,8,49,-76,86,-3,87,-32,81,-58,37,-55,19,-26,66,-89,-70,-69,37,0,19,-65,38,7,3,1,-96,96,-65,-52,66,5,-3,-87,-16,-96,57,-74,91,46,-79,0,-69,55,49,-96,80,83,73,56,22,58,-44,-40,-45,95,99,-97,-22,-33,-92,-51,62,20,70,90, 284}, 1));}}
0 0
- 15.3Sum &16.3Sum Closest
- [LeetCode]16.3Sum Closest
- LeetCode 16.3Sum Closest
- 16.3Sum Closest
- 16.3Sum Closest
- [leetcode] 16.3Sum Closest
- LeetCode-16.3Sum Closest
- Leetcode||16.3Sum Closest
- LeetCode 16.3Sum Closest
- 16.3Sum Closest
- LeetCode----- 16.3Sum Closest
- 16.3Sum Closest
- Algorithms—16.3Sum Closest
- [leetcode]16.3Sum Closest(Java实现)
- 【leetcode】16.3Sum Closest 方法总结
- leetcode 1|167.two sum 1|2 && 3.three sum && 16.3Sum Closest && 18. 4Sum
- 3 Sum & 3 Sum Closest
- 【Leetcode】3Sum Closest (Sum)
- 关于Java中对象的存储
- 区别存储过程中的硬解析和软解析
- Android 2D,3D处理
- session与cookie的区别与联系
- 【2015更新】修改Host文件,让你的Google跑起来 2015 Google hosts
- 16.3Sum Closest
- Math.random()
- FUN_SYS_GET_CALENDAR_WEEK(2)
- 第一章ASP.NET SignalR简介
- poj3301
- javaScript值BOM
- Android GPS
- Codeforces Round #296 (Div. 2) C. Glass Carving
- oracle 12c 学习之三 pdb 的可拔插测试