为什么这个解决方案比另一个更快?

Why is this soln faster than the other?

问题是 Leetcode 的 N-Repeated Element in Size 2N Array

In a array A of size 2N, there are N+1 unique elements, and exactly one of these elements is repeated N times.

Return元素重复N次

我很困惑,请帮忙!

更快的代码

    class Solution {
public:
    int repeatedNTimes(vector<int>& A) {
        auto it = A.begin();
        while(it!=A.end())
        {
            if(count(A.begin(),A.end(),*it)>1)
            {
                break;
            }
            else
                it++;              
        }
        return *it;
    }
};

较慢的代码

    class Solution {
public:
    int repeatedNTimes(vector<int>& A) {
        unordered_map<int,int> u;
        int rep;
        for(auto i: A){
            u[i]++;
            if(u[i]>1){
                rep=i;
            }
        }
        
        return rep;
    }
};

这是使用上述方法的一些(未经测试的)代码。我确实假设输入数据采用所描述的形式。如果不是这种情况,此代码将出错。

class Solution
{
public:
    int repeatedNTimes(vector<int>& A) {
        // check for alternating elements at even indexes
        if (A[0] == A[2])
           return A[0];
        // check for alternating elements at odd indexes
        if (A[1] == A[3])
           return A[1];
        // check for first and last being the same
        if (A.front() == A.back())
           return A.front();
        // check adjacent elements
        for (size_t i = 0;; ++i)
        {
            if (A[i] == A[i + 1])
                return A[i];
        }
        return -1;
    }
};

编辑

想到一个bug,我的算法只有在相邻环绕时才有效,即第一个和最后一个元素也被认为是相邻的。我也添加了代码来检查这种可能性。