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

news2024/11/16 22:52:58

【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.四数之和

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

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

相关文章

力扣HOT100 - 287. 寻找重复数

解题思路&#xff1a; 快慢指针 第一步&#xff0c;慢指针每次移动一步&#xff0c;快指针每次移动两步&#xff0c;直到它们相遇。这一步保证了它们在环中相遇。 接下来&#xff0c;将其中一个指针&#xff08;快指针或慢指针&#xff09;重置到起点&#xff08;即数组的第一…

想要修改Excel表格内容,怎么移除编辑权限?

在使用Excel进行数据处理和管理时&#xff0c;我们经常会遇到需要保护工作表以防止误操作的情况。有时可能碰到“被保护单元格不支持此功能”的提示&#xff0c;本文将详细介绍这个问题的解决方案&#xff0c;帮助你取消单元格保护&#xff0c;使用所需的功能。 一、取消单元格…

LoFTR 笔记和理解

文章目录 解决什么实际问题&#xff1f;算法结构 解决什么实际问题&#xff1f; 主要是解决传统特征匹配和之前的基于深度学习特征匹配不稳定和不准确的问题。传统的特征匹配方法主要依赖于特征点的检测&#xff0c;如果特征点的检测出现问题&#xff0c;比如某一些的关键点没…

BEVFusion中特征融合模块是如何应用通道注意力机制的?

BEVFusion总体结构如下图所示&#xff0c;在相机和lidar的输入都已经被网络提取特证之后&#xff0c;就要对两种特征进行融合&#xff0c; 在BEV Fusion中图像支路得到的是 Camera BEV Features&#xff0c;点云支路得到的是 LiDAR BEV Features&#xff0c;除了2d和3d各自的检…

C语言指针的介绍1

前言 嗨&#xff0c;我是firdawn&#xff0c;本章将简单介绍&#xff0c;指针对应的实际意义&#xff0c;以及指针的简单使用和如何避免野指针&#xff0c;下面的图是本章的思维导图&#xff0c;那么&#xff0c;让我们开始吧&#xff01; 一&#xff0c;内存和地址 1.1 程…

使用 CapSolver API 服务解决 Arkose Labs FunCaptcha 验证码

使用 CapSolver API 服务解决 Arkose Labs FunCaptcha 验证码 FunCaptcha 以其复杂的图像验证而闻名&#xff0c;对自动化系统构成了巨大的挑战。CapSolver 的 API 服务利用先进的 AI 技术轻松应对和解决 FunCaptcha 挑战。本指南探讨了 CapSolver 如何实现无缝自动化&#xff…

基于SpringBoot的社区医院管理系统

基于SpringBootVue的社区医院管理系统的设计与实现~ 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringBootMyBatis工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 首页 医生预约 管理员界面 医生界面 摘要 基于Spring Boot的社区医院管理系…

如何通过IP地址来防范“杀猪盘”?

随着人工智能技术的逐渐成熟&#xff0c;给人们的生活带来了很多方面&#xff0c;但同时犯罪分子也紧跟“潮流”&#xff0c;据报道&#xff0c;以东南亚为主要地区的犯罪集团聚集地已开始使用人工智能聊天机器进行“杀猪盘”行动。这一现象导致国内诈骗案件持续发生&#xff0…

vue2好用的日期选择插件vue2-datepicker

中文文档&#xff1a;vue2-datepicker/README.zh-CN.md at master mengxiong10/vue2-datepicker GitHub npm下载地址&#xff1a; npm install vue2-datepicker --save 示例&#xff08;去除默认样式&#xff09; <style scoped> .datePicker{width: 15vw;backgrou…

用Sora等AI视频大模型赚钱的48种方式

不废话&#xff0c;直接上干货&#xff01; \1. 定制视频创作服务&#xff1a;为寻找在社交媒体平台上脱颖而出的企业和个人提供定制视频制作服务&#xff0c;或用于个人使用。根据特定主题或行业量身定制视频&#xff0c;例如旅行、教育或产品营销。 \2. **教育内容包&#…

python期末作业:批量爬取站长之家的网站排行榜数据并保存,数据分析可视化

爬虫作业,含python爬取数据和保存文件,数据分析使用pyecharts做数据可视化 整体上分析网站的排名,直观看各个网站的热度。 数据分析之后大致的效果: 整个项目分为两个大的部分,第一部分就是抓取网站排名数据,然后保存为Excel、csv等格式,其次就是从文件中…

【linux特殊符号】

文章目录 学习目标一、Linux的特殊符号1.系统变量2.引号 总结 学习目标 1.学会查看系统变量 2.学会各种引号 3.一、Linux的特殊符号 1.系统变量 windows系统变量&#xff1a;echo %path% linux系统变量&#xff1a;echo $PATH2.引号 " " 双引号&#xff0c;换行…

centos ping: www.baidu.com: 未知的名称或服务

可以检查 /etc/sysconfig/network-scripts/ifcfg-ens33和/etc/resolv.conf这两个文件里面的内容&#xff1a; 这个就不多说了&#xff0c;可以看教程合集的000文档 还有一个原因就是路由网关没有配置&#xff1a; netstat -rn 如果GATEWAY这里没有显示你的网关信息&#xff08…

有道:一季度业绩超市场预期,生成式AI商业化落地进程加快

5月23日&#xff0c;教育科技公司网易有道&#xff08;NYSE&#xff1a;DAO&#xff09;公布了2024年第一季度未经审计的财务报告。报告期内&#xff0c;受益于“AI”加“教育”双轮驱动&#xff0c;业绩表现超市场预期&#xff0c;业务健康度大幅改善。 财报显示&#xff0c;…

体量小但增速快,国内OTA平台与国际巨头差在哪?

5月3日&#xff0c;Booking、Expedia等国际OTA平台相继发布2024年第一季度财报。5月21日&#xff0c;携程发布2024年第一季度财报。至此&#xff0c;国内外主要OTA平台一季度成绩单均已披露。 受益于全球旅游市场复苏&#xff0c;三家OTA平台一季度营收同比均正向增长。增长之…

Unity LayerMask避坑笔记

今天使用Physics2D.OverlapAreaNonAlloc进行物理检测时候&#xff0c;通过LayerMask.NameToLayer传入了int值的LayerMask&#xff0c;结果一直识别不到&#xff0c;经过Debug才找到问题&#xff0c;竟是LayerMask的“值”传输有问题&#xff0c;记录一下。 直接贴代码输出结果&…

最大负载1kg!高度模块化设计!大象机器人智能遥控操作机械臂组合myArm MC

引入 近年来&#xff0c;市面上涌现了许多类似于斯坦福大学的 Alopha 机器人项目&#xff0c;这些项目主要通过模仿人类的运动轨迹来进行学习&#xff0c;实现了仿人类的人工智能。Alopha 机器人通过先进的算法和传感技术&#xff0c;能够精确复制人类的动作&#xff0c;并从中…

ViLT学习

多模态里程碑式的文章&#xff0c;总结了四种多模态方法&#xff0c;根据文字和图像特征特征抽取方式不通。 文章的贡献主要是速度提高了&#xff0c;使用了数据增强&#xff0c;文本的mask 学习自b站朱老师的论文讲解

搭建电商电子商务平台有哪些好用的电商API数据采集接口?

电商API接口主要用于帮助开发者将电商功能集成到自己的应用程序中&#xff0c;实现诸如商品检索、商品价格数据获取、订单处理、支付、物流跟踪等功能。以下是一些常用的电商API接口提供商&#xff1a; 主流电商平台API&#xff1a; 淘宝开放平台&#xff1a;提供淘宝、天猫、…

网络安全架构之零信任安全

网络安全架构之零信任安全 文章目录 网络安全架构之零信任安全零信任安全时代背景安全世界“新旧时代”各种攻击风险层出不穷网络安全边界逐渐瓦解内外部威胁愈演愈烈 零信任架构零信任的理念在不可信的网络环境下重建信任构建自适应内生安全机制以身份为基石业务安全访问持续信…