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

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

请你找到并返回这个整数

示例:

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

提示:

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

解题思路:
1.获取数组长度 n 和第一个元素 cur,初始化计数器 count 为 1。
2.如果数组长度为 1,直接返回该元素。
3.遍历数组,如果当前元素等于 cur,计数器加 1,若计数器超过 n / 4,返回 cur。
4.如果当前元素不等于 cur,更新 cur 并重置计数器。
5.若遍历结束未找到符合条件的元素,返回 -1。

/**
 * 寻找特殊整数
 * 该方法旨在找出数组中出现次数超过数组长度四分之一的元素
 * 如果存在这样的元素,则返回该元素;如果不存在,则返回-1
 * 
 * @param arr 一个整数数组
 * @return 出现次数超过数组长度四分之一的元素,如果不存在,则返回-1
 */
public int findSpecialInteger(int[] arr) {
    // 数组长度
    int n = arr.length;
    // 初始化计数器
    int count = 1;
    // 当前检查的元素
    int cur = arr[0];
    // 如果数组只有一个元素,直接返回这个元素
    if(1 == n){
        return arr[0];
    }
    // 遍历数组,从第二个元素开始
    for (int i = 1; i < n; i++) {
        // 如果当前元素与前一个元素相同,增加计数
        if (arr[i] == cur) {
            count++;
            // 如果当前元素的出现次数超过数组长度的四分之一,返回这个元素
            if (count > n / 4) {
                return cur;
            }
        } else {
            // 如果当前元素与前一个元素不同,重置当前元素和计数器
            cur = arr[i];
            count = 1;
        }
    }
    // 如果没有找到符合条件的元素,返回-1
    return -1;
}
posted @ 2025-02-17 16:53  JAVA-CHENG  阅读(24)  评论(0)    收藏  举报