題目鏈結
在大小為 2n 的陣列 a 中有 n+1 個不同的元素,其中有乙個元素重複了 n 次。返回重複了 n 次的那個元素。
示例 1:輸入:[1,2,3,3]
輸出:3
示例 2:輸入:[2,1,2,5,3,2]
輸出:2
示例 3:輸入:[5,1,5,2,5,3,5,4]
輸出:5
第一種解法,因為資料集中在 0 ~ 10000 的範圍,所以可以用「桶排序」思想解題。建立乙個長度 10000 的陣列,資料全部初始化為 0。每當有資料落入桶中則讓資料 +1。當所有資料落入桶中後。檢查是哪個資料等於 n ,同時輸出該資料索引。
時間複雜度為 o(n),但是當資料量小是過於浪費空間複雜度。參考 leetcode 的英文社群 看到了 @zhaoyaoqiong 答案
int
repeatedntimes
(int
* a,
int asize)
,i=0
;for
(; i < asize; i++
) tempnums[
*(a + i)]++
;for
(i =
0; i <
10000
; i++)if
(tempnums[i]
== asize /2)
break
;return i;
}
解法二,先分析清楚題目,在 2n+1 長度的陣列中有 n+1 個元素,某個元素有 n 個重複,所以當某個元素重複 2 次即該元素就是我們題中要找的元素。且該元素彼此間隔的最小長度不超過 2(),而最優情況為間隔為 1(稍微理清下思路應該能理解)。
節省了空間複雜度,同時時間複雜度為 o(n)
int
repeatedntimes
(int
* a,
int asize)
961 重複 N 次的元素
在大小為 2n 的陣列 a 中有 n 1 個不同的元素,其中有乙個元素重複了 n 次。返回重複了 n 次的那個元素。示例 1 輸入 1,2,3,3 輸出 3 示例 2 輸入 2,1,2,5,3,2 輸出 2 示例 3 輸入 5,1,5,2,5,3,5,4 輸出 5 4 a.length 10000 ...
961 重複 N 次的元素
weekly contest 116的 重複 n 次的元素 在大小為2n的陣列a中有n 1個不同的元素,其中有乙個元素重複了n次。返回重複了n次的那個元素。示例1 輸入 1,2,3,3 輸出 3示例2 輸入 2,1,2,5,3,2 輸出 2示例3 輸入 5,1,5,2,5,3,5,4 輸出 5 4 ...
961 重複 N 次的元素
在大小為 2n 的陣列 a 中有 n 1 個不同的元素,其中有乙個元素重複了 n 次。返回重複了 n 次的那個元素。示例 1 輸入 1,2,3,3 輸出 3 示例 2 輸入 2,1,2,5,3,2 輸出 2 示例 3 輸入 5,1,5,2,5,3,5,4 輸出 5 4 a.length 10000 ...