跳转至

1287. 有序数组中出现次数超过25%的元素

题目描述

给你一个非递减的 有序 整数数组,已知这个数组中恰好有一个整数,它的出现次数超过数组元素总数的 25%。

请你找到并返回这个整数

 

示例:

输入:arr = [1,2,2,6,6,6,6,7,10]
输出:6

 

提示:

  • 1 <= arr.length <= 10^4
  • 0 <= arr[i] <= 10^5

解法

方法一:遍历

我们从头开始遍历数组 \(\textit{arr}\),对于每个元素 \(\textit{arr}[i]\),我们检查 \(\textit{arr}[i]\) 是否等于 \(\textit{arr}[i + \left\lfloor \frac{n}{4} \right\rfloor]\),其中 \(n\) 是数组的长度。如果等于,那么 \(\textit{arr}[i]\) 就是我们要找的元素,直接返回即可。

时间复杂度 \(O(n)\),其中 \(n\) 是数组 \(\textit{arr}\) 的长度。空间复杂度 \(O(1)\)

1
2
3
4
5
6
class Solution:
    def findSpecialInteger(self, arr: List[int]) -> int:
        n = len(arr)
        for i, x in enumerate(arr):
            if x == arr[(i + (n >> 2))]:
                return x
1
2
3
4
5
6
7
8
9
class Solution {
    public int findSpecialInteger(int[] arr) {
        for (int i = 0;; ++i) {
            if (arr[i] == (arr[i + (arr.length >> 2)])) {
                return arr[i];
            }
        }
    }
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
class Solution {
public:
    int findSpecialInteger(vector<int>& arr) {
        for (int i = 0;; ++i) {
            if (arr[i] == (arr[i + (arr.size() >> 2)])) {
                return arr[i];
            }
        }
    }
};
1
2
3
4
5
6
7
func findSpecialInteger(arr []int) int {
    for i := 0; ; i++ {
        if arr[i] == arr[i+len(arr)/4] {
            return arr[i]
        }
    }
}
1
2
3
4
5
6
7
8
function findSpecialInteger(arr: number[]): number {
    const n = arr.length;
    for (let i = 0; ; ++i) {
        if (arr[i] === arr[i + (n >> 2)]) {
            return arr[i];
        }
    }
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
/**
 * @param {number[]} arr
 * @return {number}
 */
var findSpecialInteger = function (arr) {
    const n = arr.length;
    for (let i = 0; ; ++i) {
        if (arr[i] === arr[i + (n >> 2)]) {
            return arr[i];
        }
    }
};
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
class Solution {
    /**
     * @param Integer[] $arr
     * @return Integer
     */
    function findSpecialInteger($arr) {
        $n = count($arr);
        for ($i = 0; ; ++$i) {
            if ($arr[$i] == $arr[$i + ($n >> 2)]) {
                return $arr[$i];
            }
        }
    }
}

评论