長さnの配列のすべての数値は、0からn-1の範囲です。配列内のいくつかの数字が繰り返されていますが、繰り返し数がわかりません。各数字が何回繰り返されるかわかりません。配列内で重複する番号を見つけてください。たとえば、長さ7の入力配列が{2,3,1,0,2,5,3}の場合、対応する出力は最初に繰り返される数値2です。
class solution:
def duplicate(self,list,duplication):
for x in range(len(list)):
while list[x] != x:
if list[list[x]] == list[x]:
duplication.append(list[x])
return True
else:
list[list[x]],list[x] = list[x],list[list[x]]
return False
#このようにして、スペースを開いてスペースの複雑さを減らす必要はありません。最も完璧なソリューションになる
派生トピック:
アレイを変更できない場合はどうなりますか?
1.補助配列を使用しますが、o(n)の補助空間を増やします
。2。数を見つける方法を使用します。1とnの間で、中央の数mを見つけ、元の配列を1〜mの2つのグループに分割しますm + 1からn。1からmで、元の配列内の各数値の出現回数の合計を数えます。mより大きい場合、重複する値を見つけるための二分法検索と同様に、1からmまで繰り返される数値が続きます。