題目:
給你一個非遞減的?有序?整數數組,已知這個數組中恰好有一個整數,它的出現次數超過數組元素總數的 25%。
請你找到并返回這個整數
示例:
輸入:arr = [1,2,2,6,6,6,6,7,10] 輸出:6
提示:
1 <= arr.length <= 10^4
0 <= arr[i] <= 10^5
解法:數組遍歷
class Solution {
public:int findSpecialInteger(vector<int>& arr) {int n = arr.size();int target = n / 4;int count = 1;for (int i = 1; i < n; ++i) {if (arr[i] == arr[i - 1]) {++count;if (count > target) {return arr[i];}} else {count = 1;}}// 如果數組只有一個元素,直接返回該元素return arr[0];}
};
代碼解釋:
-
n
?是數組的長度,target
?是25%的長度。 -
count
?用于統計當前元素的出現次數,初始值為1。 -
遍歷數組,從第二個元素開始:
-
如果當前元素與前一個元素相同,則增加?
count
。 -
如果?
count
?超過了?target
,則返回當前元素。 -
如果當前元素與前一個元素不同,則重置?
count
?為1。
-
-
如果數組只有一個元素,直接返回該元素。
復雜度分析:
-
時間復雜度:O(n),其中?
n
?是數組的長度。我們只需要遍歷一次數組。 -
空間復雜度:O(1),只使用了常數個額外空間。