정수 배열 nums 과 정수가 주어지면 두 숫자의 합이 target가 되는 인덱스를 반환합니다.
각 입력에는 정확히 하나의 솔루션이 있다고 가정하며 동일한 요소를 두 번 사용할 수 없습니다.
어떤 순서로든 답변을 반환할 수 있습니다.
Example 1:
Input: nums = [2,7,11,15], target = 9
Output: [0,1]
Explanation: Because nums[0] + nums[1] == 9, we return [0, 1].
Example 2:
Input: nums = [3,2,4], target = 6
Output: [1,2]
Example 3:
Input: nums = [3,3], target = 6
Output: [0,1]
class Solution {
public int[] twoSum(int[] nums, int target) {
// 1. 배열을 순회하며 순서대로 합해본다.
for (int i = 0; i < nums.length; i++) {
for (int j = i + 1; j < nums.length; j++) {
// 2. 합이 target 과 같으면
if (nums[i] + nums[j] == target) {
// 3. 해당 인덱스 배열을 반환한다.
return new int[] {i, j};
}
}
}
return null;
}
}
public int[] twoSum2(int[] nums, int target) {
// 1. 해시맵 생성
Map<Integer, Integer> numMap = new HashMap<>();
// 2. 배열을 순회하며 [i 인덱스의 요소, i] 쌍을 해시맵에 저장
for (int i = 0; i<nums.length; i++) {
// 3. target 이 되기 위해 필요한 숫자가 해시맵에 있다면
if (numMap.containsKey(target - nums[i])) {
// 4. [그 숫자가 있는 위치, i] 반환
return new int[] {numMap.get(target - nums[i]), i};
}
numMap.put(nums[i], i);
}
return null;
}