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

2021-09-25 07:20:51 字數 1266 閱讀 4212

一、題目

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

方法一:

要求是時間複雜度o(n),空間複雜度是o(1)。因此不能使用排序的方法,也不能使用額外的標記陣列.(標記陣列尚不太了解)

對於這種陣列元素在[0,n-1] 範圍內的問題,可以將給定陣列中值為i 的元素調整到第i個位置上進行求解。

以(2,3,1,0,2,5)為例,遍歷到位置4時,該位置上的數為2,但是第2個位置上已經有乙個2的值了,因此可以知道2重複;

public

boolean

duplicate

(int

nums,

int length,

int[

] duplication)

for(

int i =

0; i < length; i++

)swap

(nums, i, nums[i]);

}}return

false;}

private

void

swap

(int

nums,

int i,

int j)

方法二:

hashset實現

public

boolean

duplicate1

(int numbers,

int length,

int[

] duplication)

hashset

set =

newhashset

<

>()

;for

(int i =

0; i < length; i++

) set.

add(numbers[i]);

//給set物件新增指定元素

}return

false

;}

劍指offer 陣列中重複的數

題目描述 在乙個長度為n的陣列裡的所有數字都在0到n 1的範圍內。陣列中某些數字是重複的,但不知道有幾個數字是重複的。也不知道每個數字重複幾次。請找出陣列中任意乙個重複的數字。例如,如果輸入長度為7的陣列,那麼對應的輸出是第乙個重複的數字2。開始我考慮的是,先將陣列排序,然後逐個比較,如果有相等的,...

劍指offer 《陣列中重複的數 》

詳細描述 在乙個長度為 n 的陣列 nums 裡的所有數字都在 0 n 1 的範圍內。陣列中某些數字是重複的,但不知道有幾個數字重複了,也不知道每個數字重複了幾次。請找出陣列中任意乙個重複的數字。示例 1 輸入 2,3,1,0,2,5,3 輸出 2 或 3 限制 2 n 100000 考查 陣列 雜...

劍指Offer 03 陣列中重複的數 2

在乙個長度為n 1的陣列中,所有數字都在 1 n的範圍中,所以陣列中至少有乙個數字是重複的。請找出任意乙個重複的數字,但不能修改輸入的陣列。例 2,3,5,4,3,2,6,7 輸出 2 或者 3 1,2,3,4,5,6,7,8 輸出 none 利用collections.counter統計次數,再遍...