[LeetCode][Java] 3Sum Closest「建议收藏」

[LeetCode][Java] 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).


题意:

给定一个包括n个整数的数组S,在数组中找出三个整数。使得这三个整数的和与目标值最为接近。

返回这三个整数的和。你能够假定对于每一个整数。都有确定的一个解。

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


算法分析:


  參考博客:http://www.zhuangjingyang.com/leetcode-3sum/

    和3Sum异曲同工。 只是这里我们要推断的条件不在是三个数字和为0而是和为一个更加接近target的数字。

    我们依旧採用3Sum的算法,若有三个数字x1 + x2 + x3 = result 我们所求的便是让result最接近target。

    因此对于num,首先排序。然后遍历每一个数字其下标大于自身的两个数字。然后设置两个全局变量 一个 minVal 用于记录其与target的距离,当距离减小时便更新result的新值。


AC代码:

<span style="font-size:12px;">public class Solution 
{
	private  int minVal = Integer.MAX_VALUE;
	private  int result = 0;
    public  int threeSumClosest(int[] num, int target) 
    {
    	Arrays.sort(num);
    	//if number is less than 3 or num is null it's can't be calc
    	if(num.length <3 ||  num ==null)
    		return target;
    	for(int i=0;i<num.length;i++)
    	{
    		if(i>0 && num[i] == num[i-1])
    			continue;
    		find(i,num,num[i],target);
    	}
    	return result;
    }
    public  void find(int index,int[] num,int target,int res)
    {
    	int l = index+1; //low is equal to index+1 just because we just search element that is bigger than itself
    	int r = num.length - 1;
    	while(l<r)
    	{
    		if( Math.abs(num[l] + num[r] + target - res) <= minVal)
    		{
    			minVal = Math.abs(num[l] + num[r] + target - res);//it's more closer
    			result = num[l] + num[r] + target;
    		}
    		if(num[l] + num[r] + target >res)
    			r--;
    		else
    			l++;
    	}
    }
}</span>



版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/116237.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • ftp常用命令详解_iftop命令详解

    ftp常用命令详解_iftop命令详解在window下按window+r可打开DOS命令窗口,然后就可以输入FTP命令了。1.登录FTP服务器方法一:直接输入ftp加ip地址ftp192.168.10.xxx方法二:直接输入ftp,进入ftp服务后输入open加ip地址open192.168.10.xxx当连接成功后会让你进行身份验证,在输入密码时屏幕上没有任何显示,不用管,直接…

    2022年4月19日
    45
  • PHP+AJAX 实现表格实时编辑

    PHP+AJAX 实现表格实时编辑

    2021年11月3日
    48
  • 分布式文件存储——简介

    分布式文件存储——简介1、分布式文件系统种类简介:常见的分布式文件系统有:GlusterFS、GoogleFS、FastDFS、TFS等,各自适用的领域不同,它们都不是系统级的分布式文件系统,而是应用级的分布式文件存储服务。现在比较火的并且好用的应该就是OSS了,阿里云对象存储服务(ObjectStorageService,简称OSS),是阿里云提供的海量、安全、低成本、高可靠的云存储服务。OSS具有与…

    2022年5月1日
    58
  • JVM垃圾回收机制 (垃圾判断,垃圾回收算法,垃圾回收器,五种引用)【jvm】「建议收藏」

    JVM垃圾回收机制 (垃圾判断,垃圾回收算法,垃圾回收器,五种引用)【jvm】「建议收藏」????‍????博主主页:爪哇贡尘拾Miraitow????传作时间:????2022年1月9日晚21:44????????????内容介绍:最近在学习JVM所以会时不时更新有关内容????参考资料:黑马JVM度娘????参考链接:????JVM垃圾回收机制⏳简言以励:列位看官,且将新火试新茶,诗酒趁年华????内容较多有问题希望能够不吝赐教????????欢迎点赞????收藏⭐留言????????JVM垃圾回收♻1.1如何判断对象可以回收♻1、引用计数器法2、可达

    2022年6月6日
    32
  • linux 软连接 创建/查看/删除[通俗易懂]

    linux 软连接 创建/查看/删除[通俗易懂]linux软件连接创建/查看/删除1、建立软链接具体用法是:ln-s源文件目标文件。源:实际存放文件的位置当我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,我们只要在某个固定的目录,放上该文件,然后在其它的目录下用ln命令链接(link)它就可以,不必重复的占用磁盘空间。-s是代号(symbolic)的意思注意:ln的链接…

    2022年9月26日
    4
  • 微软高性能缓存AppFabric (一) 安装「建议收藏」

    微软高性能缓存AppFabric (一) 安装「建议收藏」博客原文链接:http://www.cnblogs.com/Qbit/p/6088703.htmlAppFabric缓存功能的前身是VeloCity,它是基于windows平台的一个高速内存缓存

    2022年7月2日
    39

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号