LeetCode/Top Interview 150

15. 3Sum

hyunkookim 2024. 11. 29. 15:46

15. 3Sum

 

첫 번째 내코드 

class Solution:
    def threeSum(self, nums: List[int]) -> List[List[int]]:
        res = []

        nums.sort()
        for l in range(len(nums)):
            if l > 0 and nums[l] == nums[l - 1]:
                continue
            m, r = l+1, len(nums)-1

            while m<r:
                sub_sub = nums[m] + nums[r] + nums[l]
                if sub_sub == 0:
                    res.append([nums[l], nums[m], nums[r]])

                    # 중복 제거: 동일한 m, r 값 건너뛰기
                    while m < r and nums[m] == nums[m + 1]:
                        m += 1
                    while m < r and nums[r] == nums[r - 1]:
                        r -= 1

                    r-= 1
                    m+=1
                elif sub_sub > 0:
                    r -=1
                else:
                    m +=1

        return res

 

 

  • l > 0:
    • 첫 번째 요소(l = 0)는 이전 값이 없으므로 비교할 필요가 없습니다.
    • l > 0 조건이 없으면 nums[l - 1]에서 인덱스 오류가 발생할 수 있습니다.
  • nums[l] == nums[l - 1]:
    • 현재 값이 이전 값과 동일하면 중복된 값을 처리하기 위해 현재 반복을 건너뜁니다.
    • 이렇게 하면 동일한 조합이 결과에 추가되지 않습니다.

 

 

https://youtu.be/jzZsG8n2R9A?si=9ZYksLSSfhuBfkpL

 

https://youtu.be/1BGiX1ZZUpQ?si=PGqVtJh21ErxdO3c

 

 

'LeetCode > Top Interview 150' 카테고리의 다른 글

3. Longest Substring Without Repeating Characters  (0) 2024.11.29
209. Minimum Size Subarray Sum  (0) 2024.11.29
167. Two Sum II - Input Array Is Sorted  (0) 2024.11.29
125. Valid Palindrome  (0) 2024.11.28
68. Text Justification  (0) 2024.11.28