那你好 假设你有一个数组[1,5,3,6,7,3,67,54] 其中每个元素只出现一次,除了一个元素,在这种情况下为3。手头的任务是找到这个元素,你只能使用一个for循环,它等于数组的大小。
PS: 你可能会建议使用哈希映射但是在这种情况下,在遍历数组之后,你需要遍历哈希映射以找到哪个键的值为2,这使得它为2循环并且是不允许的。
你会怎么做?
答案 0 :(得分:4)
哈希地图可以解决您的问题。实际上,它比你需要的还要多。使用unordered_set。遍历数组,如果集合中不存在值则插入它;否则你找到了你的重复值。
<强> - 编辑 - 强>
好的,我们其中一个人不理解另一个,这是肯定的。根据我对您的问题的理解,下面是使用集合的示例解决方案。如果您认为我仍然误解,请详细说明您的问题。
#include<vector>
#include<iostream>
#include<unordered_set>
bool repeating(const std::vector<int> &vec, int &repeatingValue)
{
std::unordered_set<int> set;
for(auto x: vec)
{
if(set.count(x))
{
repeatingValue = x;
return true;
}
set.insert(x);
}
return false;
}
int main()
{
std::vector<int> v{1,5,3,6,7,3,67,54};
int repeatingValue;
if(repeating(v, repeatingValue))
std::cout<<repeatingValue<<std::endl;
else
std::cout<<"No repeating value detected!" << std::endl;
return 0;
}