我试图从列表中找出最低的唯一元素。我已经能够生成O(n ^ 2)和O(n)解。但我发现它们并未优化。如果有可能的O(n)解决方案,请帮助我理解。 请不要一个班轮解决方案。以下是我的代码:
主要功能:
if __name__ =="__main__":
print uniqueMinimum([6, 2, 6, -6, 45, -6, 6])
print lowestUnique([5, 10, 6, -6, 3, -6, 16])
O(n ^ 2)解决方案:
def lowestUnique(arr):
num = max(arr)
for i in range(len(arr)):
check = False
for j in range(len(arr)):
if arr[i]==arr[j] and i!=j:
check =True
if check==False:
if num > arr[i]:
num = arr[i]
return num
我想避免在上面的解决方案中使用 max(array)。
O(n)解决方案:
def uniqueMinimum(array):
d ={}
a =[]
num = max(array)
for i in range(len(array)):
k =d.get(array[i])
if k is None:
d[array[i]] = 1
a.append(array[i])
else:
d[array[i]] = k+1
if array[i] in a:
a.remove(array[i])
a.sort()
return a[0]
答案 0 :(得分:1)
我无法评论big-O,因为它依赖于我从未研究过的内置python函数的实现。这是一个更合理的实现:
def lowestUnique(array):
for element in sorted(list(set(array))):
if array.count(element) == 1:
return element
raise Exception('No unique elements found.')