[LeetCode] 219. Contains Duplicate II

lkdcode·2023년 8월 31일

Algorithm

목록 보기
22/47
post-thumbnail

219. Contains Duplicate II


문제 분석

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

만약 nums[i] == nums[j] 라면
Math.abs(i - j) 의 값이 k 보다 이하여야 한다.

해당 결과의 절대값이 정수보다 이하라면 true, 아니면 false를 리턴하는 문제.


풀이 과정

nums 배열의 값들을 반복문을 통해 꺼낸다.
HashMapnums[i]key 로, 인덱스 ivalue 로 추가한다.

조건문(containsKey())을 통해 nums[i]를 꺼냈을 때 두 개의 인덱스를 계산한다.(Math.abs(i - j))
결과가 k 이하라면 true 를 리턴한다.

조건문에 걸리지 않는 다면 false 를 리턴한다.


나의 생각

결과값이 하나이기 때문에 해쉬맵을 통해 효율적인 로직을 짤 수 있었다.


코드

    public boolean containsNearbyDuplicate(int[] nums, int k) {
        Map<Integer, Integer> map = new HashMap<>();

        for (int i = 0; i < nums.length; i++) {
            if (map.containsKey(nums[i])) {
                int index = map.get(nums[i]);
                if (Math.abs(index - i) <= k) return true;
            }

            map.put(nums[i], i);
        }

        return false;
    }

profile
되면 한다

0개의 댓글