1224. Maximum Equal Frequency
题意
给定一个正整数数组nums,返回nums数组前缀的最长可能长度,这样就可以从这个前缀中删除一个元素,这样出现在其中的每个数字都会有相同的出现次数。
如果删除一个元素后没有剩余的元素,则仍然认为每个出现的数字都有相同的出现次数(0)。
思路
代码
#include <stdio.h>
int max(int a, int b)
{
return a > b ? a : b;
}
int maxEqualFreq(int* nums, int numsSize)
{
int frequence[100000] = { 0 };
int diffnum[100000] = { 0 };
int answer = 0;
int max_frequence = 0;
for (int i = 0; i <numsSize; i++)//一个一个读数字
{
//更新最大出现次数,并将nums[i]这一数字出现次数更新
max_frequence= max(max_frequence,++frequence[nums[i]]);
//同理 更新这一频率的数字种类
diffnum[frequence[nums[i]]]++;
//满足下列两个条件,更新answer*
// 最大次数第一次出现 丨 其他数字的频率一样 即 (maxfrequence-1)*其他数字
if (diffnum[max_frequence] == 1 && diffnum[max_frequence - 1] * (max_frequence- 1) == i)
{
answer =i;
}
//所有数字出现频率相等 即 当前最大频率*当前最大频率的数字种类==当前数列数字个数i
else if (diffnum[max_frequence] * max_frequence == i)
{
answer = i;
}
}
//第一次出现最大出现频率,返回numsSzie;否则返回刚刚的答案加上删除的1;
answer =max_frequence== 1 ? numsSize : answer + 1;
return answer;
}