LeeetCode 961 重複 N 次的元素

2021-09-08 19:59:45 字數 1157 閱讀 2667

題目鏈結

在大小為 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 ...