如何在整数数组中找到最大非重复数?

时间:2016-09-19 19:47:38

标签: algorithm

假设我有一个未排序的整数数组{3,-1,4,5,-3,2,5},我想找到最大的非重复数(在这种情况下为4)(5无效为它是重复的)。我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:1)

使用无序映射计算每个元素的频率。 (作为优化,跟踪遇到的最大元素并跳过低于此的元素。)然后,扫描地图以找出频率恰好等于1的最大元素。

{{1}}

这在时间复杂度O(n)中运行并且需要空间复杂度O(n)。

答案 1 :(得分:0)

  1. 按降序对数组进行排序。
  2. 从顶部元素开始并将其存储为变量,例如max
  3. 使用max检查下一个元素,如果它们相同,则重复直到 你找到下一个max,否则,你发现最大不重复 号。
  4. 时间复杂度:O(nlogn)

    实施,基于我的Sort (C++)

    #include <algorithm>
    #include <iostream>
    #include <vector>
    #include <limits>
    #include <cstddef>
    
    using namespace std;
    
    void printVector(vector<int>& v)
    {
        for(vector<int>::iterator it = v.begin() ; it != v.end() ; it++)
            cout << *it << ' ';
        cout << endl;
    }
    
    bool compar(const int& a, const int& b)
    {
        return (a > b) ? true : false;
    }
    
    
    int main()
    {
        vector<int> v = {3, -1, 4, 5, -3, 2, 5};
        cout << "Before sorting : " << endl;
        printVector(v);
    
        sort(v.begin(), v.end(), compar);
    
        cout << endl << "After sorting : " << endl;
        printVector(v);
    
    
        int max_non_repeat = numeric_limits<int>::min();
        for(unsigned int i = 0; i < v.size(); ++i)
        {
            if(max_non_repeat == v[i])
                max_non_repeat = numeric_limits<int>::min();
            else if(v[i] > max_non_repeat)
                max_non_repeat = v[i];
        }
    
        cout << "Max non-repeated element: " << max_non_repeat << endl;
    
        return 0;
    }
    

    输出:

    C02QT2UBFVH6-lm:~ gsamaras$ g++ -Wall -std=c++0x  main.cpp 
    C02QT2UBFVH6-lm:~ gsamaras$ ./a.out 
    Before sorting : 
    3 -1 4 5 -3 2 5 
    
    After sorting : 
    5 5 4 3 2 -1 -3 
    Max non-repeated element: 4
    

    为了获得最大的乐趣,请在How to find max. and min. in array using minimum comparisons?上建立您的(不同的)方法并相应地进行修改。