为什么 unordered_map 在发现数组中是否存在重复值时每次都没有给出正确答案?

Why unordered_map is not giving correct answer every time while finding is there any duplicate value present in array or not?

我给了一个数组,我需要找出数组中是否存在重复元素? (我必须听取用户的意见。)

这是我的第一个代码,它给出了一些测试用例的错误答案:

#include<bits/stdc++.h>
using namespace std;

int main() {
    // your code goes here
    int t;
    cin>>t;
    while(t--)
    {
        int n;
        cin>>n;
        unordered_map<int,int> mp;
        int temp=1;
        for(int i=0,i<n;i++) 
        {
            int x; cin>>x;
            if(mp.find(x)!=mp.end()) 
            {
                temp=-1; break;
            }     
            
            mp[x]++;
        }
        if(temp==-1) cout<<"YES"<<endl; //if duplicate present
        else cout<<"NO"<<endl;
        mp.clear();
        
            
    }
    return 0;
}

这段代码 运行 在所有测试用例上都是完美的:

#include<bits/stdc++.h>
using namespace std;

int main() {
    // your code goes here
    int t;
    cin>>t;
    while(t--)
    {
        int n;
        cin>>n;
        unordered_map<int,int> mp;
        int temp=1;
        for(int i=0,i<n;i++)  
        {
            int x; 
            cin>>x;
               
            
            mp[x]++;
        }
        
        if(mp.size()<n) cout<<"YES"<<endl;
        else cout<<"NO"<<endl;
        mp.clear();
        
            
    }
    return 0;
}

背后的原因是什么?

您在第一个代码中使用了 break;,但在第二个代码中没有使用它。

使用break;将阻止代码读取部分测试用例并将其视为下一个文本用例,这将导致错误答案。

例如,使用这个输入

2
5 5 5 1 2 3
2 2 2

您的第一个代码将打印出来

YES
NO

而正确的输出是

YES
YES

为防止这种情况,应删除 break;