Search

Maximum Strong Pair XOR I

문제 설명 : 제공된 nums로 만들 수 있는 조건(|x - y| <= min(x, y)) 에 맞는 쌍들로 만들 수 있는 가장 큰 XOR 값을 반환
풀이 방법
단순 구현은 FOR문을 사용한 O(N^2) 방식이다.
이 방법으로도 통과가 되지만, hash_table을 사용한 방법은 아니라서 hash_table을 사용한 방법을 찾아보았다.
시간복잡도 : O(N2)O(N^2)
성공 코드
class Solution: def maximumStrongPairXor(self, nums: List[int]) -> int: max_xor = 0 for i in range(len(nums)): for j in range(i, len(nums)): if abs(nums[i] - nums[j]) <= min(nums[i], nums[j]): max_xor = max(max_xor, nums[i]^nums[j]) return max_xor
Python
복사
개선된 성공 코드
동일하게 중복 For문을 사용하는 것은 차이가 없다.
하지만, 내부 For의 범위가 Set을 사용한 방식으로 변경하여 탐색 범위가 줄어든 것을 알 수 있다.
만약 nums[1,1,1,1,1,1,1,1,1,1,2,10] 처럼 중복 값이 많은 형태로 전달된다면 많은 시간을 감소시킬 수 있을 것이다.
link icon파이썬 set의 데이터구조부터 hashtable까지(갑분 C 등장) 위 블로그에 잘 설명되어 있는데, set 도 해시테이블을 사용한 데이터 타입이다. 물론 value 가 존재하지 않는 점에서 dict 와 큰 차이가 있다. 그래서 아래 코드를 dict를 사용한 코드로 바꿔도 문제는 없다. 다만, dict로 사용했을 때 value를 설정할 필요가 없기 때문에 set 방식이 조금 더 가독성이 좋다.
class Solution: def maximumStrongPairXor(self, nums: List[int]) -> int: max_xor = 0 num_set = set() for num in nums: for x in num_set: if abs(num - x) <= min(num, x): max_xor = max(max_xor, num ^ x) num_set.add(num) return max_xor
Python
복사