Leetcode刷题详解——四数之和

news2024/11/18 18:44:32

1. 题目链接:四数之和

2. 题目描述:

给你一个由 n 个整数组成的数组 nums ,和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] (若两个四元组元素一一对应,则认为两个四元组重复):

  • 0 <= a, b, c, d < n
  • abcd 互不相同
  • nums[a] + nums[b] + nums[c] + nums[d] == target

你可以按 任意顺序 返回答案 。

示例 1:

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

示例 2:

输入:nums = [2,2,2,2,2], target = 8
输出:[[2,2,2,2]]

提示:

  • 1 <= nums.length <= 200
  • -109 <= nums[i] <= 109
  • -109 <= target <= 109

3. 解法(排序+双指针)

3.1 解法思路:

  1. 依次固定一个数a
  2. 在这个数a的后面区间上,利用三数之和找到三个数,使这三个数的和等于target-a即可
  3. 依次固定一个数b
  4. 在b后面的区间内,利用双指针找到两个数,使这两个数的和等于target-a-b即可
  5. 保证不重复不漏

请添加图片描述

3.1 C++算法代码:

class Solution
{
public:
    vector<vector<int>> fourSum(vector<int>&nums,int target)
    {
        vector<vector<int>> ret;
        //1.排序
        sort(nums.begin(),nums.end());
        //2.利用双指针解决问题
        int n=nums.size();
        for(int i=0;i<n;)//固定数a
        {
            //利用三数之和
            for(int j=i+1;j<n;)//固定数b
            {
                //双指针
                int left=j+1,right=n-1;
                long long aim=(long long)target-nums[i]-nums[j];
                while(left<right)
                {
                    int sum=nums[left]+nums[right];
                    if(sum<aim)
                    ++left;
                    else if(sum>aim)
                    right--;
                    else
                    {
                        ret.push_back({nums[i],nums[j],nums[left++],nums[right--]});
                        //去重1
                        while(left<right&&nums[left]==nums[left-1])++left;
                        while(left<right&&nums[right]==nums[right+1])--right;
                    }
                }
                j++;
                //去重2
                while(j<n&&nums[j]==nums[j-1])j++;
            }
            i++;
            //去重3
            while(i<n&&nums[i]==nums[i-1])i++;
        }
        return ret;
    }
};

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

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

相关文章

『力扣刷题本』:相交链表

咳咳&#xff0c;实在抱歉&#xff0c;刚开始心气太高了&#xff0c;叫『每日一题』&#xff0c;我是真的坚持不下了。 经过这次打击&#xff0c;我算是摸明白自己在写博客这件事情上几斤几两了&#xff0c;现在预计一周两更&#xff0c;再慢慢把更新频率提上来。 正在努力补…

python写的自动按键和鼠标连点

自己用python写的自动按键和鼠标自动点击。 分享一下源码&#xff0c;比较干净的&#xff0c;缺点就是是python打包有点大50多M from PyQt5 import QtWidgets, uic, QtCore from pynput import keyboard, mouse import pygetwindow as gw from PyQt5.QtGui import QPainter, Q…

YOLOv7改进实战 | 更换轻量化主干网络Backbone(一)之Ghostnet

前言 轻量化网络设计是一种针对移动设备等资源受限环境的深度学习模型设计方法。下面是一些常见的轻量化网络设计方法: 网络剪枝:移除神经网络中冗余的连接和参数,以达到模型压缩和加速的目的。分组卷积:将卷积操作分解为若干个较小的卷积操作,并将它们分别作用于输入的不…

Netty常用类与接口

netty架构图 ServerBootstrap 、 Bootstrap ServerBootstrap &#xff1a;服务器的引导类&#xff0c;可以绑定服务器和端口&#xff0c;配置 Channel、ChannelHandler等。 Bootstrap&#xff1a;客户端的引导类。可以开启客户端&#xff0c;连接服务端的端口&#xff0c;配置…

矩阵系统功能介绍

数据大屏&#xff1a;监测读取后台数据 AI素材库&#xff1a;一键去水印功能 将视频做出自己的 AI智能文案&#xff1a;一键生成各种文案&#xff0c;解决文案编写困难的问题 视频剪辑&#xff1a;一键剪辑多个视频

vue3引入全局js

main.js中引入js&#xff0c;设置全局属性 m a p : a p p . c o n f i g . g l o b a l P r o p e r t i e s . map:app.config.globalProperties. map:app.config.globalProperties.map引入js对象 vue页面中使用。引入vue实例&#xff1a; import {getCurrentInstance} from “…

VS2022更换背景壁纸逐步图示教程

&#x1f984;个人主页:修修修也 ⚙️操作环境:Visual Studio 2022 目录 一.下载壁纸插件 二.更改自定义壁纸 三.调整壁纸布局 一.下载壁纸插件 因为更改自定义壁纸需要一个插件的辅助,所以我们要先下载一个小插件 首先,打开VS2022,点击"扩展"->"管理扩…

无人机电力巡检:国网安徽实际案例解析

在科技快速发展的今天&#xff0c;传统行业正在经历前所未有的转型。电力巡检&#xff0c;这一看似传统且乏味的任务&#xff0c;却因为无人机技术的介入而焕发新生。今天&#xff0c;让我们深入了解一个具体的案例&#xff0c;探索无人机如何革新电力巡检。 案例背景&#xff…

Postman —— postman的介绍和安装

Postman的介绍 Postman 是一款谷歌开发的接口测试工具,使API的调试与测试更加便捷。 它提供功能强大的 Web API & HTTP 请求调试。它能够发送任何类型的HTTP 请求 (GET, HEAD, POST, PUT..)&#xff0c;附带任何数量的参数 headers postman是一款支持http协议的接口调试与…

【试题020】C语言自减运算符例题

1.题目&#xff1a;设int a1&#xff0c;b6;&#xff0c;执行表达式--all(b8)后&#xff0c;a和b的值分别是 &#xff1f; 2.代码分析&#xff1a; #include <stdio.h> int main() {//设int a1&#xff0c;b6;执行表达式--all(b8)后&#xff0c;a和b的值分别是?int a …

【手写数字识别】CNN卷积神经网络入门案例

安装Anaconda 下载地址&#xff1a;https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/ 安装完成后&#xff0c;在CMD窗口 输入conda --help 查看是否安装成功 使用conda创建环境 conda create --name tf python3.7conda activate tf在 tf 环境中安装TensorFlow pip in…

基于SpringCloud实现房产销售平台的设计与实现项目【项目源码+论文说明】

摘要 信息技术的发展推动了管理系统的进步&#xff0c;目前各种行业都积极参与管理系统的建设工作。特别是疫情带来的影响&#xff0c;让传统行业逐渐认识到只有通过在线管理才能继续的发展。房产销售平台是为求租者提供房源必备的平台&#xff0c;如何找到一个好的房源是生活…

PostgreSQL数据库结合内网穿透实现公网远程连接本地

文章目录 前言1. 安装postgreSQL2. 本地连接postgreSQL3. Windows 安装 cpolar4. 配置postgreSQL公网地址5. 公网postgreSQL访问6. 固定连接公网地址7. postgreSQL固定地址连接测试 前言 PostgreSQL是一个功能非常强大的关系型数据库管理系统&#xff08;RDBMS&#xff09;,下…

某马机房预约系统 C++项目(一)

机房预约系统 1、项目介绍 本项目来源于哔哩哔哩 c机房预约系统&#xff0c;本系统采用文件存储。 2、项目流程图 3、创建新项目 首先&#xff0c;我们来新建一个新项目&#xff0c;创建一个.cpp文件 4、创建主菜单 功能描述&#xff1a; 提供设计主菜单&#xff0c;与用…

WGCNA分析教程五 | [更新版]

一边学习&#xff0c;一边总结&#xff0c;一边分享&#xff01; 往期WGCNA分析教程 WGCNA分析 | 全流程分析代码 | 代码一 WGCNA分析 | 全流程分析代码 | 代码二 WGCNA分析 | 全流程分析代码 | 代码四 关于WGCNA分析教程日常更新 学习无处不在&#xff0c;我们的教程会在…

zabbix监控nginx的状态页面

zabbix监控nginx的状态页面 文章目录 zabbix监控nginx的状态页面1.环境说明2.所涉及到的知识点3.在nginx主机上安装zabbix_agent4.开启nginx状态显示页面5.进入zabbix的web页面配置主机&#xff0c;监控项&#xff0c;触发器5.1.添加主机5.2.创建监控项5.3.创建触发器 1.环境说…

Android高版本读取沙盒目录apk解析安装失败解决方案

bug场景&#xff1a; 应用内升级下载apk完成后安装&#xff0c;vivo&#xff08;Android13&#xff09;手机会报解析包错误&#xff0c;7.0及以上的手机是没问题的。开始以为是v1,v2签名问题导致的&#xff0c;但是我用浏览器下载下来的安装包是能够正确安装的。排除v1,v2签名的…

蓝桥杯(刷题统计,特别数的和 C++)

思路&#xff1a; 1、这题很简单&#xff0c;分两种情况累加和 &#xff0c;&#xff08;day%60||day%70&#xff09;即周六周天加上b&#xff0c;其它时候加上a。 2、注意的点在于数据可能达到&#xff0c;所以数据类型首先要开long long。 3、因为数据达到&#xff0c;所以直…

上海市通过区块链技术攻关 构建数字经济可信安全技术底座

日前&#xff0c;上海市印发《上海区块链关键技术攻关专项行动方案&#xff08;2023—2025年&#xff09;》&#xff08;以下简称《行动方案》&#xff09;&#xff0c;提出到2025年&#xff0c;在区块链体系安全、密码算法等基础理论以及区块链专用处理器、智能合约、跨链、新…

Canvas系列绘制图片学习:绘制图片和渐变效果

我们现在已经可以绘制好多东西了&#xff0c;不过在实际开发中&#xff0c;绘制最多的当然是图片了&#xff0c;这章我们就讲讲图片的绘制。 绘制图片 绘制图片的API是drawImage&#xff0c;它的参数有三种情况&#xff1a; // 将图片绘制在canvas的(dX, dY)坐标处 context.…