Leetcode 15.三数之和

解法:两处去重+二分法

python 复制代码
class Solution:
    def threeSum(self, nums: List[int]) -> List[List[int]]:
        nums.sort()
        res = []
        visited_numi = [] # 第一处去重
        for i in range(len(nums) - 2):
            if nums[i] not in visited_numi:
                visited_numi.append(nums[i])
                sortnums = nums[i+1: ]
                l, r = 0, len(sortnums) - 1
                while r > l:
                    if sortnums[l] + sortnums[r] == - nums[i]: 
                        res.append([nums[i], sortnums[l], sortnums[r]])
                        while l < r and sortnums[l + 1] == sortnums[l]: l += 1 # 第二处去重
                        while l < r and sortnums[r - 1] == sortnums[r]: r -= 1
                        l += 1
                        r -= 1
                    elif sortnums[l] + sortnums[r] > - nums[i]: r -= 1
                    else: l += 1
        return res
相关推荐
A boy CDEF girl10 小时前
算法题专栏:优选算法
数据结构·算法·leetcode
没落之王10 小时前
三易五行看宋朝的三界确立
大数据·人工智能·算法
坤坤子吖11 小时前
算法学习——单调队列
开发语言·c++·笔记·学习·算法
Js.Tx12 小时前
【具体数学 Concrete Mathematics】2.1.5 一般性的方法
算法·具体数学
秋天的怀念_David13 小时前
算法一千零一夜 · 作品相关:版权与致谢声明
程序人生·算法·学习方法
揽星河..14 小时前
【C语言】数组
c语言·开发语言·算法
careathers14 小时前
【数据结构】基于比较的排序算法 - 选择排序
数据结构·算法·排序算法
听风若依14 小时前
C++模板初阶
c++·算法
纪念 22915 小时前
C++ 算法(模拟)
开发语言·c++·算法
揽星河..15 小时前
【C语言】函数
c语言·算法