티스토리 뷰
Problem
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.
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].
Constraints:
- 2 <= numbers.length <= 3 * 10^4
- -1000 <= numbers[i] <= 1000
- numbers is sorted in non-decreasing order.
- -1000 <= target <= 1000
- The tests are generated such that there is exactly one solution.
Solution
감소하지 않는 이미 정렬된 1로 시작하는 인덱스 배열이 주어집니다.
배열 내 두 숫자를 더해 target을 만들 때 두 인덱스를 반환합니다.
인덱스는 1부터 시작하기 떄문에 1 <= index <= n 의 범위를 가집니다.
package io.lcalmsky.leetcode.two_sum_ii_input_array_is_sorted;
public class Solution {
public int[] twoSum(int[] numbers, int target) {
int left = 0;
int right = numbers.length - 1;
while (left < right) {
int sum = numbers[left] + numbers[right];
if (sum < target) {
left++;
} else if (sum > target) {
right--;
} else {
return new int[]{left + 1, right + 1};
}
}
throw new IllegalStateException("cannot reach here");
}
}
처음부터 시작하는 포인터와 마지막부터 시작하는 포인터를 이용해 합을 구하면서 포인터를 이동시키고 정확히 일치하는 답이 나왔을 때 답을 반환합니다.
문제에서 답은 하나밖에 없다고 했으므로 처음 찾은 답이 정답이고 반환시에 인덱스 값을 1씩 올려주어야 합니다.
Test
package io.lcalmsky.leetcode.two_sum_ii_input_array_is_sorted;
import static org.junit.jupiter.api.Assertions.assertAll;
import static org.junit.jupiter.api.Assertions.assertArrayEquals;
import org.junit.jupiter.api.Test;
class SolutionTest {
@Test
public void givenArray_whenSumTwoElements_thenGetIndices() {
assertAll(
() -> test(new int[]{2, 7, 11, 15}, 9, new int[]{1, 2}),
() -> test(new int[]{2, 3, 4}, 6, new int[]{1, 3}),
() -> test(new int[]{-1, 0}, -1, new int[]{1, 2})
);
}
private void test(int[] given, int target, int[] expected) {
// when
Solution twoSumInputArrayIsSorted = new Solution();
int[] actual = twoSumInputArrayIsSorted.twoSum(given, target);
// then
assertArrayEquals(expected, actual);
}
}
'Algorithm > LeetCode' 카테고리의 다른 글
215. Kth Largest Element in an Array (0) | 2022.06.24 |
---|---|
120. Triangle (0) | 2022.06.18 |
1342. Number of Steps to Reduce a Number to Zero (0) | 2022.06.11 |
268. Missing Number (0) | 2022.06.10 |
1379. Find a Corresponding Node of a Binary Tree in a Clone of That Tree (0) | 2022.06.04 |
- Total
- Today
- Yesterday
- 스프링 데이터 jpa
- Linux
- Spring Boot Tutorial
- 헥사고날 아키텍처
- JPA
- proto3
- QueryDSL
- gRPC
- 함께 자라기 후기
- leetcode
- spring boot jwt
- 스프링 부트 튜토리얼
- 스프링 부트
- 스프링부트
- 함께 자라기
- Spring Boot JPA
- 클린 아키텍처
- spring boot application
- Java
- Spring Data JPA
- intellij
- r
- spring boot app
- 알고리즘
- Jackson
- 스프링 부트 애플리케이션
- @ManyToOne
- 스프링 부트 회원 가입
- JSON
- Spring Boot
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |