【LeetCode刷题】三数之和、四数之和

【LeetCode刷题】Day 6

  • 题目1:LCR 7.三数之和
    • 思路分析:
    • 思路1:排序+暴力枚举+set去重
    • 思路2:单调性+双指针+细节处理去重
  • 题目2:18.四数之和
    • 思路分析:
    • 思路1:排序+暴力枚举+set去重
    • 思路2:单调性+双指针+细节去重

在这里插入图片描述

题目1:LCR 7.三数之和

在这里插入图片描述

思路分析:

结合昨天的两数之和等与目标值,这道题的算法很简单了,所以这里重点讲一下一个关键细节要求:去重。

  1. 容器set去重,将数据导入set去重。
  2. 重,就是三个数都相同,当两个数字都相同,若要满足题意,则第三个数一定相同。根据这点我们在代码过程中体现

思路1:排序+暴力枚举+set去重

思路2:单调性+双指针+细节处理去重

  1. 排序;
  2. 固定一个最小元素;
  3. 双指针查找;

代码实现:

class Solution {
public:
    vector<vector<int>> threeSum(vector<int>& nums) {
        // 1.排序--升序
        sort(nums.begin(), nums.end());

        int n = nums.size();
        vector<vector<int>> vv; // 处理非单值返回
        // 2.固定一个最小元素
        for (int i = 0; i < n - 2;) {
            // 小优化:最小的数都大于0,后面就不存在了
            if (nums[i] > 0)
                return vv;
            // 3.双指针查找
            int left = i + 1, right = n - 1, target = -nums[i];
            while (left < right) {
                int sum = nums[left] + nums[right];
                if (sum == target) {
                    vv.push_back({nums[i], nums[left], nums[right]});
                    // 去重(1) 
                    left++, right--;
                    while (left < right && nums[left] == nums[left - 1])
                        left++;
                    while (left < right && nums[right] == nums[right + 1])
                        right--;
                } else if (sum > target)
                    right--;
                else
                    left++;
            }
            // 去重(2)
            i++;
            while (i < n - 2 && nums[i] == nums[i - 1])
                i++;
        }
        return vv;
    }
};

代码注释:
去重(1):找到一个答案后,在固定一个数的情况下继续寻找,只要再出现一个数和已得到的答案数组相同,则若要符合题意,第三个数一定相同。所以我们只需要防止在固定一个数的情况下,再出现一个数相同的情况。
去重(2)固定这个最小数结束后,下一个数如果相同,也会出现重复,所以也需要跳过与上一个数相同的元素。

LeetCode链接:LCR 7.三数之和

题目2:18.四数之和

在这里插入图片描述

思路分析:

和上面三个数求和一样,只是代码量的增加,很锻炼代码能力,思路和处理方式没有区别。
需要值得注意的是一个报错:类型溢出。

思路1:排序+暴力枚举+set去重

思路2:单调性+双指针+细节去重

代码实现:

class Solution {
public:
    vector<vector<int>> fourSum(vector<int>& nums, int target) {
        // 1.排序--升序
        sort(nums.begin(), nums.end());

        int n = nums.size();
        vector<vector<int>> vv; // 处理非单值返回
        // 2.固定一个最小元素
        for (int j = 0; j < n - 3;) {
            for (int i = j + 1; i < n - 2;) {
                // 3.双指针查找
                int left = i + 1, right = n - 1;
                long long target1 = target - nums[j];
                long long target2 = target1 - nums[i];
                while (left < right) {
                    int sum = nums[left] + nums[right];
                    if (sum == target2) {
                        vv.push_back(
                            {nums[j], nums[i], nums[left], nums[right]});
                        // 去重(1)
                        left++, right--;
                        while (left < right && nums[left] == nums[left - 1])
                            left++;
                        while (left < right && nums[right] == nums[right + 1])
                            right--;
                    } else if (sum > target2)
                        right--;
                    else
                        left++;
                }
                // 去重(2)
                i++;
                while (i < n - 2 && nums[i] == nums[i - 1])
                    i++;
            }
            // 去重(3)
            j++;
            while (j < n - 3 && nums[j] == nums[j - 1])
                j++;
        }
        return vv;
    }
};

LeetCode链接:18.四数之和

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

浅析智能体开发(第二部分):智能体设计模式和软件架构

大语言模型&#xff08;LLM&#xff09;驱动的智能体&#xff08;AI Agent&#xff09;展现出许多传统软件所不具备的特征。不仅与传统软件的设计理念、方法、工具和技术栈有显著的差异&#xff0c;AI原生&#xff08;AI Native&#xff09;的智能体还融入了多种新概念和技术。…

SparkSQL入门

1、SparkSQL是什么&#xff1f; 结论&#xff1a;SparkSQL 是一个即支持 SQL 又支持命令式数据处理的工具 2、SparkSQL 的适用场景&#xff1f; 结论&#xff1a;SparkSQL 适用于处理结构化数据的场景&#xff0c;而Spark 的 RDD 主要用于处理 非结构化数据 和 半结构化数据 …

【撸源码】【ThreadPoolExecutor】线程池的工作原理深度解析——上篇

1. 前言 线程池这块&#xff0c;作为高频面试题&#xff0c;并且实际使用场景巨多&#xff0c;所以出了这篇文章&#xff0c;一块来研究一下线程池的实现原理&#xff0c;运行机制&#xff0c;从底层深挖&#xff0c;不再局限于面试题。 2. 线程池概览 2.1. 构造器 线程池总…

Leecode热题100---55:跳跃游戏(贪心算法)

题目&#xff1a; 给你一个非负整数数组 nums &#xff0c;你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标&#xff0c;如果可以&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 贪心算…

数据采集与AI分析,亮数据+通义千问助力跨境电商前行

文章目录 前言工具介绍数据采集工具亮数据Web Scraper IDE亮点 AI数据分析工具 实战电商数据采集与AI分析电商平台选取数据采集完全托管数据集自定义数据集 AI分析 价格总结 前言 随着信息技术的飞速发展&#xff0c;数据采集与AI分析在跨境电商中扮演着越来越重要的角色。通过…

Langchain:数据连接封装、缓存封装和LCEL学习和探索

&#x1f335; 目录 &#x1f335; &#x1f60b; 数据连接封装 &#x1f354; 文档加载器&#xff1a;Document Loaders 文档处理器&#xff1a;TextSplitter 向量数据库与向量检索 总结 &#x1f349; 缓存封装&#xff1a;Memory &#x1f3d6;️ 对话上下文&#xf…

urllib_post请求_百度翻译

打开百度翻译&#xff0c;并打开控制台&#xff0c;输入spider&#xff0c;然后在网络中找到对应的接口&#xff0c;可以看出&#xff0c;该url是post请求 在此案例中找到的接口为sug&#xff0c;依据为&#xff1a; 可以看到&#xff0c;传递的数据为kw : XXX&#xff0c; 所…

Hadoop3:HDFS的Fsimage和Edits文件介绍

一、概念 Fsimage文件&#xff1a;HDFS文件系统元数据的一个永久性的检查点&#xff0c;其中包含HDFS文件系统的所有目 录和文件inode的序列化信息。 Edits文件&#xff1a;存放HDFS文件系统的所有更新操作的路径&#xff0c;文件系统客户端执行的所有写操作首先 会被记录到Ed…

移动云ECS主机:未来云计算的驱动力

文章目录 前言一、移动云云主机ECS云主机ECS产品优势云主机ECS产品功能云主机ECS应用场景 二、移动云云主机ECS选购三、移动云云主机ECS配置四、移动云云主机ECS牛刀小试五、移动云云主机ECS安装部署消息中间件RocketMQ云主机ECS安装RocketMQ云主机ECS配置RocketMQ云主机ECS启动…

如何做好云安全防护

随着云计算技术的迅猛发展和普及&#xff0c;越来越多的企业和个人选择将数据和业务应用迁移到云平台&#xff0c;以享受其带来的高效、便捷和可扩展性。然而&#xff0c;云环境的复杂性和开放性也带来了前所未有的安全挑战。如何确保云环境中的数据安全&#xff0c;成为了每一…

【Linux】lsblk 命令使用

lsblk 命令 lsblk 是一个在 Linux 系统中用来列出所有可用的块设备&#xff08;例如硬盘驱动器、固态硬盘、USB 驱动器等&#xff09;的命令行工具。它提供了关于这些设备的详细信息&#xff0c;包括它们的名称、大小、类型、挂载点等。 语法 lsblk [选项] 选项及作用 执行…

LabVIEW高温往复摩擦测试系统中PID控制

在LabVIEW开发高温往复摩擦测试系统中实现PID控制&#xff0c;需要注意以下几个方面&#xff1a; 1. 系统建模与参数确定 物理模型建立: 首先&#xff0c;需要了解被控对象的物理特性&#xff0c;包括热惯性、摩擦系数等。这些特性决定了系统的响应速度和稳定性。实验数据获取…

PVE 虚拟机环境下删除 local-lvm分区

1、删除逻辑卷 lvremote pve/data 2、扩展逻辑卷 lvextend -l 100%FREE -r pve/root 3、 修改存储目录内容 点击 Datacenter - Storage &#xff08;1&#xff09;删除local-lvm分区 &#xff08;2&#xff09;编辑local分区&#xff0c;在内容一项中勾选所有可选项。

黑龙江等保测评深入理解

“没有网络安全&#xff0c;就没有国家安全”&#xff0c;等级保护测评是指按照网络安全系统制定的一系列的防护过程&#xff0c;对已经有的和即将上线的商业服务的基础设施&#xff08;系统&#xff0c;数据库&#xff0c;中间件等&#xff09;所做的一系列的检查&#xff0c;…

Thinkphp3.2.3网站后台不能访问如何修复

我是使用Thinkphp3.2.3新搭建的PHP网站&#xff0c;但是网站前台可以访问&#xff0c;后台访问出现如图错误&#xff1a; 由于我使用的Hostease的Linux虚拟主机产品默认带普通用户权限的cPanel面板&#xff0c;对于上述出现的问题不清楚如何处理&#xff0c;因此联系Hostease的…

第3天 Web源码拓展_小迪网络安全笔记

1.关于web源码目录结构 #数据库配置文件 后台目录 模板目录 数据库目录 1.1数据库配置文件: 1.1就拿wordpress来说,先到官网下载源码:Download – WordPress.org,解压源码之后: 2.2找到目录下名为 wp-config-sample.php的文件,这就是数据库配置文件: 设想: 我们在渗透…

如何将word插入的形状转成图片(高清)导出?

文章目录 前言&#xff08;不感兴趣可以直接看正文&#xff09;一、新建画布二、插入形状三、复制四、粘贴为图片五、另存为总结 前言&#xff08;不感兴趣可以直接看正文&#xff09; 因为我毕业论文里的图片刚开始使用画图软件画的&#xff0c;但到后期论文即将胶印的时候&a…

Agent将如何影响和重塑企业服务市场?

在Sam Altman、吴恩达等几位AI业界人士的“带货”之下&#xff0c;Agent作为新一代生产力工具的巨大潜力和广泛的应用前景终于“破圈”、被更多的看到和讨论。其实在2023年时&#xff0c;我就预测过&#xff0c;2024年会是大语言模型应用落地和Agent的元年。 为什么Agent会是大…

从零到一:手把手教你将项目部署上线-环境准备

部署步骤 引言1.Java环境配置2.ngnix安装好书推荐 引言 将自己的项目从本地开发环境顺利部署上线&#xff0c;是每个开发者必经的里程碑。今天&#xff0c;我们就从零开始&#xff0c;一步一步教你如何将手中的项目部署到线上&#xff0c;让全世界见证你的创造力。 首先&#x…