3つの数字の合計Leetcode15

暴力は間違いなくこの問題を解決します。

基準神正しい方法は、時間計算量はO(N ^ 2)、空間的複雑度はO(1)です。

実際には、まだ数は3であるので、これは、ゼロからスタートするには、2つのポインタではありません、ダブルポインタのことを考えて、その第1の固定番号、その後、この番号の残りの部分を横断するダブルポインタの操作を行います。

だから、ソートされた最初の自然な考え。その後、要素がゼロより大きいことを条件と停止にトラバース、トラバース中に停止することができる事前にソート。

class Solution:
    def threeSum(self, nums: List[int]) -> List[List[int]]:
        
        n=len(nums)
        res=[]
        if(not nums or n<3):
            return []
        nums.sort()
        res=[]
        for i in range(n):
            if(nums[i]>0):
                return res
            if(i>0 and nums[i]==nums[i-1]):
                continue
            L=i+1
            R=n-1
            while(L<R):
                if(nums[i]+nums[L]+nums[R]==0):
                    res.append([nums[i],nums[L],nums[R]])
                    while(L<R and nums[L]==nums[L+1]):
                        L=L+1
                    while(L<R and nums[R]==nums[R-1]):
                        R=R-1
                    L=L+1
                    R=R-1
                elif(nums[i]+nums[L]+nums[R]>0):
                    R=R-1
                else:
                    L=L+1
        return res

作者:zhu_shi_fu
链接:https://leetcode-cn.com/problems/3sum/solution/pai-xu-shuang-zhi-zhen-zhu-xing-jie-shi-python3-by/
来源:力扣(LeetCode)

 

公開された96元の記事 ウォン称賛22 ビュー40000 +

おすすめ

転載: blog.csdn.net/qq_20880939/article/details/104072425