Учитывая массив arr[] целых чисел размера N, которые могут содержать дубликаты, задача состоит в том, чтобы найти все возможные уникальные подмножества.
Ссылка на судью: ССЫЛКА НА САЙТ
Примечание: каждое подмножество следует отсортировать.
Пример 1:
Input: N = 3, arr[] = {2,1,2}
Output:(),(1),(1 2),(1 2 2),(2),(2 2)
Explanation:
All possible subsets = (),(2),(1),(1,2),(2),(2,2),(2,1),(2,1,2)
After Sorting each subset = (),(2),(1),(1,2),(2),(2,2),(1,2),(1,2,2)
Unique Susbsets in Lexicographical order = (),(1),(1,2),(1,2,2),(2),(2,2)
Пример 2:
Input: N = 4, arr[] = {1,2,3,3}
Output: (),(1),(1 2),(1 2 3)
(1 2 3 3),(1 3),(1 3 3),(2),(2 3)
(2 3 3),(3),(3 3)
Мой правильный и рабочий код:
class Solution:
def checkSetBits(self,num,arr):
pos = 0
res = []
while num != 0:
if num & 1 == 1:
res.append(arr[pos])
pos += 1
num = num >> 1
return res
def AllSubsets(self, arr,n):
arr = sorted(arr)
ans = []
N = 2**len(arr)
for i in range(N):
item = self.checkSetBits(i,arr)
ans.append(item)
# removing duplicate lists
ans = sorted(ans)
i = len(ans)-1
while i > -1:
if ans[i] == ans[i-1]:
ans.pop(i)
i -= 1
return ans
Мое сомнение:
Требуемая временная сложность составляет $ O (2 ^ N) $ однако, по моему мнению, временная сложность моего кода $ O (2 ^ N log {N}) $ как for
цикл работает $ 2 ^ N $ раз и внутри мы проверяем все $ log {N} $ биты. Могу ли я уменьшить временную сложность до $ 2 ^ N $? или невозможно уменьшить временную сложность при решении задачи с помощью битовой маски?