陣列中重複的數字

2022-03-16 11:18:31 字數 1623 閱讀 6484

題目描述

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

方法一直接暴力破解,挨個比試

public

boolean

duplicate

(int

numbers,

int length,

int[

] duplication)

int times =0;

for(

int i =

0; i < numbers.length && times ==

0; i++)}

}return times >0?

true

:false

;}

方法二

先對陣列進行排序,然後從排序的陣列中找到重複的數字。在排序中找到重複的數字是很簡單的事情,但是排序的時間複雜度需要o(nlogn)的時間。

方法三借用乙個雜湊表,從頭到尾順序掃瞄陣列中的每個數字,如果該數字沒有在雜湊表中,那麼加入雜湊表;如果找到乙個重複,那麼就是找到了重複的數字,但是該方法需要借用乙個空間複雜度的o(n)雜湊表。

方法四因為陣列中數字都是在0-(n-1)的範圍內,那麼如果陣列中沒有重讀數字,那麼排序之後的數字i將出現在下標為i的位置。如果有重複的數字,那麼有些位置會存在多個數字,同時有些位置可能沒有數字。我們可以重排陣列,當掃瞄到下標為i的數字時,比較該數字(用m表示)是不是等於i,如果是,那麼掃瞄下乙個數字;如果不是,拿它與第m個數字進行比較。如果和第m個數字相等,就找到了乙個重複的數字,因為該數字在下標為i和m的位置都出現了;如果和第m個數字不同,就把第i個和第m個數字交換位置。

public

boolean

duplicate_2

(int

numbers,

int length,

int[

] duplication)

swap

(numbers, i, numbers[i]);

}}return

false;}

public

void

swap

(int

elem,

int i,

int j)

方法五

可以利用現有陣列設定標誌,當乙個數字被訪問過後,可以設定對應位上的數 + n,之後再遇到相同的數時,會發現對應位上的數已經大於等於n了,那麼直接返回這個數即可。

public

boolean

duplicate_3

(int

numbers,

int length,

int[

] duplication)

if(numbers[index]

>= length)

numbers[index]

= numbers[index]

+ length;

}return

false

;}

陣列 陣列中重複的數字

在乙個長度為n的陣列裡的所有數字都在0到n 1的範圍內。陣列中某些數字是重複的,但不知道有幾個數字是重複的。也不知道每個數字重複幾次。請找出陣列中任意乙個重複的數字。例如,如果輸入長度為7的陣列,那麼對應的輸出是第乙個重複的數字2。思路 python 實現 an highlighted block ...

陣列中重複的數字

在乙個長度為n的陣列裡的所有數字都在0到n 1的範圍內。陣列中某些數字是重複的,但不知道哪幾個 數字重複了,也不知道每個數字重複了幾次。請找出陣列中任意乙個重複的數字。例如 如果輸入長度為7的陣列,那麼對應的輸出是重複的數字2或者3。include iostream using namespace ...

陣列中重複的數字

題目 在乙個長度為n的陣列裡的所有數字都在0到n 1的範圍內。陣列中某些數字是重複的,但不知道有幾個數字是重複的。也不知道每個數字重複幾次。請找出陣列中任意乙個重複的數字。例如,如果輸入長度為7的陣列,那麼對應的輸出是重複的數字2或者3。思路 用雜湊表解決的時間複雜度和空間複雜度為o n 因為陣列中...