[LeetCode] 1. Two Sum

lkdcode·2023년 8월 31일

Algorithm

목록 보기
21/47
post-thumbnail

1. Two Sum


문제 분석

하나의 정수 배열과 하나의 정수가 주어지나.
해쉬맵(해쉬테이블)을 이용하여 배열의 값을 계산하고 그 결과가 정수인 값들의 인덱스를 구하는 문제.


풀이 과정

nums 정수 배열이 주어진다.
target 정수가 주어진다.

만약 nums[i] + nums[j] == target 이라면
[i], [j] 를 배열에 담아 리턴하면 된다.

nums 배열을 반복문으로 돌리면서, mapkey value 로 값을 추가한다.

nums[i] - target == nums[j] 해당 식이 성립되므로
nums[j]key로, 인덱스인 [i]value로 추가한다.

주어진 예제를 적용한다면,

ex) nums = [2,7,11,15], target = 9

nums[0] = 2 다.
29 가 되기 위해 필요한 값은 7
7key 로, 인덱스 0value 로 추가한다.

nums[1] = 7 이다.
7key 로 있기 때문에 조건문에서 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[]{};
    }

profile
되면 한다

0개의 댓글