一、題目
在乙個長度為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統計次數,再遍...