587. Two Sum - Unique pairs

排序之后利用对向双指针。

设置visited来去重 => 总是TLE,想了下改成了跟前值比较就行了。

class Solution:
    """
    @param nums: an array of integer
    @param target: An integer
    @return: An integer
    """
    def twoSum6(self, nums, target):
        if len(nums) < 2: return 0
        
        res = 0
        prev = float('inf')
        nums.sort()
        
        l, r = 0, len(nums)-1
        while l < r:
            if nums[l] + nums[r] == target and nums[l] != prev:
                res += 1
                prev = nums[l]
                l += 1 
                r -= 1 
            elif nums[l] + nums[r] > target:
                r -= 1 
            else:
                l += 1
        
        return res

更新一个@肖 启发的向后看去重写法。

注意点是:n个重复元素向后看去重,那只能在最后一个元素那里计数,所以要先执行重复判断,最后再进行结果计数。

class Solution:
    """
    @param nums: an array of integer
    @param target: An integer
    @return: An integer
    """
    def twoSum6(self, nums, target):
        if len(nums) < 2: return 0
        
        res = 0
        nums.sort()
        
        l, r = 0, len(nums)-1
        while l < r:
            if nums[l] + nums[r] > target:
                r -= 1 
            elif nums[l] + nums[r] < target:
                l += 1 
            else:
                while l < r and nums[l] == nums[l+1]:
                    l += 1
                res += 1
                l += 1 
                r -= 1 
        return res

Last updated

Was this helpful?