python-2.找出陣列中重複的數字
阿新 • • 發佈:2019-01-28
題目描述:
- 在一個長度為n的數組裡的所有數字都在0~n-1的範圍內,陣列中某些數字是重複的,但不知道有幾個數字重複了,也不知道每個數字重複了幾次。請找出數字中任意一個重複的數字。例如,如果輸入長度為7的數字{2, 3, 1, 0, 2, 5, 3},那麼對應的輸出是重複的數字2或者3.
解題思路:
- 直接對陣列排序然後順序遍歷:時間複雜度
- 順序掃描陣列,利用雜湊表記錄是否出現過: 時間複雜度 空間複雜度
- 順序掃描陣列,在陣列對應位置i上看數字是否為i:
- 若是,則繼續掃描下一個
- 若不是,記數字為m,比較i與m位置的數字:
- 若相等,則找到重複數字
- 若不相等,則交換i與m,m位置上數字已經確定,繼續以上操作
時間複雜度: 空間複雜度
class Solution:
def _init_(self):
pass
# 防止無效輸入
def valid_check(self, a):
if len(a) == 0:
return False
for i in range(len(a)):
if a[i] < 0 or a[i] > len(a) - 1 :
return False
return True
def Method_1(self, a):
if valid_check(a):
a = sorted(a)
for i in range(len(a) - 1):
if a[i] == a[i + 1]:
return a[i]
else: return False
def Method_2(self, a):
if valid_check(a):
num_array = np.zeros(len(a))
for i in range(len(a)):
if num_array[a[i]] == 0:
num_array[a[i]] += 1
else:
return a[i]
else: return False
def Method_3(self, a):
if valid_check(a):
for i in range(len(a)):
while a[i] != i:
if a[a[i]] == a[i]:
return a[i]
else:
a[a[i]], a[i] = a[i], a[a[i]]
else: return False