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;
}

浙公网安备 33010602011771号