博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
15. 3Sum (python)
阅读量:3735 次
发布时间:2019-05-22

本文共 812 字,大约阅读时间需要 2 分钟。

Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0?

Find all unique triplets in the array which gives the sum of zero.
Note: The solution set must not contain duplicate triplets.
For example, given array S = [-1, 0, 1, 2, -1, -4],
A solution set is:
[
[-1, 0, 1],
[-1, -1, 2]
]
题意:在数组S中找到三个元素相加和为0,当然要去重
思路:采用快速排序法只排一次,每次取一个数x,问题转化为target-x的2sum问题
时间复杂度为O(n^2)
注意去重在三个地方:
第一个:每次取一个数,只将该元素后续的列表中查找target-x的2sum和;
第二个:每次取一个数,需要判断是否和前一个数重复(循环起始数除外),只有不重复才进行2sum计算,重复则continue
第三个:在进行2sum计算,若2sum的和等于target后,需要将左右指针移位,过滤后续重复元素,直到元素不重复再计算2sum之和
Runtime: 202 ms

class Solution(object):    '''    快速排序,递归的思想    '''    def  qksort(self,nums):        if  len(nums)<=1:            return nums        base=nums[0]        left=[]        right=[]        for i in nums[1:]:            if i

转载地址:http://icfin.baihongyu.com/

你可能感兴趣的文章
C++ 插入排序 个人笔记
查看>>
C++ 希尔排序 个人笔记
查看>>
C++ 归并排序 个人笔记
查看>>
C++ 快速排序 个人笔记
查看>>
c++ 查找算法 二分查找 个人笔记
查看>>
C语言 百鸡百钱的优化 穷举搜索
查看>>
c++ 查找算法 并行搜索 个人笔记
查看>>
C++ 动态规划算法 个人笔记
查看>>
c++ 回溯算法 个人笔记
查看>>
C语言 LeetCode two sum 问题和 实现一个mySqrt函数
查看>>
C语言 leetcode 刷题 个人笔记
查看>>
二叉树的中序遍历
查看>>
c 语言 leetcode k个一组翻转链表
查看>>
vector 容器erase() 错误用法
查看>>
cc++ 递归模板
查看>>
C语言的字符串数组与指针数组
查看>>
c 语言 单链表的所有操作
查看>>
c++ leetcode 刷题 0~n-1中缺失的数字
查看>>
cc++ leetcode 最长连续递增序列
查看>>
c++ leetcode 三数之和
查看>>