首页 > 其他分享 >力扣16.最接近的三数之和(双指针)

力扣16.最接近的三数之和(双指针)

时间:2023-09-26 10:44:06浏览次数:54  
标签:current target nums int 三数 16 力扣 difference left

给你一个长度为 n 的整数数组 nums 和 一个目标值 target。请你从 nums 中选出三个整数,使它们的和与 target 最接近。

返回这三个数的和。

假定每组输入只存在恰好一个解。

 

示例 1:

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

 

示例 2:

输入:nums = [0,0,0], target = 1
输出:0

 

 

提示:

  • 3 <= nums.length <= 1000
  • -1000 <= nums[i] <= 1000
  • -104 <= target <= 104

1.暴力+剪枝(刚好不超时1000~1500ms),剪枝的主要内容是:a.第三层循环从尾部开始遍历,当这次的差值(current_difference)大于上次的差值(previous_difference)时,就可以停止第三层循环的遍历了,因为再往左走差值只会越来越大。b.前两层的遍历过程中,可以跳过相同元素。

 1 class Solution {
 2 public:
 3     int threeSumClosest(vector<int>& nums, int target) {
 4         sort(nums.begin(),nums.end());
 5         int similarity; //记录最相似的值
 6         int minimum_difference=INT32_MAX; //记录最小差值
 7         for (int i=0;i<nums.size()-2;i++){
 8             if (i>0&&nums[i]==nums[i-1])
 9                 continue;
10             int goal=target-nums[i];
11             for (int left=i+1;left<nums.size()-1;++left){
12                 if (left>i+1&&nums[left]==nums[left-1])
13                     continue;
14                 int previous_difference=INT32_MAX; //记录上一次遍历的差值
15                 int current_difference; //记录当前差值
16                 for (int right=nums.size()-1;right>left;right--){
17                     current_difference=abs(goal-nums[left]-nums[right]);
18                     if (current_difference>previous_difference)
19                         break;
20                     if (current_difference<=minimum_difference){
21                         minimum_difference=abs(goal-nums[left]-nums[right]);
22                         similarity=nums[i]+nums[left]+nums[right];
23                     }
24                     if (minimum_difference==0){
25                         return target;
26                     }
27                     previous_difference=current_difference;
28                 }
29             }
30         }
31         return similarity;
32     }
33 };

 

标签:current,target,nums,int,三数,16,力扣,difference,left
From: https://www.cnblogs.com/coderhrz/p/17729606.html

相关文章

  • 全志H616在低温reboot过程中进入休眠解决方法
    主题H618在DDR物料适配支持时候,reboot实验异常进休眠,在reboot老化测试中报如下log1[2023-07-11,16:56:44][40.325238][T1]init:Untrackedpid1888exitedwithstatus0[2023-07-11,16:56:44][40.325295][T5]binder:undelivereddeathnotification,0000000......
  • 力扣刷题笔记-05 最长回文子串
    05最长回文子串半山腰有点拥挤,你要去山顶看看。中心扩展法什么是回文从左边出发,字符的顺序和从右边出发是一样的,比如aba,abba。那么基于这个理论,我们就可以想到解决方案:找一个中心点,向两边出发,左右两边各移动一位,如果相同就证明是回文子串,不相同就停止,找下一个中心点中心点......
  • 16张动图讲透网络原理
    趣味解读什么是网络网络其实存在于日常生活中的每一个角落。你的电脑,打印机,手机,甚至电视等等都属于网络设备。通常,你需要将这些设备通过网络连接起来,这样就可以实现数据的传输和共享,让工作生活更加便捷。如果你的连接没有问题,就可以通过电脑给打印机发送指令,让它帮你打印资料。或者......
  • 修复 K8s SSL/TLS 漏洞(CVE-2016-2183)
    转载于:https://www.cnblogs.com/kubesphere/p/17141586.html前言简介生产环境KubeSphere3.3.0部署的Kubernetes集群在安全评估的时候发现安全漏洞,其中一项漏洞提示 SSL/TLS协议信息泄露漏洞(CVE-2016-2183)。本文详细描述了漏洞产生原因、漏洞修复方案、漏洞修复的......
  • 基于Vgg16和Vgg19深度学习网络的步态识别系统matlab仿真
    1.算法运行效果图预览  2.算法运行软件版本MATLAB2022A 3.算法理论概述       步态识别作为生物特征识别领域的一个重要分支,在人体运动分析、身份验证、健康监测等方面具有广泛的应用前景。步态能量图(GaitEnergyImage,简称GEI)是一种有效的步态表示方法,通过......
  • 探索Navicat Premium 16:卓越的数据库管理软件解决方案 mac+win版
    在当今的数据驱动时代,一款高效、便捷的数据库管理软件对于企业、机构以及个人用户来说至关重要。NavicatPremium16,作为一款备受赞誉的数据库管理软件,正在满足这一需求,以其独特的功能和优势吸引着广大用户。→→↓↓载NavicatPremium16mac/win版一、NavicatPremium16的核......
  • Vmware Workstation 16 Pro 创建共享磁盘
    图形界面创建共享磁盘第一台创建共享磁盘首先打开已经安装好系统的虚拟机,点击编辑虚拟机设置,弹出如下窗口:点击添加,选择硬盘,点击下一步:默认选择scsi,点击下一步。选择创建新虚拟磁盘。点击下一步:分配磁盘空间大小,选择立即分配磁盘所有空间,将虚拟磁盘存储为单个文件。命名磁盘名称及......
  • core文件里的全局变量偏移了16字节
    源代码里面有这个几张表:126staticstructavl_table*l2_addr_tree;127staticstructavl_table*casa_neighbor_table;128staticstructavl_table*casa_ecmp_table;129staticstructavl_table*casa_neighbor6_table;130staticstructavl_table*casa_nh_rout......
  • Jenkins 命令执行 -- jetty 敏感信息泄露 --(CVE-2021-2816)&&(CVE-2017-1000353)&&(C
    Jenkins命令执行--jetty敏感信息泄露--(CVE-2021-2816)&&(CVE-2017-1000353)&&(CVE-2018-1000861)jetty敏感信息泄露(CVE-2021-28169)漏洞简介对于<=9.4.40、<=10.0.2、<=11.0.2的EclipseJetty版本,对带有双重编码路径的ConcatServlet的请求可以访问WEB-INF目录......
  • 20211316郭佳昊 《信息安全系统设计与实现(上)》第三周学习笔记
    一、任务要求[1]知识点归纳以及自己最有收获的内容,选择至少2个知识点利用chatgpt等工具进行苏格拉底挑战,并提交过程截图,提示过程参考下面内容(4分)我在学***X知识点,请你以苏格拉底的方式对我进行提问,一次一个问题核心是要求GPT:请你以苏格拉底的方式对我进行提问然后GPT就会......