
정수가 들어있는 배열 nums와 정수 target이 주어졌을 경우 nums의 두 숫자를 합해 target이 나오는 nums의 두 숫자의 위치를 반환하기
정답은 정확히 하나만 존재하며 같은 배열의 요소를 두번 쓸 수 없다.
예를들어
nums = [3, 3]이고 target이 6인경우
정답을 [0,0]혹은 [1,1]이 안된다는 이야기
정답 예
public int[] twoSum(int[] nums, int target) {
Map<Integer, Integer> map = new HashMap<>();
int[] output = new int[2];
for (int i = 0; i < nums.length; i++) {
// target - nums[i] 가 기존 맵에 저장되어있는지 검사
if (map.get(target - nums[i]) != null) {
// 있는경우 해당 값의 위치롸
output[0] = map.get(target - nums[i]);
// 현재 값의 위치를 저장
output[1] = i;
break;
}
// map에 값과 위치를 기억
map.put(nums[i], i);
}
return output;
}
결과를 보면 이중 for문도 릿코드상에서는 상위의 결과로 나오긴하는데
map기반의 결과가 압도적으로 빠르진 않다.
java HashMap의 get은 O(1)이 나오는데
put의 경우 내부의 키 공간을 늘려주는 과정에서 시간이 발생하는게 원인인건지 의문
'Algorithm' 카테고리의 다른 글
| [leetcode 75] 278. First Bad Version (0) | 2023.03.02 |
|---|---|
| [leetcode 75] 844. Backspace String Compare (0) | 2023.03.01 |
| [leetcode 75] 438. Find All Anagrams in a String (0) | 2023.02.27 |
| [leetcode 75] 409. Longest Palindrome (1) | 2023.02.26 |
| [leetcode 75] 733. Flood Fill (0) | 2023.02.24 |