题目:
在整数数组中,如果一个整数的出现频次和它的数值大小相等,我们就称这个整数为「幸运数」。
给你一个整数数组 arr,请你从中找出并返回一个幸运数。
如果数组中存在多个幸运数,只需返回 最大 的那个。
如果数组中不含幸运数,则返回 -1 。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/find-lucky-integer-in-an-array
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
注意:这道题如果复杂度到O(n2)直接超时
方法一:数组法,数组作为下标计算出现的频率,之后遍历一次根据条件就能找到最大的幸运数
class Solution {
public:
int findLucky(vector<int>& arr)
{
int max=-1;
int num[1000]={-1};
for(int i=0;i<arr.size();i++)
num[arr[i]]++;
for(int j=0;j<1000;j++)
{
if(j==num[j]&&max<j)
max=j;
}
return max;
}
};
**方法二:**直接用map做,但是会很浪费时间,unordered_map甚至更慢
class Solution {
public:
int findLucky(vector<int>& arr)
{
int max=-1;
map<int,int>ret;
if(arr.size()<=0)
return max;
for(int i=0;i<arr.size();i++)
{
ret[arr[i]]++;
}
for(auto iter :ret)
{
if(iter.first==iter.second&&max<iter.second)
{
max=iter.second;
}
}
return max;
}
};
这是数组的运行结果
这是map的最好的运行结果,unordered_map都已经到10%了。
不得不承认C的强大。