找出数组中出现次数大于⌊ n/3 ⌋的数
满足条件的数可能为0、1、2个,记录这可能的两个数的值,然后查这两个数在数组里面出现的次数是否满足要求
public class Solution {
public List<Integer> majorityElement(int[] nums) {
List<Integer> res = new LinkedList();
int c1 = 0;
int c2 = 0;
int n1 = 0;
int n2 = 0;
for (int n : nums) {
if (n == n1) {
c1++;
} else if (n == n2) {
c2++;
} else if (c1 == 0) {
c1 = 1;
n1 = n;
} else if (c2 == 0) {
c2 = 1;
n2 = n;
} else {
c1--;
c2--;
}
}
c1 = 0;
c2 = 0;
for (int n : nums) {
if (n == n1) {
c1++;
} else if (n == n2) {
c2++;
}
}
if (c1 > nums.length / 3) {
res.add(n1);
}
if (c2 > nums.length / 3 && n1 != n2) {
res.add(n2);
}
return res;
}
}