import java.util.Arrays; /** * Given an integer array, find a pair from it that their sum is closest to 0. * <p> * Created by kiyan on 6/3/16. */ public class TwoSumClosestPair { public int[] closest(int[] nums) { int closest = Integer.MAX_VALUE; int[] res = new int[2]; for (int i = 0; i < nums.length - 1; i++) { for (int j = i + 1; j < nums.length; j++) { int sum = nums[i] + nums[j]; if (Math.abs(sum) < closest) { closest = sum; res[0] = nums[i]; res[1] = nums[j]; } } } return res; } public int[] closestB(int[] nums) { if (nums == null || nums.length <= 1) return null; if (nums.length == 2) return new int[]{nums[0], nums[1]}; Arrays.sort(nums); int[] res = new int[2]; int i = 0; int j = nums.length - 1; int closest = Integer.MAX_VALUE; while (i < j) { int sum = nums[i] + nums[j]; if (Math.abs(sum) < closest) { closest = sum; res[0] = nums[i]; res[1] = nums[j]; } if (sum > 0) j--; else if (sum < 0) i++; else return res; } return res; } }