300x250
반응형
https://leetcode.com/problems/contains-duplicate-ii/description/
내가 풀었던 솔루션은 아래와 같다.
class Solution {
public boolean containsNearbyDuplicate(int[] nums, int k) {
if(k==0) return false;
HashSet<Integer> set = new HashSet<>();
for(int i=0; i<nums.length; i++){
if(set.contains(nums[i])) return true;
if(i>=k) set.remove(nums[i-k]);
set.add(nums[i]);
}
return false;
}
}
런타임 비트가 애매하게 80퍼대가 나오길래 다른사람의 솔루션을 봤더니
나와 거의 비슷한데 한 줄을 다르게 쓰고 있었다.
class Solution {
public boolean containsNearbyDuplicate(int[] nums, int k) {
if(k==0) return false;
HashSet<Integer> set = new HashSet<>();
for(int i=0; i<nums.length; i++){
if(!set.add(nums[i])) return true; // 여기
if(i>=k) set.remove(nums[i-k]);
}
return false;
}
}
set.add()를 할 경우 set에 값이 추가될 뿐만 아니라
추가할 값이 set에 존재하지 않아 새로 추가하는거면 true, 이미 존재하고 있던 값을 업데이트 하는거면 false를 리턴한다고 한다.
나는 우선 nums[i]가 set에존재하는지 확인 후 add를 했는데
그렇게 하지 않고 if 조건 안에서 add를 했더니 시간이 좀 더 단축되었다.
300x250
반응형
'IT > 알고리즘' 카테고리의 다른 글
LeetCode 791. Custom Sort String (0) | 2024.03.02 |
---|---|
substring과 유사한 String 생성자 (LeetCode 2390) (0) | 2023.09.12 |
[프로그래머스] 문자열 계산하기, 인덱스 바꾸 (0) | 2023.06.28 |
[프로그래머스] 피자 나눠 먹기(3), 중앙값 구하기 (0) | 2023.06.21 |
프로그래머스 Lv.0 최댓값 만들기(2) (0) | 2023.05.24 |