当前位置: 首页 > news >正文

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


本题与 Three Sum Zero类似,不同点在于,之前是寻找a+b+c=0的组合,现在是找最接近target的a+b+c的值。


思路:
依然是two pointer的思路。
1.对数组排序
2.使用a表示当前第i轮查找,b=i+1,表示第i轮的第1个元素,b∈[i+1,n),c=len-1,一开始指向最后一个元素。
3.当找到a+b+c=target,直接返回;如果a+b+c < target,b++;否则,c--。
4.每次取Math.Abs(a+b+c- target)与当前Math.Abs(min-target)的最小值。
5.最后返回min




实现代码:




public class Solution {
    public int ThreeSumClosest(int[] nums, int target) 
    {
        if(nums == null || nums.Length < 3){
    		return nums.Sum();
    	}
    	
    	var list = nums.OrderBy(x=>x).ToList();
    	
    	var len = list.Count;
    	
    	int? min = null;
    	
    	for (var i = 0 ;i <= len - 3 ;i++)
    	{
    		var a = list[i];
    		var start = i+1;
    		var end = len-1;
    		while (start < end) 
    		{
    			var b = list[start];
    			var c = list[end];
    			if(a+b+c == target){
    				min = target;
    				break;
    			}
    			else if (a+b+c > target){
    				end --;
    			}
    			else{
    				start ++;
    			}
    			// update min
    			if (min == null || Math.Abs(a+b+c - target) < Math.Abs(min.Value - target)) 
    			{
    				min = a+b+c;
    			}
    		}
    	}
    	
    	return min.Value;
    }
}


相关文章:

  • 使用反射将业务对象绑定到 ASP.NET 窗体控件
  • LeetCode -- 4Sum
  • LeetCode -- Binary Tree Level Order Traversal II
  • (ZT)一个美国文科博士的YardLife
  • LeetCode -- Clone Graph
  • Oracle 中的nvl() 函数 相当于Sql Server 的 isnull()
  • LeetCode -- Combinations
  • [IE编程] WebBrowser控件中设置页面的缩放
  • LeetCode -- Find the Duplicate Number
  • LeetCode -- Group Anagrams
  • LeetCode -- Kth Largest Element in an Array
  • 最近评论回复汇总
  • LeetCode -- Maximum Gap
  • OO系统分析员之路--用例分析系列(8)--如何编写一份完整的UML需求规格说明书[整理重发]...
  • LeetCode -- Maximum Subarray
  • 【391天】每日项目总结系列128(2018.03.03)
  • ABAP的include关键字,Java的import, C的include和C4C ABSL 的import比较
  • C++类中的特殊成员函数
  • download使用浅析
  • redis学习笔记(三):列表、集合、有序集合
  • VirtualBox 安装过程中出现 Running VMs found 错误的解决过程
  • 分享自己折腾多时的一套 vue 组件 --we-vue
  • 工作手记之html2canvas使用概述
  • 官方解决所有 npm 全局安装权限问题
  • 力扣(LeetCode)22
  • 如何使用Mybatis第三方插件--PageHelper实现分页操作
  • 使用 @font-face
  • 吴恩达Deep Learning课程练习题参考答案——R语言版
  • 学习ES6 变量的解构赋值
  • 做一名精致的JavaScripter 01:JavaScript简介
  • 机器人开始自主学习,是人类福祉,还是定时炸弹? ...
  • 容器镜像
  • #laravel 通过手动安装依赖PHPExcel#
  • #Linux(Source Insight安装及工程建立)
  • #我与Java虚拟机的故事#连载09:面试大厂逃不过的JVM
  • (11)MATLAB PCA+SVM 人脸识别
  • (delphi11最新学习资料) Object Pascal 学习笔记---第5章第5节(delphi中的指针)
  • (八)Docker网络跨主机通讯vxlan和vlan
  • (论文阅读26/100)Weakly-supervised learning with convolutional neural networks
  • (七)Knockout 创建自定义绑定
  • (四)JPA - JQPL 实现增删改查
  • (算法)Game
  • (转)JVM内存分配 -Xms128m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=512m
  • (转)mysql使用Navicat 导出和导入数据库
  • *(长期更新)软考网络工程师学习笔记——Section 22 无线局域网
  • **PHP分步表单提交思路(分页表单提交)
  • .Net 6.0 处理跨域的方式
  • .Net Remoting(分离服务程序实现) - Part.3
  • .net Stream篇(六)
  • .NET业务框架的构建
  • /bin/rm: 参数列表过长"的解决办法
  • @Conditional注解详解
  • [ CTF ]【天格】战队WriteUp- 2022年第三届“网鼎杯”网络安全大赛(青龙组)
  • [1127]图形打印 sdutOJ
  • [BZOJ1089][SCOI2003]严格n元树(递推+高精度)