1. 题目原址
https://leetcode.com/problems/majority-element-ii/
2. 题目描述
3. 题目大意
给定一个数组,找到数组中所有出现的频率大于等于总数组元素三分之一的元素
4. 解题思路
因为要找的元素是频率大于总数组元素三分之一的元素,所以整个数组里面最多有两个这样的元素,因此我们只需要定义两个变量来存储这样的数据即可。
- 定义一类变量存储对应的元素值,定义一类变量存储对应的元素频率。
5. AC代码
class Solution {
public List<Integer> majorityElement(int[] nums) {
List<Integer> res = new ArrayList<Integer>();
if (nums == null || nums.length == 0) {
return res;
}
int number1 = nums[0], number2 = nums[0], count1 = 0, count2 = 0, n = nums.length;
for (int i = 0; i < n; i++) {
if (nums[i] == number1) { // 如果等于之前存储的元素,就将频率 + 1
count1++;
}
else if (nums[i] == number2) {
count2++;
}
else if (count1 == 0) { // 如果有其中一个元素的频率为0,那么就说明当前元素的频率大于这个元素的频率,就将存储的元素更新为当前的元素值。
number1 = nums[i];
count1 = 1;
}
else if (count2 == 0) {
number2 = nums[i];
count2 = 1;
}
else {
count1--;
count2--;
}
}
count1 = 0;
count2 = 0;
for (int num : nums) {
if (num == number1) count1++;
else if (num == number2) count2++;
}
if (count1 > n / 3) res.add(number1);
if (count2 > n / 3) res.add(number2);
return res;
}
}
6. 相似题型
【1】 169. Majority Element 题目原址:https://leetcode.com/problems/majority-element/