leetCode 16.3Sum Closest (离给定值最近的三数之和) 解题思路和方法

3Sum Closest

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).

思路:这题和上一题3Sum一脉相承,只是变形了。所以此题整体解法上参考上题,细节上略作修改。

详细代码和注释如下。

public class Solution {
    public int threeSumClosest(int[] nums, int target) {
        if(nums.length <= 2)
            return 0;

        int min = Integer.MAX_VALUE;//设初始值为最大
        int j,k,m,result = 0;
        Arrays.sort(nums);//排序
        for(int i = 0 ; i < nums.length - 1; i++){
            //如果数字和之前的数字相同,跳过
            if(i > 0 && nums[i] == nums[i-1]){
        		continue;
        	}
        	j = i+1;//初始值
        	k = nums.length -1;
        	while(j < k){
        	    m = nums[i] + nums[j] + nums[k];
        	    //更靠近target
        	    if(Math.abs(m - target) < min){
        	        min = Math.abs(m - target);//数据更新
        	        result = m;
        	        if(min == 0)//==0,找到目标值,没有比这更小的
        	        	return result;
        	        else{//如果没有达到0,则分情况标志位置变动
            	    	if(m - target < 0){//小于0左边+1
            	    		j++;
            	    		//消除重复的数字
                    	    while(j < k && nums[j] == nums[j-1]){
                    	        j++;
                    	    }
            	    	}
            	    	else{//大于0则右边位置减1
            	    		k--;
            	    		//消除重复值
            	    		while(j < k && nums[k] == nums[k+1]){
                    	        k--;
                    	    }
            	    	}
        	        }
        	    }//如果距离不比min更近,则直接分情况移动标记位置
        	    else{
        	    	if(m - target < 0)
        	    		j++;
        	    	else
        	    		k--;
    	        }
        	}
        }
        return result;
    }
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-14 15:02:00

leetCode 16.3Sum Closest (离给定值最近的三数之和) 解题思路和方法的相关文章

Leetcode 16. 3Sum Closest(指针搜索)

16. 3Sum Closest Medium 131696FavoriteShare 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 e

[LeetCode] 16. 3Sum Closest 最近三数之和

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

LeetCode第十六题-找出数组中三数之和最接近目标值的答案

3Sum Closest 问题简介: 给定n个整数的数组nums和整数目标,在nums中找到三个整数,使得总和最接近目标,返回三个整数的总和,可以假设每个输入都只有一个解决方案 举例: 给定数组:nums=[-1, 2, 1, -4], 目标值:target = 1. 最接近目标值的答案是2 (-1 + 2 + 1 = 2). 解法一: 与上一道题类似,这次要求的是三数之和与目标值的差值最小值,可以定义一个变量来记录这个差值 思路就是想先定义一个最接近的值默认取前三个数的合,然后将数组排序后 小

Java [leetcode 16] 3Sum Closest

题目描述: 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 =

Array + two points leetcode.16 - 3Sum Closest

题面 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. 给定数组,找出并返回最接近target的

LeetCode 16 3Sum Closest(C,C++,Java,Python)

Problem: 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

LeetCode #16 3Sum Closest (M)

[Problem] 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

LeetCode 16 3sum closest

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

[leetcode]16. 3Sum Closest最接近的三数之和

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 nu