题目链接:. - 力扣(LeetCode)
解题思路:
①按要求完善类
②可以设计两个一维数组,一个存number出现的频率,一个存出现该频率的数量。
③通过判断出现frequency的数量是否为0来判断true还是false
算法描述:
class FrequencyTracker {
private:
int num[100001]={0}; //不要开特别大,要初始化
int Count[100001]={0};
public:
FrequencyTracker() {
}
void add(int number) {
if(Count[number]==0){
Count[number]++; //含有number的频率++
num[Count[number]]++; //有number的频率的数量++
}
else{ //当number频率不为0的时候,应将满足它频率的个数-1,满足增加后的频率个数+1
num[Count[number]]--;
Count[number]++;
num[Count[number]]++;
}
}
void deleteOne(int number) {
if(Count[number]!=0){ //判断是否含有number的频率
num[Count[number]]--; //含有这个频率的数量要--
Count[number]--; //含有number,所以要--
if(Count[number]!=0)
num[Count[number]]++;
}
}
bool hasFrequency(int frequency) {
if(num[frequency]!=0) return 1; //判断频率是否存在
return 0;
}
};
分析讨论与总结:
①通过分析题目数量关系来使用两个数组,使其时间复杂度降低。
②频率的题目可以通过频率存在数量来判断正确与否。
③完成题目要求可以尝试不断优化题目,使代码效率提高。