해당 문제는 해시맵을 사용하여 해결할 수 있다.
배열의 값들을 해시맵에 저장하다가 이미 값이 있으면 i-j를 비교하여 확인한다.
값과 위치를 저장할 HashMap이 필요합니다..
map
hashmap에 저장된 key값과 배열의 값이 겹치지 않으면 해당 값을 배열에 저장한다. value는 위치로 저장한다.
반복하다가 만약 key 값과 배열의 값이 겹치면 abs(i-j) <= k 조건을 확인한다.
만족하면 true를 반환하고, 아니면 해당 key의 value 값을 업데이트 한다.
배열을 다 돌았다면 true 조건이 없으므로 false를 반환한다.
for(int i=0; i<nums.length; i++){
if(map.get(nums[i]) == null){
map.put(nums[i],i);
}else{
if(Math.abs(i-map.get(nums[i])) <= k){
return true;
}
map.put(nums[i],i);
}
}
return false;
class Solution {
public boolean containsNearbyDuplicate(int[] nums, int k) {
Map<Integer,Integer> map = new HashMap<>();
for(int i=0; i<nums.length; i++){
if(map.get(nums[i]) == null){
map.put(nums[i],i);
}else{
if(Math.abs(i-map.get(nums[i])) <= k){
return true;
}
map.put(nums[i],i);
}
}
return false;
}
}
시간 복잡도
공간 복잡도