题目:在数组中找到重复次数出现最多的数? 至少两种方法. 其中一种空间复杂度要求O(1)
1、第一种方法是使用map来对数组进行出现的元素的次数进行记录。
map<int,int> mp; mp[v[i]]++。要使用额外空间。
2、第二种方法
我们考虑先对元素进行排序(使用快排,冒泡…都可以),然后使用count来记录现在的元素和下一个元素个数,在使用一个pair记录当前最大元素的值和个数,进行动态更新,有点像动态规划。
pair<int, int> fun1(vector<int>& v)
{
pair<int, int> cur = { v[0],0 };
int count = 0;
int tmp = v[0];
for (auto e : v)
{
if (tmp == e)
{
count++;
if (cur.second < count)
{
cur.first = e;
cur.second = count;
}
}
else
{
tmp = e;
count = 1;
}
}
return cur;
}
int main()
{
vector<int> v = { 2,2,1,1,1,2,2,1,1,1,2,5,6,7,8};
sort(v.begin(), v.end());
pair<int, int> cur = fun1(v);
cout << cur.first<<" "<<cur.second <<endl; //输出 1 6
}
其实应该还有第三种方法,当要求不能使用循环的时候,我们就想到了递归。