[간만에 스터디] LeetCode Two Sum

2024-03-24 · PS
[간만에 스터디] LeetCode Two Sum

Two Sum

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

3번만에 품 (분명히 몇년전에 알고리즘 공부를 한참 할때에도 몇번씩이나 풀어봤던 문제인데 역시나 오랜만에 다시 하려니 다시 백지가 된것 같다)

코드

class Solution {
    public int[] twoSum(int[] nums, int target) {

        int size = nums.length;
        
        // key: nums.value, value: nums.index
        Map<Integer, Integer> map = new HashMap<>();
        for (int i = 0; i < size; i++) {
            map.put(nums[i], i);
        }

        for(int i = 0; i < size; i++) {
            int diff = target - nums[i];
            Integer j = map.get(diff);

            if(j != null && i != j) {
                return new int[]{i, j};
            }
        }

        // 답이 무조건 존재하는 입력만 있다고 했기 때문에, 도달 불가능
        return new int[]{0, 0};
    }
}

풀이 방법

HashMap에 각 Value, Index를 기록해놓고 O(1) 만에 각 원소를 target과의 차이를 보면? 최종적으로 입력에 대한 모든 수의 합이 되는 곳을 O(N)만에 풀 수 있다!

그 외 접근시도 방법

정렬 후 투포인터 (실패)

  • 음수가 존재하는 이유로 투포인터 단조증가성(포인터를 움직일 기준이 모호?)이 보장되지 않아서 실패
    class Node implements Comparable<Node> {
        int value;
        int index;

        public Node(int value, int index) {
            this.value = value;
            this.index = index;
        }

        @Override
        public int compareTo(Node o) {
            return this.value - o.value;
        }
    }

    public int[] twoSum(int[] nums, int target) {

        int size = nums.length;
        Node[] n = new Node[size];
        for (int i = 0; i < size; i++) {
            n[i] = new Node(nums[i], i);
        }

        Arrays.sort(n);

        int i = 0;
        int j = 1;
        int sum = n[i].value + n[j].value;
        while(true) {
            if(sum < target) {
                j++;
                sum += n[j].value;
            } else if(sum > target) {
                sum -= n[i].value;
                i++;
            } else  {
                break;
//                return new int[]{n[i].index, n[j].index};
            }
        }

        return new int[]{n[i].index, n[j].index};
    }

전체 풀이 기록: initi8ors/algorithm2024

댓글

GitHub(giscus) 댓글은 설정 완료 후 활성화됩니다.