문제
https://leetcode.com/problems/two-sum-ii-input-array-is-sorted/
Given a 1-indexed array of integers numbers that is already sorted in non-decreasing order, find two numbers such that they add up to a specific target number. Let these two numbers be numbers[index1] and numbers[index2] where
1 <= index1 < index2 <= numbers.length.
Return the indices of the two numbers, index1 and index2, added by one as an integer array [index1, index2] of length 2.
The tests are generated such that there is exactly one solution. You may not use the same element twice.
Your solution must use only constant extra space.
Example1
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].
Example2
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].
Example3
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].
설명
주어진 numbers 배열에서 합이 target이 되는 숫자 2개를 구하면 된다.
푼 방식(Two Pointer)
1. 처음 인덱스와 마지막 인덱스 설정
2-1. 두 원소 합이 target 보다 작을 경우 처음 인덱스를 한칸 뒤로 이동
2-2. 두 원소 합이 target 보다 클 경우 마지막 인덱스를 한칸 앞으로 이동
3. 두 원소 합이 target 과 같을 경우 return
위 방식은 이미 array 가 정렬되어 있기 때문에 풀 수 있는 방식이다. Two Pointer 방식은 여기저기서 많이 활용되니 암기하고 있으면 좋다
코드
class Solution:
def twoSum(self, numbers: List[int], target: int) -> List[int]:
i, j = 0, len(numbers) - 1
while i < j:
if numbers[i] + numbers[j] == target:
return [i+1, j+1]
elif numbers[i] + numbers[j] < target:
i += 1
else:
j -= 1
결과
'알고리즘' 카테고리의 다른 글
[LeetCode] 300. Longest Increasing Subsequence | LIM (0) | 2023.05.16 |
---|---|
[LeetCode] 3. Longest Substring Without Repeating Characters | LIM (0) | 2023.05.07 |
[LeetCode] 350. Intersection of Two Arrays II | LIM (0) | 2023.05.03 |
[LeetCode] 441.Arranging Coins | LIM (0) | 2023.05.02 |
[Algorithm] 투 포인터 (feat. leetcode Two Sum, Three Sum) | LIM (0) | 2023.02.19 |
댓글