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        
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章