물음표 살인마의 개발블로그

알고리즘 문제/Leetcode

15. 3Sum

BEstyle 2023. 1. 10. 02:56

Given an integer array nums, return all the triplets [nums[i], nums[j], nums[k]] such that i != j, i != k, and j != k, and nums[i] + nums[j] + nums[k] == 0.

Notice that the solution set must not contain duplicate triplets.

 

Example 1:

Input: nums = [-1,0,1,2,-1,-4]
Output: [[-1,-1,2],[-1,0,1]]
Explanation: 
nums[0] + nums[1] + nums[2] = (-1) + 0 + 1 = 0.
nums[1] + nums[2] + nums[4] = 0 + 1 + (-1) = 0.
nums[0] + nums[3] + nums[4] = (-1) + 2 + (-1) = 0.
The distinct triplets are [-1,0,1] and [-1,-1,2].
Notice that the order of the output and the order of the triplets does not matter.

Example 2:

Input: nums = [0,1,1]
Output: []
Explanation: The only possible triplet does not sum up to 0.

Example 3:

Input: nums = [0,0,0]
Output: [[0,0,0]]
Explanation: The only possible triplet sums up to 0.

 

Constraints:

  • 3 <= nums.length <= 3000
  • -105 <= nums[i] <= 105

class Solution:
    def threeSum(self, nums: List[int]) -> List[List[int]]:
        numset = sorted(nums)
        print(numset)
        ans = []
        for i in range(len(numset)-2):
            lp = i+1
            rp = len(numset)-1
            target = 0 - numset[i]
            temp = []
            while lp<rp:
                if numset[lp]+numset[rp] == target:
                    if [numset[i],numset[lp],numset[rp]] not in ans:
                        ans.append([numset[i],numset[lp],numset[rp]])
                    lp+=1
                    rp-=1
                elif numset[lp]+numset[rp] > target:
                    rp-=1
                elif numset[lp]+numset[rp] < target:
                    lp+=1
        return ans

'알고리즘 문제 > Leetcode' 카테고리의 다른 글

463. Island Perimeter  (0) 2023.01.10
283. Move Zeroes  (0) 2023.01.10
42. Trapping Rain Water  (0) 2023.01.10
1637. Widest Vertical Area Between Two Points Containing No Points  (0) 2022.12.30
1874. Minimize Product Sum of Two Arrays  (0) 2022.12.30