하나의 정수 배열과 하나의 정수가 주어지나.
해쉬맵(해쉬테이블)을 이용하여 배열의 값을 계산하고 그 결과가 정수인 값들의 인덱스를 구하는 문제.
nums 정수 배열이 주어진다.
target 정수가 주어진다.
만약 nums[i] + nums[j] == target 이라면
[i], [j] 를 배열에 담아 리턴하면 된다.
nums 배열을 반복문으로 돌리면서, map 에 key value 로 값을 추가한다.
nums[i] - target == nums[j] 해당 식이 성립되므로
nums[j] 를 key로, 인덱스인 [i] 를 value로 추가한다.
주어진 예제를 적용한다면,
ex) nums = [2,7,11,15], target = 9
nums[0] = 2 다.
2 가 9 가 되기 위해 필요한 값은 7
7 을 key 로, 인덱스 0 을 value 로 추가한다.
nums[1] = 7 이다.
7 은 key 로 있기 때문에 조건문에서 containsKey() 메서드를 통해 확인한 후
배열에 인덱스를 담아 리턴하면 된다.(value 에는 인덱스가 저장되어 있다.)
맵에서 값을 찾는 시간 복잡도는 O(1)이기 때문에
만약 필요한 값이 하나라면 해당 문제처럼 접근할 수 있을 것 같다.
public int[] twoSum(int[] nums, int target) {
Map<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < nums.length; i++) {
int number = nums[i];
int findNumber = target - number;
if (map.containsKey(number)) return new int[]{i, map.get(number)};
map.put(findNumber, i);
}
return new int[]{};
}
