leetcode442 陣列中重複的資料

2021-10-06 18:43:56 字數 1136 閱讀 2094

給定乙個整數陣列 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,所以我們...