티스토리 뷰

개발/PS

leet code (1) - two sum

밥고양이 2020. 11. 20. 00:14

알고리즘 풀이 1일차

https://leetcode.com/problems/two-sum/

문제설명

정수를 담은 배열 nums 와 정수 target 이 주어진다.
합이 target 이 되는 두 수를 배열에서 찾고, 그 인덱스를 반환하라.

풀이

처음 시도한 방법

    public int[] twoSum(int[] nums, int target) {
        int[] result = new int[2];

        for (int i = 0; i < nums.length; i++) {
            for (int j = i + 1; j < nums.length; j++) {
                if (nums[i] + nums[j] == target) {
                    return new int[] {i, j};
                }
            }
        }

        return result;
    }

반복문을 돌면서 두 개의 수를 이룰수 있는 모든 짝을 찾아보았다.
배열을 이중으로 순회하기 때문에 N^2 의 복잡도를 가진다.

 

 

그리고 솔루션에 나오는 다른사람의 풀이를 보고 다시 풀어보았다.

    public int[] twoSumByHashTable(int[] nums, int target) {
        Map<Integer, Integer> numAndIndex = new HashMap<>();

        for (int index = 0; index < nums.length; index++) {
            int pair = target - nums[index];

            if (numAndIndex.containsKey(pair)) {
                int pairIndex = numAndIndex.get(pair);

                return new int[] {pairIndex, index};
            }
            numAndIndex.put(nums[index], index);
        }
        return new int[] {};
    }

이 풀이법의 아이디어는 배열을 순회하면서 해쉬맵에 [값, 인덱스] 를 저장하고
현재 인덱스의 값과 합쳤을때 target 이 되는 짝 값이 해쉬맵에 있는지 비교하는 것이다.

 

해쉬맵에 배열만큼 저장해야하기에 메모리 공간을 더 차지하겠지만(최대 N만큼)
배열을 1번만 순회하기때문에 시간복잡도가 N 으로 줄어든다.

'개발 > PS' 카테고리의 다른 글

leet code (4) - Median of Two Sorted Arrays  (0) 2020.11.22
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함