刻意练习:LeetCode实战 -- Task05. 最接近的三数之和
背景
本篇图文是LSGO软件技术团队组织的 第二期基础算法(Leetcode)刻意练习训练营 的打卡任务。本期训练营采用分类别练习的模式,即选择了五个知识点(数组、链表、字符串、树、贪心算法),每个知识点选择了 三个简单、两个中等、一个困难 等级的题目,共计三十道题,利用三十天的时间完成这组刻意练习。
本次任务的知识点:数组
数组 是在程序设计中,为了处理方便,把具有相同类型的若干元素按有序的形式组织起来的一种形式。抽象地讲,数组即是有限个类型相同的元素的有序序列。若将此序列命名,那么这个名称即为数组名。组成数组的各个变量称为数组的分量,也称为数组的元素。而用于区分数组的各个元素的数字编号则被称为下标,若为此定义一个变量,即为下标变量。
题目
给定一个包括n
个整数的数组nums
和一个目标值target
。找出nums
中的三个整数,使得它们的和与target
最接近。返回这三个数的和。假定每组输入只存在唯一答案。
示例 :
例如,给定数组 nums = [-1,2,1,-4], 和 target = 1.与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2).
算法实现
第一种:利用暴力算法
- 状态:通过
- 125 / 125 个通过测试用例
- 执行用时: 680 ms, 在所有 C# 提交中击败了 12.07% 的用户
- 内存消耗: 23.7 MB, 在所有 C# 提交中击败了 7.41% 的用户
public class Solution
{public int ThreeSumClosest(int[] nums, int target) {double error = int.MaxValue;int sum = 0;for (int i = 0; i < nums.Length - 2; i++)for (int j = i + 1; j < nums.Length - 1; j++)for (int k = j + 1; k < nums.Length; k++){if (Math.Abs(nums[i] + nums[j] + nums[k] - target) < error){sum = nums[i] + nums[j] + nums[k];error = Math.Abs(sum - target); }}return sum; }
}
第二种:利用双指针算法
- 状态:通过
- 125 / 125 个通过测试用例
- 执行用时: 132 ms, 在所有 C# 提交中击败了 100.00% 的用户
- 内存消耗: 24 MB, 在所有 C# 提交中击败了 5.55% 的用户
public class Solution {public int ThreeSumClosest(int[] nums, int target) {nums = nums.OrderBy(a => a).ToArray();int result = nums[0] + nums[1] + nums[2];for (int i = 0; i < nums.Length - 2; i++){int start = i + 1, end = nums.Length - 1;while (start < end){int sum = nums[start] + nums[end] + nums[i];if (Math.Abs(target - sum) < Math.Abs(target - result))result = sum;if (sum > target)end--;else if (sum < target)start++;elsereturn result;}}return result; }
}
Pyhton 语言
- 执行结果:通过
- 执行用时:124 ms, 在所有 Python3 提交中击败了 72.19% 的用户
- 内存消耗:13.2 MB, 在所有 Python3 提交中击败了 22.06% 的用户
class Solution:def threeSumClosest(self, nums: List[int], target: int) -> int:nums = sorted(nums)result = nums[0] + nums[1] + nums[2]for i in range(0, len(nums) - 2):start = i + 1end = len(nums) - 1while start < end:sum = nums[start] + nums[end] + nums[i]if abs(target - sum) < abs(target - result):result = sumif sum > target:end -= 1elif sum < target:start += 1else:return resultreturn result
来源
- https://leetcode-cn.com/problems/3sum-closest/
往期活动
LSGO软件技术团队会定期开展提升编程技能的刻意练习活动,希望大家能够参与进来一起刻意练习,一起学习进步!
- Python基础刻意练习活动即将开启,你参加吗?
- Task01:变量、运算符与数据类型
- Task02:条件与循环
- Task03:列表与元组
- Task04:字符串与序列
- Task05:函数与Lambda表达式
- Task06:字典与集合
- Task07:文件与文件系统
- Task08:异常处理
- Task09:else 与 with 语句
- Task10:类与对象
- Task11:魔法方法
- Task12:模块
我是 终身学习者“老马”,一个长期践行“结伴式学习”理念的 中年大叔。
我崇尚分享,渴望成长,于2010年创立了“LSGO软件技术团队”,并加入了国内著名的开源组织“Datawhale”,也是“Dre@mtech”、“智能机器人研究中心”和“大数据与哲学社会科学实验室”的一员。
愿我们一起学习,一起进步,相互陪伴,共同成长。
后台回复「搜搜搜」,随机获取电子资源!
欢迎关注,请扫描二维码:
相关文章:

ECMAScript6——Set数据结构
/*** 数据结构 Set*/// ----------------------------------------------------- /*** 集合的基本概念:集合是由一组无序且唯一(即不能重复)的项组成的。这个数据结构使用了与有限集合相同的数学概念,应用在计算机的数据结构中。*…

UI设计培训需要学哪些内容
想要学习UI设计并没有想象中那么简单的,UI设计需要学习的内容有很多,那么具体UI设计培训需要学哪些内容呢?来看看下面小编的详细介绍就知道了。 UI设计培训需要学哪些内容? 在ui设计中,需要的基础是一些简单的美术基础和平面设计基础&#…

4.html 头部随笔
1、html头部标记<base>:当前文档的URL全称(基底地址)<basefont>:设定基准的文字字体、字号和颜色<title>:网页标题<isindex>:表明文档是一个可用于检索的网管脚本,有服…

Python统计字符串中的中英文字符、数字空格,特殊字符
# -*- coding:utf8 -*-import stringfrom collections import namedtupledef str_count(s): 找出字符串中的中英文、空格、数字、标点符号个数 count_en count_dg count_sp count_zh count_pu 0 s_len len(s) for c in s: # 英文 if c in stri…

刻意练习:LeetCode实战 -- Task07. 合并两个有序链表
背景 本篇图文是LSGO软件技术团队组织的 第二期基础算法(Leetcode)刻意练习训练营 的打卡任务。本期训练营采用分类别练习的模式,即选择了五个知识点(数组、链表、字符串、树、贪心算法),每个知识点选择了…

Java入门培训班怎么选择
想要学习java技术,小编一直给小伙伴推荐的是报班学习,目前市面上的java培训机构有很多,对于java培训班的选择很多小伙伴都比较迷茫,下面小编就为大家详细的介绍一下Java入门培训班怎么选择的问题。 Java入门培训班怎么选择?一般正…

开源图形库 FreeImage
一个自由、开源的图形库--FreeImage (支持位图构件―例 如调色板和数据位―的便易访问;将位图从一种位深度转换到另一种位深度;当有多幅位图页―例如TIFF―时访问位图的不同页;基本的位图处理,如旋转、翻 转(flipping&…

刻意练习:LeetCode实战 -- Task08.删除排序链表中的重复元素
背景 本篇图文是LSGO软件技术团队组织的 第二期基础算法(Leetcode)刻意练习训练营 的打卡任务。本期训练营采用分类别练习的模式,即选择了五个知识点(数组、链表、字符串、树、贪心算法),每个知识点选择了…

notepad++ 快捷键
2019独角兽企业重金招聘Python工程师标准>>> 1. 文件相关 快捷键动作定义Ctrl-O打开文件Ctrl-N新建文件Ctrl-S保存文件Ctrl-Alt-S文件另存为Ctrl-Shift-S保存所有打开文件Ctrl-P打印Alt-F4退出程序Ctrl-Tab文件标签跳转,跳至下一个打开文件Ctrl-Shift-Ta…

怎样使用Spring Boot项目的单元测试
在实际开发中,每当完成一个功能接口或业务方法的编写后,通常都会借助单元测试验证该功能是否正确。Spring Boot对项目的单元测试提供了很好的支持,在使用时,需要提前在项目的pom.xml文件中添加spring-boot-starter-test测试依赖启…

关于生成id的问题
表明表最大id 方法1: GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER PROCEDURE [dbo].[getserial] serialname char(30) AS begin declare serialno int begin transaction select serialno SV_nSerial from SystemVariable with(TABLOCKX HOLDLOCK…

刻意练习:LeetCode实战 -- Task09. 环形链表
背景 本篇图文是LSGO软件技术团队组织的 第二期基础算法(Leetcode)刻意练习训练营 的打卡任务。本期训练营采用分类别练习的模式,即选择了五个知识点(数组、链表、字符串、树、贪心算法),每个知识点选择了…

CentOS学习笔记 - 9. docker maven编译基于gofabric8的java应用镜像
2019独角兽企业重金招聘Python工程师标准>>> 续上一篇 1. 修改java工程的pom.xml , 加入docker编译插件 <plugin><groupId>com.spotify</groupId><artifactId>docker-maven-plugin</artifactId><version>1.0.0</…

Java虚拟机中获得Runtime实例的方法是什么?
Runtime类用于表示Java虚拟机运行时的状态,它用于封装Java虚拟机进程。每次使用“java”命令启动Java虚拟机时都会对应一个Runtime实例,并且只有一个实例,应用程序会通过该实例与其运行时的环境相连。应用程序不能创建自己的Runtime实例&…

仿百度文库方案[openoffice.org 3+swftools+flexpaper](三) 之 使用JODConverter将office文档转换为pdf...
第三步,使用JODConverter将office文档转换为pdf JODConverter是一个java的OpenDucument文件转换器,可以进行许多文件格式的转换,它利用 OpenOffice来进行转换工作,它能进行以下的转换工作: 1.Microsoft Office格式转换…

刻意练习:LeetCode实战 -- Task10. 两数相加
背景 本篇图文是LSGO软件技术团队组织的 第二期基础算法(Leetcode)刻意练习训练营 的打卡任务。本期训练营采用分类别练习的模式,即选择了五个知识点(数组、链表、字符串、树、贪心算法),每个知识点选择了…

Ether-channel 以太网通道
Ether-channel通常称之为以太网链路捆绑,或者叫链路汇聚,链路聚合。作用:将多个类似的接口,捆绑成一个逻辑接口,从而增加设备之间的传输带宽增加设备之间的连接可靠性不但可以在链路设备之间形成链路备份,还…

web前端开发培训有哪些学习阶段
web前端技术主要针对于移动互联网是比较多的,对于零基础的同学来说前期主要学习基本的静态布局,HTML CSS,下面是web前端开发培训有哪些学习阶段的具体内容。 web前端开发培训有哪些学习阶段? 一、html5如何学习 1.HTML5 CSS3 JQ …

自己动手重新实现LINQ to Objects: 9 - SelectMany
本文翻译自Jon Skeet的系列博文“Edulinq”。 本篇原文地址: http://msmvps.com/blogs/jon_skeet/archive/2010/12/27/reimplementing-linq-to-objects-part-9-selectmany.aspx 我们接下来要实现的这个操作符是LINQ中最重要的操作符。大多数(或者是全部…

1.8 centos7 的PATH、cp/mv/文档查看命令介绍
环境变量PATH什么是环境变量?环境变量一般是指在操作系统中用来指定操作系统运行环境的一些参数,如:临时文件夹位置和系统文件夹位置等。[rootcentos7 ~]# echo $PATH #查看PATH环境变量 /usr/local/sbin:/usr/local/bin:/usr/sbin…

刻意练习:LeetCode实战 -- Task11. 删除链表的倒数第N个节点
背景 本篇图文是LSGO软件技术团队组织的 第二期基础算法(Leetcode)刻意练习训练营 的打卡任务。本期训练营采用分类别练习的模式,即选择了五个知识点(数组、链表、字符串、树、贪心算法),每个知识点选择了…

https和http有什么区别?看下面介绍就知道了!
https和http有什么区别?相信很多还在学习软测的同学们,都会有遇到这种问题,下面就是小编给大家介绍的http相关的知识 。 一、http和https基本概念 1. HTTP:是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应…

C#图片灰度处理(位深度24→位深度8),用灰度数组byte[]新建一个8位灰度图像Bitmap 。...
原文:C#图片灰度处理(位深度24→位深度8) #region 灰度处理/// <summary>/// 将源图像灰度化,并转化为8位灰度图像。/// </summary>/// <param name"original"> 源图像。 </param>/// <returns> 8位灰度图像。 </return…

日期NSDate的使用
日期类NSDate,存储的是世界标准时(UTC),输出时需要根据时区转换为本地时间方法description字符串以GMT0展示日期如:2011-11-16 07:02:25 0000测试的北京时间:2011-11-16 15:02:25.324/))))((((/格式化日期类型,使用NSDateFormatte…

刻意练习:LeetCode实战 -- Task12. 合并K个排序链表
背景 本篇图文是LSGO软件技术团队组织的 第二期基础算法(Leetcode)刻意练习训练营 的打卡任务。本期训练营采用分类别练习的模式,即选择了五个知识点(数组、链表、字符串、树、贪心算法),每个知识点选择了…

软测培训机构哪个比较好
软件测试这个岗位是软件开发过程中非常重要的一步,一个软件的开发是少不了软测工程师的,近几年,软测的发展前景越来越可观,很多人都想学习软测技术,那么市面上软测培训机构哪个比较好呢?来看看下面的详细介绍。 软测培…

刻意练习:LeetCode实战 -- Task13. 罗马数字转整数
背景 本篇图文是LSGO软件技术团队组织的 第二期基础算法(Leetcode)刻意练习训练营 的打卡任务。本期训练营采用分类别练习的模式,即选择了五个知识点(数组、链表、字符串、树、贪心算法),每个知识点选择了…

[翻译]ASP.NET MVC 3 开发的20个秘诀(十二)[20 Recipes for Programming MVC 3]:缩放图片尺寸创建缩略图...
议题 用户上传到网站上的大多数的图片都是大尺寸的照片,通常在用户想看完整图片之前网站会展示出这些图片或照片的缩略图。 解决方案 使用以下的类来调整上传的图片文件的宽和高:FileStream,Image,Bitmap和Graphics。 讨论 在下面…

Vue.js双向绑定的实现原理
Vue.js 最核心的功能有两个,一是响应式的数据绑定系统,二是组件系统。本文仅探究双向绑定是怎样实现的。先讲涉及的知识点,再用简化得不能再简化的代码实现一个简单的 hello world 示例。 一、访问器属性 访问器属性是对象中的一种特殊属性&a…

学习UI设计的一些小技巧你会了吗
最近有很多小伙伴都在学习UI设计技术,对于如今的互联网行业,UI设计这个岗位的需求量确实非常大,发展空间比较好,下面小编就为大家整理一些学习UI设计的一些小技巧,希望能够帮助到正在学习UI设计的同学。 学习UI设计的一…