給定乙個整數陣列 a,其中1 ≤ a[i] ≤ n (n為陣列長度), 其中有些元素出現兩次而其他元素出現一次。
找到所有出現兩次的元素。
你可以不用到任何額外空間並在o(n)時間複雜度內解決這個問題嗎?
示例:
輸入:[4
,3,2
,7,8
,2,3
,1]輸出:[2
,3]
方法一:
遍歷到位置i時,將位置i的元素nums[i]和位置nums[i]-1的元素進行交換,這樣就能使得nums[i]的元素處於正確的位置。但是交換過來的元素不一定在正確位置,因此繼續交換,直到nums[i]=i+1或者不符合條件。
class
solution
; vector<
int> res;
for(
int i =
0; i < nums.
size()
;++i)
// 上述交換完成後,如果當前元素不是0,且沒有正確放置,且應該正確放置的位置上已經有了乙個相同的元素了,表示該元素是重複元素
if(nums[i]!=0
&& nums[i]
!= i +
1&& nums[i]
== nums[nums[i]-1
])}return res;}}
;
方法二:
遍歷每乙個元素,對於位置i的nums[i],按理說nums[i]這個元素應該放置在nums[nums[i]-1]這個位置,那麼我們就將這個位置的元素變成負數,表示這個位置上的正確元素出現過一次了。
如果位置j的元素nums[j]的正確位置nums[nums[j]-1]已經是負數了,表示nums[j]這個元素出現過一次。
class
solution
; vector<
int> res;
int index =0;
for(
int i =
0; i < nums.
size()
;++i)
return res;}}
;
LeetCode442 陣列中重複的資料
給定乙個整數陣列 a,其中1 a i n n為陣列長度 其中有些元素出現兩次而其他元素出現一次。找到所有出現兩次的元素。你可以不用到任何額外空間並在o n 時間複雜度內解決這個問題嗎?示例 輸入 4,3,2,7,8,2,3,1 輸出 2,3 思路 使用額外的同nums陣列空間大小相同的陣列為nums...
leetcode 442 陣列中重複的資料
給定乙個整數陣列 a,其中1 a i n n為陣列長度 其中有些元素出現兩次而其他元素出現一次。找到所有出現兩次的元素。你可以不用到任何額外空間並在o n 時間複雜度內解決這個問題嗎?示例 輸入 4,3,2,7,8,2,3,1 輸出 2,3 from typing import list class...
中等 LeetCode 442 陣列中重複的資料
題目 給定乙個整數陣列 a,其中1 a i n n為陣列長度 其中有些元素出現兩次而其他元素出現一次。找到所有出現兩次的元素。你可以不用到任何額外空間並在o n 時間複雜度內解決這個問題嗎?示例 解題思路及 1.思路 根據題意,陣列中元素大小範圍為1 n,與陣列索引範圍0 n 1 只相差1,所以我們...