在单个for循环中查找数组中的重复元素

时间:2017-07-16 15:59:57

标签: c++ algorithm

那你好 假设你有一个数组[1,5,3,6,7,3,67,54] 其中每个元素只出现一次,除了一个元素,在这种情况下为3。手头的任务是找到这个元素,你只能使用一个for循环,它等于数组的大小。

PS: 你可能会建议使用哈希映射但是在这种情况下,在遍历数组之后,你需要遍历哈希映射以找到哪个键的值为2,这使得它为2循环并且是不允许的。

你会怎么做?

1 个答案:

答案 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;
}