nums 배열이 주어진다.
k 정수가 주어진다.
만약 nums[i] == nums[j] 라면
Math.abs(i - j) 의 값이 k 보다 이하여야 한다.
해당 결과의 절대값이 정수보다 이하라면 true, 아니면 false를 리턴하는 문제.
nums 배열의 값들을 반복문을 통해 꺼낸다.
HashMap 에 nums[i] 를 key 로, 인덱스 i 를 value 로 추가한다.
조건문(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;
}
