陣列中找出任意重複元素

2021-09-25 16:28:07 字數 1079 閱讀 6056

在0—n-1個數中找出出現次數大於一的任意乙個元素

有兩種做法

資料樣例:2, 3, 2, 0, 2, 5, 3

資料索引:0, 1 ,2, 3, 4, 5, 6

因為給定範圍0~n-1,如果有重複,肯定有元素放在它所在值的索引上之後,還有與它值相同的元素跟自己的索引值對不上,樣例中如果把2放到no.2處,no.0處的2和0就對不上,導致回到原位(值與下標相同)但是還有乙個值在別的位置上,導致那個位置找不到與自己index所匹配的值。

所以我們要將每個index上的值都要換回屬於他自己的位置,直到換回後,如果此時該index的值不與index相等,代表這個值就是重複的那個值。

class

solution

for(

int i =

0;i < nums.length;i++)if

(nums[i]

!= i)

return nums[i];}

return-1

;}}

分析:

如果不修改陣列,只能拿另外乙個陣列作為比對,用二分查詢的思想來處理

比如 1 2 2 2 4 5

陣列索引 0 1 2 3 4 5

先從中間劈開

有0 1 2 3

設乙個計數器count

從原資料裡乙個乙個跟0 1 2 3 比,出現了就加一

1 出現了 count = 1

2 出現了 count = 2

2 出現了 count = 3

2 出現了 count = 4

4 沒出現 count = 4

5 沒出現 count = 5

5 比 0 1 2 3(mid-start+1)的個數要大所以代表前四個數里肯定有重複的

如果原資料是1 2 3 4 5 6你拿這種方法去比

沒有重複資料,得出的count不會大於索引的個數

然後以count是否大於二分後陣列的個數一直分分到start==end為止

class

solution

return r;}}

;

找出陣列中唯一的重複元素

問題 1 1000放在含有1001個元素的陣列中,只有唯一的乙個元素值重複,其它均只出現一次。每個陣列元素只能訪問一次,設計乙個演算法,將它找出來 不用輔助儲存空間,能否設計乙個演算法實現?include include include 根據異或法的計算方式,每兩個相異的數執行異或運算之後,結果為1...

如何找出陣列中唯一的重複元素?

數字1到1000放在含有1001個元素的陣列中,其中只有唯一的乙個元素值重複,其他數字均只出現一次。設計乙個演算法,講重複元素找出來,要求每個陣列元素只能訪問一次。如果不使用輔助儲存空間,能否設計乙個演算法實現?首先在看到這個題的時候,要特別注意幾個條件 1.每個陣列元素只能訪問一次。如果可以訪問多...

找陣列中重複元素

題目 乙個大小為n的陣列,裡面的數都屬於範圍 0,n 1 有不確定的重複元素,找到至少乙個重複元素,要求o 1 空間和o n 時間。分析 這個題目要求用 o n 的時間複雜度,這意味著只能遍歷陣列一次。同時還要尋找重複元素,很容易想到建立雜湊表來完成,遍歷陣列時將每個元素對映到雜湊表中,如果雜湊表中...