【每日一題】力扣 1287題 有序陣列中出現次數超過25%的元素
阿新 • • 發佈:2020-08-10
給你一個非遞減的有序整數陣列,已知這個陣列中恰好有一個整數,它的出現次數超過陣列元素總數的 25%。
請你找到並返回這個整數
示例:
輸入:arr = [1,2,2,6,6,6,6,7,10] 輸出:6
提示:
1 <= arr.length <= 10^4
0 <= arr[i] <= 10^5
思路 :陣列 arr 已經排好序了,那麼相同的數在 arr 中出現的位置也是連續的。因此我們可以對陣列進行一次遍歷,並統計每個數出現的次數。只要發現某個數出現的次數超過陣列 arr 長度的 25%,那麼這個數即為答案。
在計算陣列 arr 長度的 25% 時,會涉及到浮點數。我們可以用整數運算 count * 4 > arr.length 代替浮點數運算 count > arr.length * 25%,減少精度誤差。
class Solution { public: int findSpecialInteger(vector<int>& arr) { int n = arr.size(); int cnt = arr[0],cns = 0; for(int i = 0;i < n;i++){ if(arr[i] == cnt){ cns++; if(cns * 4 > n) { return cnt; } }else{ cnt = arr[i]; cns = 1; } } return -1; } };