題目描述:
在乙個長度為n的陣列裡的所有數字都在0到n-1的範圍內。 陣列中某些數字是重複的,但不知道有幾個數字是重複的。也不知道每個數字重複幾次。請找出陣列中任意乙個重複的數字。 例如,如果輸入長度為7的陣列,那麼對應的輸出是第乙個重複的數字2。
解題思路:
第一種解題思路:最簡單的,暴力破解:
整個陣列從第乙個數字開始,遍歷第乙個數字之後所有數字尋找是否有與第乙個數字重複的數字,沒有在從第二個開始在迴圈遍歷第二個數字之後的所有數字尋找與第二個數字是否有重複的數字,以此類推,直到查詢完陣列中所有元素。
python**實現如下:
'''
在乙個長度為n的陣列裡的所有數字都在0到n-1的範圍內。
陣列中某些數字是重複的,但不知道有幾個數字是重複的。
也不知道每個數字重複幾次。請找出陣列中任意乙個重複的數字。
例如,如果輸入長度為7的陣列,
那麼對應的輸出是第乙個重複的數字2。
'''class solution:
# 這裡要特別注意~找到任意重複的乙個值並賦值到duplication[0]
# 函式返回true/false
def duplicate(self, numbers, duplication):
# write code here
n=len(numbers)
for i in range(0,n):
for j in range(i+1,n):
if numbers[i] == numbers[j]:
duplication[0]=numbers[j]
return true
return false
if __name__ == '__main__':
s=solution()
print(s.duplicate([2,3,2,4],[none]))
第二種解題思路:
題目中指出了乙個長度為n的陣列裡的所有數字都在0到n-1的範圍內,也就是說,陣列裡的元素值字最大也不會超過n,
假設乙個陣列長度是6,這個陣列中的元素值只可能是 0 1 2 3 4 5 這幾個數。那麼就可以這樣考慮這個問題,我們使用元素值作為索引,他不會超出陣列索引範圍,當我們用元素值作為陣列的下標索引時,將索引到的元素+n ,遇到下一次重複的元素時,用它作為下標去索引到的元素就會大於n, 證明這個元素之前被索引到,進而能證明下標索引就是陣列中重複的元素。
舉乙個簡單的例子更好的理解上面的那段話。
a= [2, 0,1,2] 可以看出這個陣列長度是 4
我們從頭遍歷陣列
將a[0]元素 2 作為下標索引 index 即 變成了 a[index] = a[2] 然後將a[2]的值加長度n,這裡就是加4. 然後a[2]= 5了
陣列a就變成了 a=[2,0,5,2],然後再將a[1]元素 0 作為下標索引 index 即 變成了 a[index] = a[0] 然後a[0]= 6了
這些都不重要,
依次遍歷,知道最後 到將a[3]元素 2 作為下標索引 index 即 a[index] = a[2] 我們之前將a[2]+ 4 了
a[2]的值大於陣列長度 n, 所以這裡能判斷出之前索引過 a[2] 所以陣列下標 2 是 陣列中重複的數字。
也是陣列中第一次出現重複的數字。
python實現**如下:
# -*- coding:utf-8 -*-
class solution:
# 這裡要特別注意~找到任意重複的乙個值並賦值到duplication[0]
# 函式返回true/false
def duplicate(self, numbers, duplication):
# write code here
n=len(numbers)
for i in range(0,n):
index = numbers[i]
if index>=n:
index-=n
if numbers[index]>=n:
duplication[0]=index
return true
numbers[index]+=n
return false
第三種解題思路: 陣列中重複數字
題目描述 在乙個長度為n的陣列裡的所有數字都在0到n 1的範圍內。陣列中某些數字是重複的,但不知道有幾個數字是重複的。也不知道每個數字重複幾次。請找出陣列中第乙個重複的數字。例如,如果輸入長度為7的陣列,那麼對應的輸出是第乙個重複的數字2。返回描述 如果陣列中有重複的數字,函式返回true,否則返回...
leetcode 尋找重複數字
在乙個長度為n 1的陣列裡所有的數字都在1 n的範圍內,所以陣列的中至少有乙個數字是重複的。請找出陣列中重複的數字,但是不可以修改陣列。1.定義start和end,找到陣列的中間值middle 2.統計start到middle中count的數字,如果count大於middle start 1,說明重...
陣列中的重複數字
在乙個長度為n的陣列裡的所有數字都在0到n 1的範圍內。陣列中某些數字是重複的,但不知道有幾個數字是重複的。也不知道每個數字重複幾次。請找出陣列中任意乙個重複的數字。例如,如果輸入長度為7的陣列,那麼對應的輸出是重複的數字2或者3。1 排序 將陣列排序,然後掃瞄排序後的陣列即可。時間複雜度 o nl...