LeetCode 15 三数之和

简介: LeetCode 15 三数之和

题目描述


给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。


注意:答案中不可以包含重复的三元组。


示例 1:


输入:nums = [-1,0,1,2,-1,-4]

输出:[[-1,-1,2],[-1,0,1]]

示例 2:


输入:nums = []

输出:[]

示例 3:


输入:nums = [0]

输出:[]


来源:力扣(LeetCode)

链接:https://leetcode-cn.com/problems/3sum


解题思路


使用双指针首先的要求就是有序数组,所以首先要对数组进行排序,其次,和两数之和思路一致。只不过需要先固定一个数,然后再使用双指针。所以循环固定每一个数,题目要求不能重复,所以对于重复的数值要去重处理


代码实现


class Solution:
    def threeSum(self, nums: List[int]) -> List[List[int]]:
        # 先排序
        nums.sort()
        res = []
        for i in range(len(nums)):
            # 去重
            if i>0 and nums[i] == nums[i-1]:
                continue
            # 固定一个数,剩下等同于找两数之和
            low = i + 1
            high = len(nums) - 1
            while low < high:
                tempsum = nums[low] + nums[high]
                if tempsum>-nums[i]:
                    high -= 1
                elif tempsum<-nums[i]:
                    low += 1
                else:
                    res.append([nums[i], nums[low], nums[high]])
                    # 答案去重,只移动一个指针
                    low += 1
                    high -= 1
                    while low<high and nums[low] == nums[low-1]:
                        low += 1
        return res
11
目录
相关文章
|
1月前
【LeetCode 16】15.三数之和(双指针法)
【LeetCode 16】15.三数之和(双指针法)
30 1
|
1月前
【LeetCode 17】5.7四数之和
【LeetCode 17】5.7四数之和
30 1
|
1月前
【LeetCode 15】15.三数之和
【LeetCode 15】15.三数之和
34 0
|
3月前
|
算法
LeetCode第15题三数之和
该文章介绍了 LeetCode 第 15 题三数之和的解法,通过先对数组排序,使用双指针减少循环层数,依次取一个元素作为第一个元素,通过双指针法寻找符合条件的三元组,并进行去重处理,同时总结了 2 数之和可使用哈希表解决,超过 2 数之和可使用双指针减少循环次数。
LeetCode第15题三数之和
|
3月前
|
算法
LeetCode第18题四数之和
该文章介绍了 LeetCode 第 18 题四数之和的解法,与三数之和类似,通过先排序,再用双指针确定坐标并去重的方式解决,关键是确定四个坐标,前两个通过两层循环确定,后两个通过首尾双指针确定,同时总结了双指针可减少循环次数,使解决方式更简单高效。
LeetCode第18题四数之和
|
5月前
|
算法 容器
【LeetCode刷题】三数之和、四数之和
【LeetCode刷题】三数之和、四数之和
|
6月前
[leetcode] 四数之和 M
[leetcode] 四数之和 M
|
6月前
|
Java C++ Python
leetcode-15:三数之和
leetcode-15:三数之和
39 0
|
6月前
|
Java 测试技术 C++
leetcode-18:四数之和
leetcode-18:四数之和
43 0
|
算法 测试技术
leetcode:15.三数之和
给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。
79 0