问题是 Leetcode 的 N-Repeated Element in Size 2N Array
<块引用>在大小为 2N 的数组 A 中,有 N+1 个唯一元素,并且恰好这些元素中的一个被重复了 N 次。
返回重复 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;
}
};
答案 0 :(得分:0)
这是使用上述方法的一些(未经测试的)代码。我确实假设输入数据采用所描述的形式。如果不是这种情况,此代码将出错。
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;
}
};
编辑
想到一个错误,我的算法仅在邻接环绕时才有效,即第一个和最后一个元素也被认为是相邻的。我也添加了代码来检查这种可能性。