首页 > 编程语言 >python 四数之和 多种解法

python 四数之和 多种解法

时间:2023-12-28 16:32:25浏览次数:33  
标签:四数 target nums python length range right 解法 left

方法一:暴力枚举

暴力枚举方法比较容易想到,就是将四个数的组合进行遍历,找到符合要求的组合。

代码如下:

def fourSum(nums, target):
    length = len(nums)
    nums.sort()
    result = []
    for i in range(length - 3):
        for j in range(i + 1, length - 2):
            for k in range(j + 1, length - 1):
                for l in range(k + 1, length):
                    if nums[i] + nums[j] + nums[k] + nums[l] == target:
                        if [nums[i], nums[j], nums[k], nums[l]] not in result:
                            result.append([nums[i], nums[j], nums[k], nums[l]])
    return result

时间复杂度为 O(n4)。

方法二:双指针

双指针方法比较高效,可以将时间复杂度降至O(n3)。

首先对数组进行排序,然后固定两个数,再用双指针法找到另外两个数,使其和等于目标值。

代码如下:

def fourSum(nums, target):
    nums.sort()
    n = len(nums)
    res = []
    for i in range(n-3):
        # 跳过重复元素
        if i > 0 and nums[i] == nums[i-1]:
            continue
        # 当前最小值大于目标值或者当前最大值小于目标值,直接退出
        if nums[i] + nums[i+1] + nums[i+2] + nums[i+3] > target:
            break
        if nums[i] + nums[n-1] + nums[n-2] + nums[n-3] < target:
            continue
        for j in range(i+1, n-2):
            # 跳过重复元素
            if j > i+1 and nums[j] == nums[j-1]:
                continue
            # 当前最小值大于目标值或者当前最大值小于目标值,直接退出
            if nums[i] + nums[j] + nums[j+1] + nums[j+2] > target:
                break
            if nums[i] + nums[j] + nums[n-1] + nums[n-2] < target:
                continue
            # 双指针查找另外两个数
            left, right = j+1, n-1
            while left < right:
                total = nums[i] + nums[j] + nums[left] + nums[right]
                if total == target:
                    res.append([nums[i], nums[j], nums[left], nums[right]])
                    # 跳过重复元素
                    while left < right and nums[left] == nums[left+1]:
                        left += 1
                    while left < right and nums[right] == nums[right-1]:
                        right -= 1
                    left += 1
                    right -= 1
                elif total < target:
                    left += 1
                else:
                    right -= 1
    return res

标签:四数,target,nums,python,length,range,right,解法,left
From: https://blog.51cto.com/lzning/9016402

相关文章

  • `pip` 和 `pip3` 是 Python 的包管理工具,它们可以用来查找、下载、安装和卸载 Python
    `pip`和`pip3`是Python的包管理工具,它们可以用来查找、下载、安装和卸载Python包¹。这两个命令的区别主要取决于你的系统中安装的Python版本¹³⁴⁵:-如果你的系统中只安装了Python2,那么只有`pip`可以使用³。-如果你的系统中只安装了Python3,那么`pip`和`pi......
  • 羽毛球比赛python
    importrandomimportosprint("2班17向悦")#介绍比赛以及程序defprint_introduce():print("Thisisabadmintongamesimulationprogram")print("Theprogramrequirestwoplayers'abilityvalues(expressedindecimalsfrom0to1)&q......
  • python 将文件移入回收站
     python如果要删除一个文件,通常使用os.remove(filename)但是这样就直接从磁盘删除了。有些文件需要删除到回收站,以便误删后还能找回文件fromwin32com.shellimportshell,shellcondebug=Falsedefdeltorecyclebin(filename):print('deltorecyclebin',filename)......
  • python 数据存储,写入
    '''以下是同一个功能的代码段落,但是所耗时间却是天差地别'''st=time.time()#字典格式共耗时40sdsd={}#forkey,valueinfile_h.items():#ifvalueinhash_values:#dsd[value]=dsd.get(value,[])+[key]#......
  • python 文件读写权限 PermissionError: [Errno 13] Permission denied
    概述os.chmod()方法用于更改文件或目录的权限。语法chmod()方法语法格式如下:os.chmod(path,mode)参数path --文件名路径或目录路径。flags --可用以下选项按位或操作生成,目录的读权限表示可以获取目录里文件名列表,,执行权限表示可以把工作目录切换到此目录,删......
  • python word预设样式
    通过预设样式,来控制段落文本样式,来达到批量调节段落的格式样式。   大纲级别中:1级-9级代表的是标题级别。在word自动生成目录时才能正确生成。请正确设置docx:doc=Document()doc.styles["Normal"]  "Normal"表示正文的样式,[“Heading2”]表示2级标题的样式,当然......
  • 如何在 Python 程序中读取和写入文件
     在Python编程中,文件读写是一项常见的操作。通过文件读写,我们可以从文件中读取数据,或将数据写入到文件中。本文将介绍在Python程序中进行文件读写的基本操作。 读取文件 要读取文件,我们可以使用Python内置的`open()`函数。`open()`函数接受文件路径和打开模式作为参数,并返回一......
  • Python编程该怎么实现socket文件传输
    在网络编程中,Socket是一种常用的通信协议,它可以在计算机之间进行数据传输。在Python中,我们可以使用内置的socket模块来实现Socket文件传输。本文将介绍如何使用Python编程实现Socket文件传输的步骤和示例代码。步骤一:创建服务器端首先,我们需要创建一个服务器端来接收文件。以下是创......
  • python是否存在LTS这个概念
    LTS(Long-TermSupport,长期支持)是一个常见的概念,通常用于描述软件的发布策略。然而,与其他一些编程语言和软件不同,Python并没有官方的LTS版本。在本文中,我们将探讨Python的版本发布和支持策略,以及如何选择适合自己需求的Python版本。Python版本发布策略Python的版本发布策略是基于PEP......
  • Python 库和模块的概念有何不同
    在Python编程中,库(Library)和模块(Module)是两个常见的概念。虽然它们有一些相似之处,但在功能和使用方法上有一些区别。本文将介绍Python库和模块的概念,并解释它们之间的区别。模块的概念模块是Python中的一个基本概念,它是一个包含了变量、函数和类等定义的文件。一个模块可以包含多个......