Leetcode刷题笔记

第三天 4 Sum

2018-08-23  本文已影响9人  业余马拉松选手

哈哈,继续在前两天的基础之上,4 Sum问题

https://leetcode-cn.com/problems/4sum/description/

对于这种列表的题目,继续要排个序,开始想过类似分治的方法,但好像路走不通,那么本着解决问题的思路,就先继续“退化”的路,这里就是通过循环,把4Sum变成了3Sum,然后再变成2Sum,基于排序,那么就可以用双指针法。

原本写出来之后,以为会超时,但没想到竟然低分飘过了。

现在回过来看,应该还是有不少可以优化的地方,这个计划就留到周末去吧,平时工作日就先争取刷一道题,就理解一种思路,顺便继续熟悉了Python的代码range的用法,对于一个写惯了Java的人来说,这种基于range的循环还是需要适应下。

尽管贡献了一个效率比较低的代码,但实际就可读性和理解方面还是比较清晰的【好吧,其实就是算法比较挫啦】

class Solution:
    def fourSum(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: List[List[int]]
        """
        nums.sort()
        ret = set()
        for i in range(len(nums)-3):
            for j in range(i+1,len(nums)-2):
                t = -(nums[i] + nums[j])+target
                l = j+1
                r = len(nums)-1
                while l<r:
                    two_sum = nums[l] + nums[r]
                    if two_sum == t:
                        ret.add((nums[i],nums[j],nums[l],nums[r]))
                        l+=1
                        r-=1
                    elif two_sum < t:
                        l+=1
                    elif two_sum > t:
                        r-=1
        return list(ret)
                    
上一篇下一篇

猜你喜欢

热点阅读