Python 3.x 黑客银行的频率查询
我一直在解决这个问题:,不知何故,在所有超时情况下,我都在努力让代码正常工作,在我的情况下,只有5个。所有这些暂停的情况下,没有错误的答案 我有这个解决方案,其中我只使用DefaultDict,我确信,它应该适用于大于10^9的情况,但每次都会超时 为什么我的代码效率很低? 您的代码如何比我的解决方案更好? 我的代码: 我认为最好的解决办法就是这样。我的答案是开着的,如果我错了,请纠正我。多谢各位 如果d中的数据值为0,则打印1 问题在于,d值不是检查给定值是否在字典中的好方法。 Python内部对键使用哈希函数,而不是对映射到该键上的值使用哈希函数。因此,如果您正在按键删除、更新和插入值,那么平均案例操作可能在O1中起作用。但最坏情况下的复杂性可能是罕见但不可忽视的。因此,您的解决方案未启用 试着用两本字典做些什么,一本是频率,一本是频率计数 下面是我在C++中使用两个图的例子Python 3.x 黑客银行的频率查询,python-3.x,dictionary,Python 3.x,Dictionary,我一直在解决这个问题:,不知何故,在所有超时情况下,我都在努力让代码正常工作,在我的情况下,只有5个。所有这些暂停的情况下,没有错误的答案 我有这个解决方案,其中我只使用DefaultDict,我确信,它应该适用于大于10^9的情况,但每次都会超时 为什么我的代码效率很低? 您的代码如何比我的解决方案更好? 我的代码: 我认为最好的解决办法就是这样。我的答案是开着的,如果我错了,请纠正我。多谢各位 如果d中的数据值为0,则打印1 问题在于,d值不是检查给定值是否在字典中的好方法。 Python内
map<int,int> count,freq_count;
ll i,j,k,n,m,mask,x;
cin>>n;
for(i=0;i<n;i++){
cin>>x>>m;
if(x==1){
if(count.find(m)!=count.end()){
freq_count[count[m]]--;
if(freq_count[count[m]] == 0)
freq_count.remove(count[m]);
}
count[m]++;
frefreq_count[count[m]]++;
} else if(x==2) {
freq_count[count[m]]--;
if(freq_count[count[m]] == 0)
freq_count.remove(count[m]);
if(count[m]==0)
count.remove(m);
} else {
if(freq_count.find(m)!= freq_count.end()){
cout<<"1\n";
}
else{
count<<"0\n";
}
}
}
那么我可以知道我的问题有多复杂吗。我认为循环是具有最高复杂性的循环,因此继续。加上你的代码很难理解,请评论你的代码,以便我能理解。您不认为,您的程序将占用更多空间吗?d.values具有字典大小的复杂性,因为您正在检查字典值中是否存在数据。只需打印一次d.values并选中它即可打印整个值列表。在处理哈希时,由于冲突,无法精确计算复杂性,python在dict实现中内部使用哈希。我们无法在O1中完成所有插入、删除和更新操作。我们必须对Python在代码中为你和C++做的一些预处理。
map<int,int> count,freq_count;
ll i,j,k,n,m,mask,x;
cin>>n;
for(i=0;i<n;i++){
cin>>x>>m;
if(x==1){
if(count.find(m)!=count.end()){
freq_count[count[m]]--;
if(freq_count[count[m]] == 0)
freq_count.remove(count[m]);
}
count[m]++;
frefreq_count[count[m]]++;
} else if(x==2) {
freq_count[count[m]]--;
if(freq_count[count[m]] == 0)
freq_count.remove(count[m]);
if(count[m]==0)
count.remove(m);
} else {
if(freq_count.find(m)!= freq_count.end()){
cout<<"1\n";
}
else{
count<<"0\n";
}
}
}