1. 程式人生 > 實用技巧 >【每日一題】力扣 1287題 有序陣列中出現次數超過25%的元素

【每日一題】力扣 1287題 有序陣列中出現次數超過25%的元素

給你一個非遞減的有序整數陣列,已知這個陣列中恰好有一個整數,它的出現次數超過陣列元素總數的 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; } };