1. 程式人生 > >【LeetCode】#16最接近的三數之和(3Sum Closest)

【LeetCode】#16最接近的三數之和(3Sum Closest)

【LeetCode】#16最接近的三數之和(3Sum Closest)

題目描述

給定一個包括 n 個整數的陣列 nums 和 一個目標值 target。找出 nums 中的三個整數,使得它們的和與 target 最接近。返回這三個數的和。假定每組輸入只存在唯一答案。

示例

例如,給定陣列 nums = [-1,2,1,-4], 和 target = 1.
與 target 最接近的三個數的和為 2. (-1 + 2 + 1 = 2).

Description

Given an array nums of n integers and an integer target, find three integers in nums such that the sum is closest to target. Return the sum of the three integers. You may assume that each input would have exactly one solution.

Example

Given array nums = [-1, 2, 1, -4], and target = 1.
The sum that is closest to the target is 2. (-1 + 2 + 1 = 2).

解法

class Solution{
	public int threeSumClosest(int[] nums, int target){
		Arrays.sort(nums);
		int closestNum = nums[0] + nums[1] + nums[2];
		for(int i=0; i<nums.length; i++){
			int j=i+1, k=nums.length-1;
			while(j<k){
				int threeSum = nums[i] + nums[j] + nums[k];
				if(Math.abs(threeSum-target)<Math.abs(closestNum-target))
					closestNum = threeSum;
				if(threeSum>target)
					k--;
				else if(threeSum<target)
					j++;
				else
					return target;
			}
		}
		return closestNum;
	}
}