码迷,mamicode.com
首页 > 其他好文 > 详细

leetcode 每日一题 15. 三数之和

时间:2020-04-27 13:21:53      阅读:56      评论:0      收藏:0      [点我收藏+]

标签:col   idt   添加   range   elf   lse   通过   font   else   

技术图片

双指针法

思路:

首先对原数组进行排序,然后从头开始遍历,当遇到nums[i]>0时终止。在遍历过程中,对遍历元素i后面剩余子数组首尾添加指针L和R,通过移动LR找到满足题设条件的[i,L,R]。这里要注意的是,为了避免重复的情况,在遍历过程中,如果遍历的元素nums[i]和它之前元素nums[i-1]相同,则略过此次操作,继续下一个。在找到满足条件的L,R时,如果nums[L+1]==nums[L],则L向右移动到不同的元素位置或者和R位置相同为止,同理如果nums[R-1]==nums[R],则R向左移动到不同的元素位置或者和L位置相同为止。

例如:

[-1,0,1,2,-1,-4]

技术图片

 

代码:

 

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

 

 

leetcode 每日一题 15. 三数之和

标签:col   idt   添加   range   elf   lse   通过   font   else   

原文地址:https://www.cnblogs.com/nilhxzcode/p/12785803.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!