【算法专题突破】双指针 - 四数之和(8)

news2024/9/21 4:34:43

目录

1. 题目解析

2. 算法原理

3. 代码编写

写在最后:


1. 题目解析

题目链接:18. 四数之和 - 力扣(Leetcode)

 这道题跟三数之和也是一样的,

题目很好理解,就是四个数的和等于target的情况,

且这四个数不能重复。

2. 算法原理

首先还是暴力解法:

排序 + 暴力枚举 + set去重

我们当然是用优化的解法:

1. 依次固定一个数a

2. 然后在后面的区间,找到他们的和为target - a的数

3. 而三数之和,也是固定一个数b,然后找出他们的和为target - a - b的数

但是我们也要注意,需要跳过重复元素。

3. 代码编写

class Solution {
public:
    vector<vector<int>> fourSum(vector<int>& nums, long long target) {
        int size = nums.size();
        vector<vector<int>> ans;
        sort(nums.begin(), nums.end());
        for(int i = 0; i < size - 3; i++) {
            int a = nums[i];
            for(int j = i + 1; j < size - 2; j++) {
                int b = nums[j];
                int left = j + 1, right = size - 1;
                while(left < right) {
                    int sum = nums[left] + nums[right];
                    if(sum < target - a - b) left++;
                    else if(sum > target - a - b) right--;
                    else { // sum == target - a - b
                        ans.push_back({nums[i], nums[j], nums[left], nums[right]});
                        while(left < right && nums[left] == nums[left + 1]) left++;
                        while(left < right && nums[right] == nums[right - 1]) right--;
                        left++, right--;
                    }
                }
                while(j < size - 2 && nums[j] == nums[j + 1]) j++;
            }
            while(i < size - 3 && nums[i] == nums[i + 1]) i++;
        }
        return ans;
    }
};

写在最后:

以上就是本篇文章的内容了,感谢你的阅读。

如果感到有所收获的话可以给博主点一个哦。

如果文章内容有遗漏或者错误的地方欢迎私信博主或者在评论区指出~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/988355.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

毕业设计基于Springboot+layui+mysql实现的在线考试系统源代码+数据库+部署文档

完整代码下载地址&#xff1a;基于Springbootlayuimysql实现的在线考试系统源代码数据库部署文档 1. 部署相关 1.1. 介绍 一个 JAVA 实现的在线考试系统,主要实现一套基于不同类型的客观题,进行自动组卷、批卷等功能的考试系统&#xff08;没有主观题&#xff09; 1.2. 系统…

开启全新教学模式!vLive虚拟直播如何赋能线上教培

&#xfeff; 如今&#xff0c;教培领域正在经历一场数字化的变革。随着科技的迅猛发展&#xff0c;教培形式也在不断演变&#xff0c;越来越多的企业和讲师开始采用虚拟直播来进行在线教学。那么&#xff0c;vLive虚拟直播https://live.vsochina.com/cnvLive虚拟直播是如何赋…

Openresty(Nginx)内网安装,手把手详细教学+附安装包

Openresty&#xff08;nginx&#xff09;配置文档 一、基础Linux指令 查看nginx进程是否启动&#xff1a;ps -ef | grep nginx 关闭防火墙&#xff1a;systemctl stop firewalld 开放80端口&#xff1a;firewall-cmd --zonepublic --add-port80/tcp --permanent 关闭80端口&am…

谁在爬我的网站?我要“炸”了他

如果你曾经搭建过自己的网站&#xff0c;那么你一定对网络爬虫感到无比的烦恼。这些爬虫每天都在大量的访问你的网站&#xff0c;频繁且毫无节制地消耗你的服务器资源。那么&#xff0c;今天我们就来探讨一下&#xff0c;如何“干死”这些爬虫的服务器。 注意&#xff1a;本文…

2023高教社杯数学建模C题思路代码 - 蔬菜类商品的自动定价与补货决策

# 1 赛题 在生鲜商超中&#xff0c;一般蔬菜类商品的保鲜期都比较短&#xff0c;且品相随销售时间的增加而变差&#xff0c; 大部分品种如当日未售出&#xff0c;隔日就无法再售。因此&#xff0c; 商超通常会根据各商品的历史销售和需 求情况每天进行补货。 由于商超销售的蔬菜…

如何配置群辉相册Synology Photos实现公网访问并与朋友共享照片

文章目录 前言本教程解决的问题是&#xff1a;按照本教程操作完成能够达到的效果是&#xff1a;1.在群辉中下载并安装Synology Photos套件2.设置共享文件夹3.添加您想共享的照片4.cpolar搭建隧道5.公网ip地址访问您的分享相册6.移动端app使用公网上传照片并及时分享 前言 很多…

谷粒商城----Nginx篇

一、正向代理和反向代理 &#x1f6a9;正向代理和反向代理是两种常见的代理服务器模式&#xff0c;用于在网络通信中起到中介的作用。 &#x1f3f4;正向代理&#xff08;Forward Proxy&#xff09;&#xff1a; 正向代理是在客户端和目标服务器之间充当中介的代理服务器。客…

ADW300物联网电表支持MODBUSTCP协议、MQTT协议-安科瑞黄安南

摘要 随着通信技术的应用越来越广泛&#xff0c;具有通信功能的电子产品越来越多&#xff0c;同时也随着Wi-Fi无线覆盖网络区域的形成&#xff0c;如何利用无线网络覆盖广、带宽高、低使用费率的优势组建物联网系统&#xff0c;变成了一个很实际的问题。 安科瑞也紧跟趋势推出…

旅游需求井喷,抖快书强势涌入,OTA如何制胜下半场?

文 | 螳螂观察 作者 | 图霖 自年初起就逐步恢复的旅游行业&#xff0c;这个暑期迎来意料之中的小高潮。 显著表现是&#xff0c;携程、同程等头部OTA平台迎来订单量大涨。 携程发布的数据预订大数据显示&#xff0c;截至6月14日&#xff0c;平台的暑期亲子订单量同比去年超…

vue3:22、vue-router的使用

import { createRouter, createWebHistory } from vue-router//history模式&#xff1a;createWebHistory //hash模式&#xff1a;createWebHashHistory//vite中的环境变量 import.meta.env.BASE_URL 就是vite.config.js中的base配置项 const router createRouter({history:…

Web3 游民工作机会大放送,高薪岗位职等你来!

近年来&#xff0c;随着互联网、制造业、房地产等行业发展的转型&#xff0c;大量投资机构开始将眼光转向 Web3 赛道&#xff0c;助推初创项目实现从 0 到 1 的发展与蜕变。据 Crunchbase 综合数据统计显示&#xff0c;目前 Web3 行业有 19,182 家公司&#xff0c;总融资高达 8…

MATLAB实现数据插值

目录 一.理论知识 二.一维插值实例 三.二维插值实例 一.理论知识 所谓插值&#xff0c;顾名思义&#xff0c;插入数值。很多时候&#xff0c;我们仅有离散点上的数据&#xff0c;这时如果我们想要分析变量之间的函数关系&#xff0c;则无法实现。但如果通过插值处理&#xf…

工单管理系统有什么作用?如何告别“走流程式”巡检!

在学校的安保、设备巡检、IT机房设备维护以及酒店民宿客房服务等方面&#xff0c;由于管理跟不上&#xff0c;巡查人员容易出现态度松散的问题。这会导致漏检和错巡等“走流程式”巡查现象的出现。管理层对于巡查情况的了解也不够全面&#xff0c;等到出现问题时&#xff0c;往…

期权有什么投资价值?投资期权风险大吗?

期权投资风险是比较大的。首先要求至少赚2个点以后才能保本&#xff0c;低于这个点期权手续费就收不回来了。然后因为自带杠杆交易的特性&#xff0c;其交易风险比期货及股票更大&#xff0c;下文介绍期权有什么投资价值&#xff1f;投资期权风险大吗? 期权合约杠杆化越大&…

LeetCode-17-电话号码的字母组合

一&#xff1a;题目描述&#xff1a; 给定一个仅包含数字 2-9 的字符串&#xff0c;返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下&#xff08;与电话按键相同&#xff09;。注意 1 不对应任何字母。 二&#xff1a;示例与提示 示例 1:…

OpenVINO实验说明

文章目录 0. 注1. 使用环境2. OpenVINO 1. 安装OpenVINO1. 安装虚拟环境平台2. 创建虚拟环境3. 下载OpenVINO notebook4. 安装依赖 2. 重训练1. 下载yolov7源码2. 修改配置文件2.1 weights2.2 cfg2.3 data2.4 epochs2.5 img-size2.6 batch-size2.7 device2.8 可能出现的错误2.8…

Java程序员所需Javascript知识

它是一种脚本语言&#xff0c;可以用来更改页面内容&#xff0c;控制多媒体&#xff0c;制作图像、动画等等 js 代码位置 <script>// js 代码 </script>引入 js 脚本&#xff0c;在js脚本中写js代码 <script src"js脚本路径"></script>注…

如何查看APK的MD5签名及无法显示MD5签名的解决办法

https://blog.asroads.com/post/3358e0c4.html 之前的文章内已经介绍了不少的关于Android环境下出Apk 包遇到的各种填坑操作&#xff0c;以及一些设置小技巧&#xff0c;但坑是未知的&#xff0c;今天又踩一个坑&#xff0c;这次的问题是和电脑环境有关的。于是下面记录一下。 …

HotSpot垃圾收集算法实现细节

文章目录 根节点枚举安全点安全区域记忆集与卡表写屏障三色标记 根节点枚举 在可达性分析算法中&#xff0c;由于GC Roots众多&#xff0c;所以在从GC Roots集合中进行引用链查找时会耗费大量时间。 迄今为止&#xff0c;所有收集器在根节点枚举这一步骤时都是必须暂停用户线…

CS420 附加篇笔记 P1 - 如何寻找基址、偏移、实体的地址和指针

文章目录 IntroHealth variableEntityHow cheat engine worksWhat is an object / a classStatic addressesPointersRelative addressesSummary Intro 这一篇进入了进阶内容&#xff0c;讲的内容也变得即有广泛又有深入&#xff0c;推荐有一定基础和实践或者编程经验的观看&…