【leetcode】16. 3Sum Closest(Medium)(JAVA)

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) {
		int i, sum = 0, valueclosest = 0, d = Integer.MAX_VALUE;
		int base, l, r;
		//d是distane,表示sum和target之间的距离
		
		//如果数组长度小于等于3,直接返回加和结果
		if (nums.length <= 3) {
			for (i = 0; i < nums.length; i++)
				sum += nums[i];
			return sum;
		}
		
		Arrays.sort(nums);
		for (base = 0; base < nums.length - 2; base++) {
			if (base > 0)  //避免访问nums[-1]
				if (nums[base] == nums[base - 1])
					continue;
			l = base + 1;
			r = nums.length - 1;
			while (l < r) {
				sum = nums[base] + nums[l] + nums[r];
				// 更新最小距离
				if (Math.abs(sum - target) < d) {
					d = Math.abs(sum - target);
					valueclosest = sum;
				}
				if (sum == target)
					return valueclosest;
				else if (sum < target)
					l++;
				else
					r--;
			}
		}
		return valueclosest;
	}
}

运行结果:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/AXIMI/article/details/83007458