반응형
📄 [LeetCode] 3Sum
Given an array nums of n integers, are there elements a, b, c in nums such that a + b + c = 0? Find all unique triplets in the array which gives the sum of zero.
Notice that the solution set must not contain duplicate triplets.
func threeSum(_ nums: [Int]) -> [[Int]] {
let testcase = nums.sorted()
var result: [Int: Array<Int>] = [:]
// Notice that the solution set must not contain duplicate triplets.
for index in Int.zero..<nums.count {
// 정렬 된 값 중에 최소 작은 값이 양수 인 경우에는 값을 구할 수 없으므로 종료합니다.
if testcase[index] > Int.zero { break }
// 오름차순 된 정렬 값을 기준으로 왼쪽은 음수, 오른쪽에는 양수 인덱스를 구합니다.
var left = index + 1, right = nums.count - 1
while left < right {
let sum = testcase[index] + testcase[left] + testcase[right]
if sum == Int.zero {
let value = [testcase[index], testcase[left], testcase[right]]
let hashValue = value.sorted().hashValue
if !result.keys.contains(hashValue) { result[hashValue] = value }
left += 1
right -= 1
continue
}
if Int.zero > sum { left += 1 }
else if Int.zero < sum { right -= 1 }
}
}
return Array(result.values)
}
🚀 REFERENCE
반응형
'# 사용하지 않는 게시글 > 알고리즘 문제' 카테고리의 다른 글
[프로그래머스 - 탐욕법] 체육복 (0) | 2021.04.03 |
---|---|
[LeetCode] 3Sum Closest (0) | 2021.03.23 |
[LeetCode] Valid Parentheses (0) | 2021.03.21 |
[프로그래머스 - 구현] 자동완성 (for kakao) (0) | 2019.08.27 |
[프로그래머스 - 정렬] 파일명 정렬 (for kakao) (0) | 2019.08.14 |
댓글