1. 程式人生 > >劍指offer-陣列中重複的數字

劍指offer-陣列中重複的數字

題目描述

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

思路:self(每次看到self都會懵):類下面定義的方法(函式)都是需要加self,self指的是solution,就是說明我定義的這個方法(函式)屬於soulution這個類!!!self代表類的例項,而非類。self代表類的例項,而非類。self代表類的例項,而非類。

  • self在定義時需要定義,但是在呼叫時會自動傳入。
  • self的名字並不是規定死的,但是最好還是按照約定是用self
  • self總是指呼叫時的類的例項。

劍指解法O(1):從頭到尾依次掃描這個陣列中的每個數字。當掃描到下標為i的數字時,首先比較這個數字(m)是不是等於i。如果是,則接著掃描下一個數字;如果不是,則和第m個位置上的數字比較。如果相等,找到了重複數字,如果不相等,則交換

class Solution:
    # 這裡要特別注意~找到任意重複的一個值並賦值到duplication[0]
    # 函式返回True/False
    def duplicate(self, numbers, duplication):
        # write code here
         
        for i in range(len(numbers)):
            if numbers[i] != i:
                temp = numbers[numbers[i]]
                if temp == numbers[i]:
                    duplication[0] = numbers[i]
                    return True
                else:
                    numbers[numbers[i]] = numbers[i]
                    numbers[i] = temp
        return False