์ฝํ
LeetCode Top Interview 150 - 167. Two Sum II - Input Array Is Sorted
seo dori
2023. 8. 25. 23:12
๐ค ๋ฌธ์ ์ดํด
๋น์ ๋ ฌ๋ ๋ฐฐ์ด์์ ๋๊ฐ์ value์ ๋ํด target๊ฐ์ด ๋ง๋ index๊ฐ ๋๊ฐ ๋์ค๊ธฐ
๐ค EX
Example 1:
Input: numbers = [2,7,11,15], target = 9
Output: [1,2]
Explanation: The sum of 2 and 7 is 9. Therefore, index1 = 1, index2 = 2. We return [1, 2].
Example 2:
Input: numbers = [2,3,4], target = 6
Output: [1,3]
Explanation: The sum of 2 and 4 is 6. Therefore index1 = 1, index2 = 3. We return [1, 3].
Example 3:
Input: numbers = [-1,0], target = -1
Output: [1,2]
Explanation: The sum of -1 and 0 is -1. Therefore index1 = 1, index2 = 2. We return [1, 2].
๐ค ์์ฌ ์ฝ๋ / ์๊ฐ๋ณต์ก๋์ ๊ฑธ๋ฆฐ์ฝ๋
for๋ฌธ์์์ index =0๋ถํฐ value๋ฅผ ๊ฐ์ง๊ณ ๊ณ์ฐํ indexOf๋ก ๋๋จธ์ง ๊ฐ์ ์ฐพ๋๋ค
๋ง์ฝ -1์ด๋ผ๋ฉด ๋ค์ ์๋ค๋ฉด return์ผ๋ก ๊ฒฐ๊ณผ๊ฐ ๋์ถ
์์ธ์ํฉ๋ฐ์ ex[0,0,3,4] target = 0 ์ผ๋ index=1๋ค์๋ถํฐ ์ฐพ์์ผํ๋๋ฐ 1๋ก ์ฐพ์ ๊ทธ๋์ ํด๊ฒฐํ์ง๋ง
O(n^2)๋ผ ๋ ์๋ฐ์์ค....
var twoSum = function(numbers, target) {
numbers.sort((a,b)=>{a-b})
for(let i=0;i<numbers.length;i++){
if(numbers.indexOf(target - numbers[i],i+1)>0){
return [i+1,numbers.indexOf(target - numbers[i],i+1)+1]
}
}
};
๐ค ํด๊ฒฐํ ์ฝ๋
์๊ฐ ๋ณต์ก๋ ๋๋ฌธ์ ๋ ์คํจํ๊ฒ์ ๋ณด๊ณ (์๊ณ ๋ฆฌ์ฆ ๊ณต๋ถํ์)
two pointer์๊ณ ๋ฆฌ์ฆ์ด ์๊ฐ๋ฌ๋ค ํ ๋ฐฐ์ด์์ ๋๊ฐ์ ๊ฐ์ ๊ฐ์ง๊ณ ๋ํ๋ ๋ฌธ์ ์ด๊ธฐ๋๋ฌธ์ ์ ์ฉํ ์ ์์๊ฒ ๊ฐ์๋ค.
var twoSum = function(numbers, target) {
numbers.sort((a,b)=>{a-b})
let left =0
let right = numbers.length-1
while(left<right){
let result = numbers[left] + numbers[right]
if(result ==target){
return [left+1,right+1]
}else if(result>target){
right --
}else{
left ++
}
}
};
๐ค ๋ค๋ฅธ ํ์ด๋ฐฉ๋ฒ
์ฌ์ค two pointer์๊ณ ๋ฆฌ์ฆ์ ๊ธฐ๋ฐ์ผ๋ก ํ์๊ธฐ ๋๋ฌธ์ ๊ฑฐ์ ๊ฐ์ ํ์ด ๋ฐฉ๋ฒ์ด ๋ง์์ง๋ง
์ ์ด์ while๋ฌธ์์ ์กฐ๊ฑด์ ์ฃผ๋ ๊ฒ๋ ์ข์ ์๊ฐ ๊ฐ์๊ตฌ
while (numbers[p1] + numbers[p2] !== target)
์ ๋ for๋ฌธ์ ์ฒ์์ ์ด์ฉํ๋ฉด์ ๋๊ฐ๋ฅผ ์ ์ธํ์ฌ ์ฌ์ฉํ ์ ์๋ค๋ ๊ฒ์ ์๊ณ ์์์ง... ใ ใ ใ ใ ใ
ํจ์จ์ ์ธ ๋ฐฉ๋ฒ์ด๋ผ๊ณ ์๊ฐ๋๋ค
function twoSum(numbers, target) {
for(let start = 0, end = numbers.length-1; start < end;){
let sum = numbers[start] + numbers[end]
if(sum === target)return [++start, ++end]
else sum > target ? end-- : start++
}
};