首页 > 解决方案 > 使用哈希表解决此问题的问题

问题描述

Andryusha 是一个有秩序的男孩,喜欢把东西放在自己的位置上。

今天他遇到了把袜子放进衣柜的问题。他有 n 对不同的袜子,最初放在一个袋子里。这些对从 1 到 n 编号。Andryusha 想把成对的袜子放在一起放在衣柜里。他从袋子里一只一只地取出袜子,每一只袜子他都看这双袜子是否已经从袋子里拿出来了。如果没有(这意味着这双袜子还在包里),他将当前的袜子放在他面前的桌子上。否则,他会把这双袜子里的两只袜子都放到衣柜里。

Andryusha 记得他从袋子​​里取出袜子的顺序。你能告诉他同时放在桌子上的袜子的最大数量是多少?这就是问题。

https://codeforces.com/contest/782/problem/A这是问题陈述。

int main()
{
    init_code();
    int n ; 
    cin >> n ; 
    unordered_map <int ,int> hash;
    int count  = 0 ;
    int max = count ;
    int s;
    while(n--)
    {   cin >> s; 
        hash[s]++;
        if(hash[s] == 1)
            count++;
        if(hash[s] == 2)
            count--;  
        if(max <= count)
            max = count; 
    }

    cout << max ; 
    return 0; 
}

https://codeforces.com/contest/782/submission/119472076

这是我对使用哈希表的问题的回答,即在 C++ STL 中使用 unordered_map。

首选方法是使用数组。

有人可以帮帮我吗,我觉得我的逻辑是正确的,我无法得到测试用例 4 的正确答案,这是一个非常大的数字。我正在使用哈希表。

问题是要找到同时放在桌子上的袜子的最大数量。你可以一次拿一只袜子的地方。

有人可以告诉我为什么哈希表是解决这个问题的不好方法,或者没有给我正确的答案。

标签: c++hashtablec++-standard-library

解决方案


2*n数字要读取和处理,但您只处理了n数字。2*n要修复的进程号。


推荐阅读