1. 程式人生 > >python-2.找出陣列中重複的數字

python-2.找出陣列中重複的數字

題目描述:

  • 在一個長度為n的數組裡的所有數字都在0~n-1的範圍內,陣列中某些數字是重複的,但不知道有幾個數字重複了,也不知道每個數字重複了幾次。請找出數字中任意一個重複的數字。例如,如果輸入長度為7的數字{2, 3, 1, 0, 2, 5, 3},那麼對應的輸出是重複的數字2或者3.

解題思路:

  • 直接對陣列排序然後順序遍歷:時間複雜度 O(nlogn)
  • 順序掃描陣列,利用雜湊表記錄是否出現過: 時間複雜度 O(n) 空間複雜度 O(n)
  • 順序掃描陣列,在陣列對應位置i上看數字是否為i:
    • 若是,則繼續掃描下一個
    • 若不是,記數字為m,比較i與m位置的數字:
    • 若相等,則找到重複數字
    • 若不相等,則交換i與m,m位置上數字已經確定,繼續以上操作
      時間複雜度:O(n) 空間複雜度 O(1)
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