劍指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