Leetcode刷题100天—16. 最接近的三数之和( 排序)—day30

Posted 神的孩子都在歌唱

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leetcode刷题100天—16. 最接近的三数之和( 排序)—day30相关的知识,希望对你有一定的参考价值。

前言:

作者:神的孩子在歌唱

大家好,我叫运智

16. 最接近的三数之和

难度中等874收藏分享切换为英文接收动态反馈

给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。

示例:

输入:nums = [-1,2,1,-4], target = 1
输出:2
解释:与 target 最接近的和是 2 (-1 + 2 + 1 = 2) 。

提示:

  • 3 <= nums.length <= 10^3
  • -10^3 <= nums[i] <= 10^3
  • -10^4 <= target <= 10^4
package 排序;

import java.util.Arrays;

import javax.imageio.ImageTypeSpecifier;

public class _16_最接近的三数之和 {
    public static int threeSumClosest(int[] nums, int target) {
//    	一言不和先排序
    	Arrays.sort(nums);
//    	定义返回数
    	int ans=nums[0]+nums[1]+nums[2];
//    	定义指针
    	int left=0,right=nums.length-1;
    	if (nums.length<=2) {
			return ans;
		}
    	while(right-left>=2) {
    		int pivot=left+1;
    		while(pivot<right) {
    			int sum=nums[left]+nums[right]+nums[pivot];

//    			如果前一个数和后一个数相等就跳出重复
    			if (pivot>left+1&&nums[pivot]==nums[pivot-1]) {
					pivot++;
    				continue;
				}
//    			否则如果sum大于target右边指针往左移
    			else if(sum>target) {
    				right--;
    			}
//    			否则pivot往右移
    			else if(sum<target){
					pivot++;
				}else {
//					否则就是等于,直接返回
					return sum;
				}
//    			将sum和ans减去target的绝对值进行比较,那个小用哪个
    			if (Math.abs(target-sum)<Math.abs(target-ans)) {
					ans=sum;
				}

    		}
    		right=nums.length-1;
    		left++;
    	}
    	return ans;
    }
    public static void main(String args[]) {
    	int[] nums= {-1,2,1,-4};
    	int ans=threeSumClosest(nums, 1);
    	System.out.println(ans);
    }
}

本人csdn博客:https://blog.csdn.net/weixin_46654114

转载说明:跟我说明,务必注明来源,附带本人博客连接。

以上是关于Leetcode刷题100天—16. 最接近的三数之和( 排序)—day30的主要内容,如果未能解决你的问题,请参考以下文章

2018.9.30 LeetCode 刷题日记 第16题

LeetCode 16. 最接近的三数之和

LeetCode:最接近的三数之和16

leetcode 16:最接近的三数之和

算法leetcode|16. 最接近的三数之和(rust重拳出击)

算法leetcode|16. 最接近的三数之和(rust重拳出击)