假设我有一个未排序的整数数组{3,-1,4,5,-3,2,5},我想找到最大的非重复数(在这种情况下为4)(5无效为它是重复的)。我怎样才能做到这一点?
答案 0 :(得分:1)
使用无序映射计算每个元素的频率。 (作为优化,跟踪遇到的最大元素并跳过低于此的元素。)然后,扫描地图以找出频率恰好等于1的最大元素。
{{1}}
这在时间复杂度O(n)中运行并且需要空间复杂度O(n)。
答案 1 :(得分:0)
max
。max
检查下一个元素,如果它们相同,则重复直到
你找到下一个max
,否则,你发现最大不重复
号。时间复杂度:O(nlogn)
c++实施,基于我的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?上建立您的(不同的)方法并相应地进行修改。