LeetCode - The World's Leading Online Programming Learning Platform
3 <= nums.length <= 500
1000 <= nums[i] <= 1000
104 <= target <= 104
15. 3Sum 문제와 동일한 아이디어 사용
투포인터 문제로 변환
class Solution {
fun threeSumClosest(nums: IntArray, target: Int): Int {
var answer = Int.MAX_VALUE
nums.sort() // 정수 배열 정렬
for (firstIdx in 0 until nums.size - 2) { // 시작점 고정
// 투포인터
var left = firstIdx + 1
var right = nums.size - 1
var sum = nums[firstIdx] + nums[left] + nums[right] - target
while (left < right) {
if (sum == 0) {
answer = sum
left++
right--
} else {
if (Math.abs(answer) > Math.abs(sum)) answer = sum
if (sum < 0) {
left++
} else {
right--
}
}
sum = nums[firstIdx] + nums[left] + nums[right] - target
}
}
return target + answer
}
}
시간 복잡도: 배열 순회(시작점 고정) X 배열 순회(투포인터) = n^2