LeetCode:三数之和&四数之和

2023-11-19

1.方法概述

(1)前期处理
三数之和用三个指针,四数之和用四个指针,最开始都要进行从小到大的排序。

(2)粗处理
编写三数之和的时候第一个指针刚开始指向所给数组的第一个元素;第二个指针记为L指针,初始指向第一个指针所指元素的下一个元素;第三个指针记为R,初始指向所给数组的最后一个元素。当这三个指针所指元素之和小于target时L向右移一位,这样就使三个元素的和变大了;当这三个指针所指元素之和大于target时L向左移一位,这样就使三个元素的和变小了;当三个元素之和等于target时就添加进要返回的数组里面。这里第一个指针要对数组中除最后两个元素的数组中的其他元素进行遍历。

编写四数之和的时候第一个指针刚开始指向所给数组的第一个元素;第二个指针刚开始指向第一个指针所指元素的下一个元素;第三个指针记为L指针,初始指向第二个指针所指元素的下一个元素;第四个指针记为R,初始指向所给数组的最后一个元素。当这四个指针所指元素之和小于target时L向右移一位,这样就使三个元素的和变大了;当这四个指针所指元素之和大于target时L向左移一位,这样就使三个元素的和变小了;当四个元素之和等于target时就添加进要返回的数组里面。这里第一个指针要对除了最后三个元素的数组中的其他元素进行遍历,第二个指针要对除了第一个和最后两个元素的数组中的其他元素进行遍历。

(3)去重处理
仅通过以上两个步骤处理后选出来的元素组合可能会有重复的,所以需要去重处理,但去重处理不是在最后才进行的,而是在上述处理过程中就进行了处理。具体方法总结为:当只有一个箭头变化的时候箭头变化前后所指的元素不能是相同的,当有多个箭头变化的时候,单个箭头变化前后所指的元素可以是相同的。

2.代码

三数求和;

class Solution:
    def threeSum(self, nums):
        n=len(nums)
        res=[]
        if(not nums or n<3):
            return []
        nums.sort()
        res=[]
        for i in range(n):
            if(nums[i]>0):
                return res
            if(i>0 and nums[i]==nums[i-1]):  #去重操作
                continue
            L=i+1
            R=n-1
            while(L<R):
                if(nums[i]+nums[L]+nums[R]==0):
                    res.append([nums[i],nums[L],nums[R]])
                    while(L<R and nums[L]==nums[L+1]):#去重操作
                        L=L+1
                    while(L<R and nums[R]==nums[R-1]):#去重操作
                        R=R-1
                    L=L+1
                    R=R-1
                elif(nums[i]+nums[L]+nums[R]>0):
                    R=R-1
                else:
                    L=L+1
        return res

if __name__ == '__main__':
    solution = Solution()
    nums = [-1,0,1,2,-1,-4]
    result = solution.threeSum(nums)
    print(result)


四数求和:

class Solution:
    def fourSum(self, nums, target):
        n = len(nums)
        nums.sort()
        result = []
        for a in range(0, n - 3):
            if a > 0 and nums[a] == nums[a - 1]:
                continue
            for b in range(a + 1, n - 2):
                if b > a+1 and nums[b] == nums[b - 1]:#去重操作
                    continue
                c = b + 1
                d = n - 1
                while d > c:
                    if (nums[a] + nums[b] + nums[c] + nums[d]) > target:
                        d = d - 1
                    elif nums[a] + nums[b] + nums[c] + nums[d] < target:
                        c = c + 1
                    else:
                        result.append([nums[a], nums[b], nums[c], nums[d]])
                        while c < d and nums[c+1] == nums[c]:#去重操作
                            c = c+1
                        while c < d and nums[d-1] == nums[d]:#去重操作
                            d = d-1
                        c = c+1
        return result


if __name__ == '__main__':
    solution = Solution()
    # nums = [1, 0, -1, 0, -2, 2]
    # nums = [0, 0, 0, 0]
    nums = [-1, 0, 1, 2, -1, -4]

    target = -1
    result = solution.fourSum(nums, target)
    print(result)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

LeetCode:三数之和&四数之和 的相关文章

  • 竞赛真题:约瑟夫环

    Hello 这是我的新专辑 这个专辑中是竞赛真题 所有真题的解将会用Python C C Java JS和Go几种语言给大家实现 现在 开始我们的第一个竞赛题目 约瑟夫环 目录 题目内容 题目分析 题目思路 Python代码 C 代码 C代
  • Golang template 加载外部样式 问题

    前端形如 后端形如 http Handle css http FileServer http Dir static 报错形如 Refused to apply style from http localhost 9999 css mysty
  • 对象锁和类锁的个人理解

    一 对象锁 1 解释 对象锁 顾名思义锁的是对象实例 但程序中同一个类可以有多个实例化对象 所以对象锁只能锁住同一个实例化对象 再两个或多个实例化对象之间不起作用 2 使用方法 1 锁住实体里的非静态变量 synchronized 变量名
  • Error Domain=NSCocoaErrorDomain Code=3840 “Invalid value around character 4104.

    使用Alamofire发了一个GET请求 出现了如下错误 responseSerializationFailed reason Alamofire AFError ResponseSerializationFailureReason jso
  • 专科程序员与本科程序员的区别大吗?

    不管专科还是本科 我们先说说校园内现状 老师自己的水平是否足够 首先就是老师是否达到了一定的水平 其次就是老师是否有更多的精力教学生 水平好的老师忙着接项目发表论文 有没有更多的时间放在学生身上 再说学生 真正学习的时间有多少 参加学生会

随机推荐

  • 边坡安全监测系统的主要内容

    边坡安全监测系统是边坡安全掌握及其支护结构维护决策系统的支撑条件之一 建立结构健康监测系统的目的在于确定边坡结构的安全性 监测支护结构的承载能力 运营状态和耐久性能等 对边坡稳定性进行有效监控 修正在施工过程中各种影响支护结构的参数误差对支
  • Unet实现眼底图像血管分割(三)

    1 retinaNN training py 模型Model的compile方法 model compile self optimizer loss metrics None loss weights None sample weight
  • 如何在Excel中制作曲线图

    When you create a line graph in Excel the lines are angled and have hard edges by default You can easily change this to
  • 电脑上安装多个JDK版本时如何自由切换

    文章目录 前言 一 安装JDK 二 设置系统变量 2 1 设置JAVA HOME 2 1 1 添加JAVA HOME VERSION 2 2 设置Path 2 2 1 添加Path 三 验证结果 前言 使用java的过程中 难免会遇上JDK
  • JAVA中APIcalendar的用法,Java Calendar日历类原理及使用方法

    这篇文章主要介绍了Java Calendar日历类原理及使用方法 文中通过示例代码介绍的非常详细 对大家的学习或者工作具有一定的参考学习价值 需要的朋友可以参考下 java util Calendar 是日历类 在Date后出现 替换掉了许
  • 常用头文件

    常用头文件 cstring cstring对应char 类 1 strlen char a 作用是获得字符串长度 不包括串尾符 比如 abc 0 的长度就是3 2 strcmp char a char b 就是比较两个字符串的字典序 小于返
  • Window.devicePixelRatio(设备像素比)

    Window 接口的devicePixelRatio返回当前显示设备的物理像素分辨率与CSS像素分辨率之比 此值也可以解释为像素大小的比率 一个CSS像素的大小与一个物理像素的大小 简单来说 它告诉浏览器应使用多少屏幕实际像素来绘制单个CS
  • Leetcode646. 最长数对链

    Every day a Leetcode 题目来源 646 最长数对链 解法1 动态规划 定义 dp i 为以 pairs i 为结尾的最长数对链的长度 初始化时 dp 数组需要全部赋值为 1 计算 dp i 时 可以先找出所有的满足 pa
  • 阿里云 linux 的nginx 配置uni-app的H5前端项目vue,后端接口阿里云。

    背景 vue项目调用接口是阿里云的 H5网站也要部署到阿里云 2个不同的服务器 需要做nginx部署与api代理 1 端口配置 首先当然是买个阿里云服务器 这里是配置是linux系统 配置访问的域名 再接着 给网站配置需要的端口 如下 配置
  • Git工具使用全解

    Git工具使用全解 文章目录 Git工具使用全解 1 企业开发中的版本控制器 2 Git工具的使用场景 3 Git工具操作流程 三板斧操作 4 Git工具的安装与常用命令 4 1 Git的安装 4 2 Git基本操作指令 5 Git工具常见
  • 2023/2/14 大数据实习日志

    今日学习内容 一 VMware虚拟机安装部署CentOS7 链接 VMware虚拟机安装部署CentOS7 Moba远程连接 克隆 步骤 二 Docker入门 第一章内容 什么是docker 为什么使用docker docker与虚拟化 牛
  • python: SHA256算法的实现和消息的哈希散列值计算

    目录 1 SHA256 2 实现原理 2 1 消息预处理 2 2 使用的常量和循环移位函数 2 3 主循环 3 结果 4 对中文编码 1 SHA256 SHA256是SHA 2下的一个子算法 与之类似的还有SHA224 SHA384 SHA
  • ChatGPT爆火,对制造业销售增长的AI建议

    北京时间2023年2月8日 微软宣布推出由ChatGPT支持的最新版本人工智能搜索引擎Bing 必应 和Edge浏览器 ChatGPT的问世再次掀起AI热潮 接下来让我们一起试试与ChatGPT对话 看看传说中上知天文下知地理的他是如何回答
  • ChatGPT驱动下,网站AI客服该如何进步和创新

    在ChatGPT这个AI智能的驱动下 网站AI客服在进步和创新方面有很多潜力 由于GPT模型的强大语言处理能力和智能对话技巧 使得网站AI客服能够更准确和流畅地与用户交互 looklook今天总结了一些网站AI客服智能的进步和创新方向 以供
  • PLSQL安装步骤

    1 安装 下载PLSQL安装包 解压 默认安装 选择自己需要的版本安装 一路默认即可 2 添加客户端路径 解压instantclient 11 2 rar 放到自定义目录下 我是放在D盘下的Tools目录 没有配置客户端 是无法登陆的 所以
  • 什么是LLM大语言模型?

    什么是LLM大语言模型 大语言模型 英文 Large Language Model 缩写LLM 也称大型语言模型 是一种人工智能模型 旨在理解和生成人类语言 它们在大量的文本数据上进行训练 可以执行广泛的任务 包括文本总结 翻译 情感分析等
  • 美化你的Typora —— 关于MarkDown文档和newsprint.css的一点折腾

    这篇文章起源于我想美化一下Markdown样式 我在Typora官方的newsprint风格的基础上对其css进行了一系列的微调 提升了美观度和易用性 解决了如图像缩放分辨率降低 中英文字体设置等问题 文章目录 0 美化前后效果对比 1 代
  • [转] 解读IntelliJ IDEA的优缺点

    昨天去TW参加了pre class 就是类似于新员工入职前的培训 有很多很cool的东西 给我印象最深的就是IntelliJ IDEA了 coder么 刚才在网上搜了搜 发现很少有她的介绍资料 所以贴过来一个让大家看看 文章中有一句话值得大
  • ucGUI3.9版本快速移植构建

    ucGUI3 9版本快速移植构建 移植前提条件 涉及文件 移植过程 修改绘制驱动文件 修改配置文件 打包进工程 涉及的资源获取 在之前的博客中移植了STemwin5 32版本的 最近更换了 GD芯片所以STemwin没法用了 只有移植emw
  • LeetCode:三数之和&四数之和

    1 方法概述 1 前期处理 三数之和用三个指针 四数之和用四个指针 最开始都要进行从小到大的排序 2 粗处理 编写三数之和的时候第一个指针刚开始指向所给数组的第一个元素 第二个指针记为L指针 初始指向第一个指针所指元素的下一个元素 第三个指