![数组、移动[5989] 元素计数,第1张 数组、移动[5989] 元素计数,第1张](/aiimages/%E6%95%B0%E7%BB%84%E3%80%81%E7%A7%BB%E5%8A%A8%5B5989%5D+%E5%85%83%E7%B4%A0%E8%AE%A1%E6%95%B0.png)
基础版:
// 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
优化版:
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)