首页 > 其他分享 >代码随想录 -- 哈希表 -- 四数之和

代码随想录 -- 哈希表 -- 四数之和

时间:2024-08-28 19:52:47浏览次数:14  
标签:四数 target nums -- 随想录 len continue right left

18. 四数之和 - 力扣(LeetCode)

思路:(与三数之和类似,在外面加一层循环)

        1. 先将 nums 按升序排序

        2. 初始状态:k = 0,i = k+1,left = i+1,right = len(nums)-1

        3. 进入第一层 for 循环:

        如果 nums[k]>0 and target>0 and nums[k]>targrt 时,不存在满足条件的四元组。(剪枝)

        如果 nums[k]==nums[k-1] and k>0 时,continue。(去重)

        4. 进入第二层 for 循环:

        如果 nums[i]==nums[i-1] and i>k+1 时,continue。(去重)

        5. 进入第三层 while 循环:

        当 left<right 时,计算 sum = nums[k]+nums[i]+nums[left]+nums[right],

        如果 sum>target,right-=1;如果 sum<target,left+=1;否则说明 sum==target,符合题意,将此四元组加入res。

        继续去重:如果 nums[left]==nums[left+1],left+=1;如果 nums[right]==nums[right-1],right-=1。

        left+=1,right-=1

class Solution(object):
    def fourSum(self, nums, target):
        res = []
        nums.sort()
        for k in range(len(nums)):
            if nums[k]>0 and target>0 and nums[k]>target:
                break
            if k>0 and nums[k]==nums[k-1]:
                continue
            for i in range(k+1,len(nums)):
                if i>k+1 and nums[i]==nums[i-1]:
                    continue
                left,right=i+1,len(nums)-1
                while left<right:
                    sum = nums[k]+nums[i]+nums[left]+nums[right]
                    if sum>target:
                        right-=1
                    elif sum<target:
                        left+=1
                    else:
                        res.append([nums[k],nums[i],nums[left],nums[right]])
                        while left<right and nums[right]==nums[right-1]:
                            right-=1
                        while left<right and nums[left]==nums[left+1]:
                            left+=1 
                        left+=1
                        right-=1
        return res

标签:四数,target,nums,--,随想录,len,continue,right,left
From: https://blog.csdn.net/weixin_56989647/article/details/141648083

相关文章

  • Prism:区域(Region)
    Prism:区域(Region)什么是区域?区域(Region)用于实现模块化应用程序中的视图组织和管理。区域允许您在一个或多个视图容器中动态地加载和卸载视图,从而实现灵活的内容布局和管理。区域的用途动态内容加载:您可以将不同的视图加载到同一个区域中,这样可以实现在运行时动态改变应......
  • 「2.1」收集雪花
     「2.1」收集雪花题目描述不同的雪花往往有不同的形状。在北方的同学想将雪花收集起来,作为礼物送给在南方的同学们。一共有n个时刻,给出每个时刻下落雪花的形状,用不同的整数表示不同的形状。在收集的过程中,同学们不希望有重复的雪花。你可以从任意a时刻开始,在b时刻停......
  • 算数、赋值、单目操作符介绍
    操作符的介绍目录算数操作符1.1:+和-1.2:*1.3:/1.4:%赋值操作符2.1:连续赋值2.2:复合赋值符单目操作符3.1++和--3.1.1:前置++和前置--3.1.2:后置++和后置--3.2:+和-算数操作符算数操作符包含以下几个符号:1:+(加号)2:-(减号)3:*(乘号)4:/(除号)5:%(求余号)这五种符号在C语言运算中起......
  • 重头开始嵌入式第二十九天(Linux系统编程 网络通信 tcp)
    目录1.常见网络模型1.bs2.p2p3.cs2.网络编程之TCP(传输控制协议)1.TCP模型2.服务器端:1.socket();2、bind();3、listen();4、accept();5、接受函数:/发送函数:6、close()  ===>关闭指定的套接字id;3.客户端:1.connect();2、send()3、客户端信息获取4、客户端的信息bin......
  • 【人工智能时代】- 大模型技术的发展与实践
    一、大模型的概念大型语言模型,也称大语言模型、大模型(LargeLanguageModel,LLM;LargeLanguageModels,LLMs)。大语言模型是一种深度学习模型,特别是属于自然语言处理(NLP)的领域,一般是指包含数干亿(或更多)参数的语言模型,这些参数是在大量文本数据上训练的,例如模型GPT-3,PaLM,LLaMA......
  • Spring(基础篇1)
    本篇博客讲解Spring框架里面的通过xml方式对Bean的基础配置,实例化方式,以及DI的注入,偏于基础。一.Bean的基础配置  Id属性andClass属性<beanid="userService"class="com.itheima.Service.Impl.UserServiceImpl"></bean> Scope属性Scope属性取值含义singleto......
  • docker安装ES详解(elasticsearch)
    一、安装ES1.打开指定目录cd/usr/local/docker/2.创建并打开ES目录mkdirescdes/3.准备相关文件夹(1).创建挂载数据mkdirdata(2).创建配置mkdirconfig(3).创建插件mkdirplugins(4).权限赋值chmod-R777/usr/local/docker/es/(5).打开config目录cdconf......
  • Docker安装Nacos(docker2.0.4)
    一、准备工作1.打开目录cd/usr/local/docker/2.创建nacos文件夹mkdirnacos3.打开目录cdnacos/4.创建文件夹configmkdirconfig5.打开文件夹cdconfig/6.初始换数据库在nacos需要连接的数据库当中,创建数据库nacos_config字符集类型为utf8mb4在数据库nacos_con......
  • 【2024-08-27】学前准备
    20:00仅仅把得到别人的爱当成最高目标,你就不可能获得成功。想让别人真正爱你,只有让自己成为值得爱的人。                                                 ——M·斯科......
  • LLM问答[2]-毅力号和机智号
    摘要使用各种LLM模型进行问答,不保证准确。关键信息模型:qwen2:7b后端:ollama前端:chatbox提示词:小红书的风格是:很吸引眼球的标题,每个段落都加emoji,最后加一些tag。请用小红书风格问答问题[https://zh.wikipedia.org/wiki/机智号][https://zh.wikipedia.org/w......