2016-12-26 9 views
1

私はリストから最も低い一意の要素を見つけようとしています。私はO(n^2)とO(n)の解を生成することができました。しかし、私はそれらが最適化されているとは限りません。可能なO(n)解決策があれば、理解してください。 ライナーの解決策はありません。は、以下の私のコードです:Python:リストから最低一意整数を見つける

主な機能:

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 

私は最大の使用を避けたい(配列)上記溶液中の

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

min()は使用できません。 –

+1

最低の一意の番号を取得する必要があります。 minを使うと、-6が得られますが、それはユニークではありません。 –

+0

リストをソートして、各番号を次の番号と比較することはできますか?または、それは線形解と考えられますか? –

答えて

1

それは私がに見たことがありません内蔵のpythonの機能の実装に依存するので、私は本当に大きな-Oにコメントすることはできません。しかし、より合理的な実装はこちらです:

def lowestUnique(array): 
    for element in sorted(list(set(array))): 
     if array.count(element) == 1: 
      return element 
    raise Exception('No unique elements found.') 
関連する問題