Python 3.x 黑客银行的频率查询

Python 3.x 黑客银行的频率查询,python-3.x,dictionary,Python 3.x,Dictionary,我一直在解决这个问题:,不知何故,在所有超时情况下,我都在努力让代码正常工作,在我的情况下,只有5个。所有这些暂停的情况下,没有错误的答案 我有这个解决方案,其中我只使用DefaultDict,我确信,它应该适用于大于10^9的情况,但每次都会超时 为什么我的代码效率很低? 您的代码如何比我的解决方案更好? 我的代码: 我认为最好的解决办法就是这样。我的答案是开着的,如果我错了,请纠正我。多谢各位 如果d中的数据值为0,则打印1 问题在于,d值不是检查给定值是否在字典中的好方法。 Python内

我一直在解决这个问题:,不知何故,在所有超时情况下,我都在努力让代码正常工作,在我的情况下,只有5个。所有这些暂停的情况下,没有错误的答案

我有这个解决方案,其中我只使用DefaultDict,我确信,它应该适用于大于10^9的情况,但每次都会超时

为什么我的代码效率很低? 您的代码如何比我的解决方案更好? 我的代码:

我认为最好的解决办法就是这样。我的答案是开着的,如果我错了,请纠正我。多谢各位

如果d中的数据值为0,则打印1

问题在于,d值不是检查给定值是否在字典中的好方法。 Python内部对键使用哈希函数,而不是对映射到该键上的值使用哈希函数。因此,如果您正在按键删除、更新和插入值,那么平均案例操作可能在O1中起作用。但最坏情况下的复杂性可能是罕见但不可忽视的。因此,您的解决方案未启用

试着用两本字典做些什么,一本是频率,一本是频率计数 下面是我在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";
            }
        }
    }

那么我可以知道我的问题有多复杂吗。我认为循环是具有最高复杂性的循环,因此继续。加上你的代码很难理解,请评论你的代码,以便我能理解。您不认为,您的程序将占用更多空间吗?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";
            }
        }
    }