21.1.29 LeetCode 1224. Maximum Equal Frequency

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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值