LEETCODE - 3sum

Coaspe·2021년 5월 4일
0

Algorithm-배열

목록 보기
4/8
class Solution:
    def threeSum_brute_force(self, nums: list[int]) -> list[list[int]]:
        result = []
        nums.sort()

        for i in range(len(nums) - 2):
            # 중복 건너뛰기
            if i > 0 and nums[i] == nums[i - 1]:
                continue
            for j in range(i + 1, len(nums) - 1):
                if j > i + 1 and nums[j] == nums[j+1]:
                    continue
                for k in range(j + 1, len(nums)):
                    if k > j + 1 and nums[k] == nums[k+1]:
                        continue
                    if nums[i] + nums[j] + nums[k] == 0
                        result.append((nums[i],nums[j],nums[k]))
        return result
    def threeSum_two_points(self, nums: list[int]) -> list[list[int]]:
        result = []
        nums.sort()

        for i in range(len(nums) - 2):
            # 중복 건너뛰기
            if i > 0 and nums[i] == nums[i - 1]:
                continue
            # 포인트의 간격을 좁혀가며 sum 계산
            left, right = i + 1, len(nums) - 1
            while left < right:
                sum = nums[i] + nums[left] + nums[right]
                if sum < 0:
                    left += 1
                elif sum > 0:
                    right -= 1
                else:
                    result.append((nums[i],nums[left],nums[right]))
                    # left, right 같은 수 넘기기
                    while left < right and nums[left] == nums[left + 1]:
                        left += 1
                    while left < right and nums[right] == nums[right - 1]:
                        right -= 1
                    left += 1
                    right -= 1
        return result        
profile
https://github.com/Coaspe

0개의 댓글