문제 링크: https://leetcode.com/problems/two-sum/?envType=study-plan-v2&envId=top-interview-150
nums 배열에서 합이 target이 되는 두 요소의 index를 찾자.
입력
출력
일단 target이 되는 여러 요소가 아닌 두 요소만 찾아도 된다는 점이 포인트라고 생각했다.
그렇다면 nums에 있는 각 값들을 O(1)의 시간복잡도로, 바로바로 찾을 수 있게 하고, 다른 하나의 요소는 nums를 천천히 탐색하며 찾으면, O(n)의 코드를 작성할 수 있지 않을까?
→ Hash Table
을 사용하자
class Solution {
public int[] twoSum(int[] nums, int target) {
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
for (int i = 0; i < nums.length; i++) {
if (map.containsKey(target-nums[i])) {
return new int[]{map.get(target-nums[i]), i};
}
map.put(nums[i], i);
}
return null;
}
}
(값, 인덱스)
이런 형태로 nums의 요소를 저장할 HashMap을 선언Time: O(n)
Space: O(n)
Java를 이용한 다른 풀이는 더 성능이 좋지 않거나, 나와 비슷한 코드이므로 따로 기록하지 않겠다.
정보 감사합니다.