在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 的時間複雜度,這意味著只能遍歷陣列一次。同時還要尋找重複元素,很容易想到建立雜湊表來完成,遍歷陣列時將每個元素對映到雜湊表中,如果雜湊表中...