[LeetCode] Check If N and Its Double Exist

rush0wj·2024년 9월 8일

Leetcode

목록 보기
6/6

Probelm

정수 배열이 주어졌을 때 , ij두 개의 인덱스 가 arr존재하는지 확인합니다.

  • i != j
  • 0 <= i, j < arr.length
  • arr[i] == 2 * arr[j]

Soulution

class Solution {
    public boolean checkIfExist(int[] arr) {
        Set<Integer> set = new HashSet<>();
        
        for(int num: arr){
            if(set.contains(num*2) || (num % 2 == 0 && set.contains(num/2))){
                return true;
            }
             set.add(num);
        }
        return false;
    }
}

1. 해시셋 사용:

  • set이라는 해시셋을 사용하여 배열을 순회하면서 각 숫자를 기록합니다.

  • 현재 숫자의 두 배가 이미 해시셋에 있는지, 또는 현재 숫자가 짝수이며 그 절반이 해시셋에 있는지를 확인합니다.

  • 이 조건이 만족되면 true를 반환합니다.

2. 시간 복잡도:

  • 이 방법은 배열을 한 번 순회하면서 각 요소를 상수 시간 내에 해시셋에서 검색할 수 있으므로, 전체 시간 복잡도는 O(n)입니다.

3. 음수, 0 처리:

  • 이 방법은 음수, 0, 양수 모두 적절히 처리합니다. 0이 두 번 들어가면 두 번째 0을 만나면 바로 true를 반환합니다.

결론:

  • 해시셋을 사용한 방법이 더 효율적이고, 코드가 직관적이며 다양한 경우를 보다 잘 처리합니다.
profile
Developer Record

0개의 댓글