基础版:
// 5989. 元素计数
class Solution {
public int countElements(int[] nums) {
// 返回结果
int ans = 0;
// 排序
Arrays.sort(nums);
// 辅助数组
// aux[0] < aux[1] < aux[2]
int[] aux = new int[3];
// 设置初始值为int 的最小值
Arrays.fill(aux, Integer.MIN_VALUE);
// times1 : 记录aux[1]元素值出现的次数
// times2 : 记录aux[2]元素值出现的次数
int times1 = 0, times2 = 0;
for(int i = 0; i < nums.length; i++){
if(aux[0] == nums[i] || aux[0] == Integer.MIN_VALUE){
// 跳过与当前aux[0]相同的值
// 或者初次设置
if(aux[0] != nums[i]){
aux[0] = nums[i];
}
continue;
}
else if(aux[1] == nums[i] || aux[1] == Integer.MIN_VALUE){
// 跳过与当前aux[1]相同的值
// 或者初次设置
if(aux[1] != nums[i]){
aux[1] = nums[i];
}
times1++;
continue;
}else if(aux[2] == nums[i] || aux[2] == Integer.MIN_VALUE){
// 跳过与当前aux[2]相同的值
// 或者初次设置
if(aux[2] != nums[i]){
aux[2] = nums[i];
}
times2++;
continue;
}else if(aux[2] != nums[i]){
// 当aux中元素都已经被设置,且当前又出现新元素
// 记录当前的结果
ans += times1;
// 移动数组元素
aux[0] = aux[1];
aux[1] = aux[2];
// 设置新元素
aux[2] = nums[i];
// 保存当前的times2次数
times1 = times2;
// 设置当前的aux[2]出现次数为1
times2 = 1;
}
}
// 检查是否计算最后一组
if(times2 >= 1)
ans += times1;
return ans;
}
}
TODO
优化版:


![数组、移动[5989] 元素计数 数组、移动[5989] 元素计数](http://www.mshxw.com/aiimages/31/715048.png)
