题目
解题思路
- 排序。
- 外循环标记当前要统计次数的数字,内循环向后遍历统计次数。
- 首先从第0个数字开始,内循环向后遍历,遇到相同的数字计数+1,直到找到第一个不同的数字退出内循环。
- 统计出现次数是否满足众数的要求。
- 内循环指针为j,此时j指向的是下一个数字的起始位
Code
class Solution {
public List<Integer> majorityElement(int[] nums) {
int majorityCount = nums.length / 3;
List<Integer> res = new ArrayList<>();
Arrays.sort(nums); //排序
int j;
for (int i = 0; i < nums.length; ) {
int count = 1; //对每一个数字的出现次数计数
//记录当前数字的出现次数
for (j = i + 1; j < nums.length; j++) {
if (nums[j] == nums[i]) {
count++;
} else {
break;
}
}
if (count > majorityCount) {
res.add(nums[i]);
}
i = j; //更新下一个数字的索引
}
return res;
}
}
代码运行结果截图