【四数之和】python,排序+双指针

news2024/11/14 14:29:39

四层循环?(doge)

和【三数之和】题目很类似 

class Solution:
    def fourSum(self, nums: List[int], target: int) -> List[List[int]]:
        nums.sort()
        #a,b,c,d四个数,先固定两个数,那就是双指针问题了,令b=a+1,c=b+1,d=n-1
        ans=[]
        n=len(nums)
        #留3个位置啦,a
        for a in range(n-3):
            x=nums[a]
            #和三数之和那里一样,剪枝剪掉重复的
            if a>0 and x==nums[a-1]:
                continue
            #最小都大,可剪枝,后面肯定更大,所以可以退出了
            if x+nums[a+1]+nums[a+2]+nums[a+3]>target:
                break
            #最大都小,可剪枝,换个a
            if x+nums[-3]+nums[-2]+nums[-1]<target:
                continue
          #第二个数b
            for b in range(a+1,n-2):
                y=nums[b]
                #同样要跳过重复数字
                if b>a+1 and y==nums[b-1]:
                   continue
                #最小都大,打包退出了
                if x+y+nums[b+1]+nums[b+2]>target:
                   break
                #最大都小,换个b
                if x+y+nums[-2]+nums[-1]<target:
                   continue
                #然后可以开始双指针了
                c=b+1
                d=n-1
                while c<d:
                   sum=x+y+nums[c]+nums[d]
                   if sum>target:
                       d-=1
                       #相同的话结果也一样
                       while c<d and nums[d]==nums[d+1]:
                          d-=1
                   elif sum<target:
                       c+=1
                       #一样
                       while c<d and nums[c]==nums[c-1]:
                          c+=1
                   else:
                       ans.append([x,y,nums[c],nums[d]])
                       c += 1
                       #重复数字跳过
                       while c < d and nums[c] == nums[c - 1]:  
                          c += 1
                       d -= 1
                       while d > c and nums[d] == nums[d + 1]:  
                          d -= 1
        return ans

 

总结:

  1. 数组排序
  2. 四个数,我们可以设定2个数(a,b=a+1),两层循环
  3. c,d双指针(c=b+1,d逆序)
  4. 剪枝1:前4个数最小都大于target,后续肯定更大,break(a和b设定都要)
  5. 剪枝2:前+后共4数之和最大都比target小,只能跳过寻求更大的,continue(a和b设定都要)
  6. 剪枝3:重复数字跳过,和【三数之和】一样

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

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

相关文章

mysql实战——xtrabackup问题

备份恢复后启动不成功。 我测试了很多遍&#xff0c;最开始我以为备份后的数据文件没有pid造成的&#xff0c;所以一直测试 后来发现上图这样是正常的&#xff0c;mysqld_safe后就出现pid和sock文件 那启动失败的原因我认为是权限的问题&#xff0c;把数据文件目录权限全部设置…

ES的安装以及配置

环境&#xff1a;windows10、ES&#xff08;8.13.3&#xff09;、Kibana&#xff08;8.13.3&#xff09;、Logstash&#xff08;8.13.3&#xff09; 1.下载安装ES Download Elasticsearch | ElasticDownload Elasticsearch or the complete Elastic Stack (formerly ELK stac…

Vision Mamba论文阅读(主干网络)

这几天被Mamba刷屏了&#xff0c;又由于本人是做视觉方面任务的&#xff0c;固来看看mamba在视觉上的应用。 今天分享的是Vision Mamba: Vision Mamba: Efficient Visual Representation Learning with Bidirectional State Space Model 论文网址&#xff1a;https://arxiv.or…

二级建造师考试工作年限怎么计算?中霖教育怎么样?

二级建造师考试对于工作年限有明确的要求&#xff0c;在计算二级建造师考试所需的工作年限时&#xff0c;考生需依据其所取得的教育类型来分别处理。 对于非全日制学历背景的考生&#xff0c;相关专业工作年限包括从获取规定学历之前直至报考当年年末所从事的该项工作的整个时…

Anthropic绘制出了大型语言模型的思维图:大型语言模型到底是如何工作

今天&#xff0c;我们报告了在理解人工智能模型的内部运作方面取得的重大进展。我们已经确定了如何在 Claude Sonnet&#xff08;我们部署的大型语言模型之一&#xff09;中表示数百万个概念。这是对现代生产级大型语言模型的首次详细了解。这种可解释性的发现将来可以帮助我们…

【LSTM】LSTM cell的门结构学习笔记

文章目录 1. LSTM cell2. 门结构3. 门的公式4. 门的参数5. 重点关系厘清 1. LSTM cell 如文章 LSTM网络与参数学习笔记 中介绍, LSTM cell指的是一个包含隐藏层所有神经元的结构.但是LSTM门控单元的公式如何理解、门和LSTM cell神经元如何对应、门函数的参数维度、不同时间步不…

ChannelHandler和ChannelPipeline之一

目录 ChannelHandler Channel的生命周期 ChannelHandler的生命周期 ChannelInboundHandler接口 ChannelOutboundHandler接口 ChannelHandler适配器 资源管理 ChannelPipeline接口 修改ChannelPipeline 触发事件 ChannelHandler Channel的生命周期 Channel定义了一组和…

webgl入门-矩阵变换

矩阵变换 前言 变换有三种状态&#xff1a;平移、旋转、缩放。 当我们变换一个图形时&#xff0c;实际上就是在移动这个图形的所有顶点。 课堂目标 掌握图形变换的三种方式。可以对图像进行复合变换。 知识点 平移旋转缩放 第一章 平移 对图形的平移就是对图形所有顶点…

Golang | Leetcode Golang题解之第107题二叉树的层序遍历II

题目&#xff1a; 题解&#xff1a; func levelOrderBottom(root *TreeNode) [][]int {levelOrder : [][]int{}if root nil {return levelOrder}queue : []*TreeNode{}queue append(queue, root)for len(queue) > 0 {level : []int{}size : len(queue)for i : 0; i < …

521源码-免费教程-Linux系统硬盘扩容教程

本教程来自521源码&#xff1a;更多网站源码下载学习教程&#xff0c;请点击&#x1f449;-521源码-&#x1f448;获取最新资源 首先&#xff1a;扩容分区表 SSH登陆服务器输入命令&#xff1a;df -TH&#xff0c;获得数据盘相关信息 可以看到演示服务器的数据盘分区是&…

【区块链】fisco节点运维 更新ing

基于已完成的区块链系统与管理平台搭建工作&#xff0c;开展区块链节点的加入与退出运维工作&#xff0c;具体内容如下 以下只是举例子讲 如果有其他修改没举例出来可以留言 私信 主要以比赛出题的形式讲 区块链节点输出等级为警告级&#xff0c;并设置日志存储阈值为100MB并…

【408真题】2009-12

“接”是针对题目进行必要的分析&#xff0c;比较简略&#xff1b; “化”是对题目中所涉及到的知识点进行详细解释&#xff1b; “发”是对此题型的解题套路总结&#xff0c;并结合历年真题或者典型例题进行运用。 涉及到的知识全部来源于王道各科教材&#xff08;2025版&…

Science Robotics 封面论文:一种使用半球形纳米线阵列实现机器人视觉的超宽视场针孔复眼

研究背景 从生物复眼中汲取灵感&#xff0c;拥有一系列生动多样视觉功能特征的人工视觉系统最近脱颖而出。然而&#xff0c;这些人工系统中的大多数都依赖于可转换的电子设备&#xff0c;这些电子设备受到全局变形的复杂性和受限几何形状的影响&#xff0c;以及光学和探测器单元…

前端绘制流程节点数据

根据数据结构和节点的层级、子节点id&#xff0c;前端自己绘制节点位置和关联关系、指向、已完成节点等 <template><div><div>通过后端节点和层级&#xff0c;绘制出节点以及关联关系等</div><div class"container" ref"container&…

6.2 else if语句

本节必须掌握的知识点&#xff1a; 示例代码二十 代码分析 汇编解析 ■if语句表达形式3 if(表达式1) statement1 else if(表达式2) statement2 else if(表达式3) statement3 …… else statementN 解析&#xff1a; 如果表达式1非0&#xff0c;则执行statement1&#…

C++ const_cast学习

语法&#xff0c; const_cast<type_name>(expression) type_name是转换的类型&#xff0c;expression是被转换的对象或者表达式&#xff1b; const_case有两个功能&#xff0c;分别是去掉const和加上const&#xff0c;更多用于去掉const&#xff0c;修改被const修…

如何使用Android NDK将头像变成“遗像”

看完本文的标题&#xff0c;可能有人要打我。你说黑白的老照片不好吗&#xff1f;非要说什么遗像&#xff0c;我现在就把你变成遗像&#xff01;好了&#xff0c;言归正传。我想大部分人都用过美颜相机或者剪映等软件吧&#xff0c;它们的滤镜功能是如何实现的&#xff0c;有人…

乡村振兴的乡村旅游新模式:挖掘乡村旅游资源,创新旅游开发方式,打造乡村旅游新品牌,助力美丽乡村建设

目录 一、引言 二、乡村旅游资源挖掘 1、自然景观资源 2、人文历史资源 3、农业产业资源 三、旅游开发方式创新 1、多元化旅游产品 2、体验式旅游模式 3、智慧旅游建设 四、乡村旅游新品牌打造 1、品牌定位与策划 2、品牌传播与推广 3、品牌维护与提升 五、助力美…

如何使用Suno:免费的AI歌曲生成器

文章目录 Suno AI 是什么&#xff1f;Suno AI 如何工作&#xff1f;选择Suno AI的理由&#xff1a;核心优势易于操作多样化创作灵活的定价策略版权保障技术突破 如何使用Suno AI创作歌曲&#xff1f;第1步&#xff1a;注册Suno AI账户第2步&#xff1a;输入提示词创建第 3 步&a…

基于51单片机智能大棚浇花花盆浇水灌溉补光散热设计

一.硬件方案 本设计通过光敏电阻检测光照强度&#xff0c;然后A/D模块PCF8591处理后&#xff0c;将光照强度值实时显示在液晶上&#xff0c;并且可以按键控制光照的强度值&#xff0c;当光照低于设定的阈值&#xff0c;1颗白色高亮LED灯亮进行补光&#xff0c;光照高于设定的阈…