在整数数组中,如果一个整数的出现频次和它的数值大小相等,我们就称这个整数为「幸运数」。
给你一个整数数组 arr,请你从中找出并返回一个幸运数。
如果数组中存在多个幸运数,只需返回 最大 的那个。 如果数组中不含幸运数,则返回 -1 。
示例 1:
输入:arr = [2,2,3,4]
输出:2
解释:数组中唯一的幸运数是 2 ,因为数值 2 的出现频次也是 2 。
示例 2:
输入:arr = [1,2,2,3,3,3]
输出:3
解释:1、2 以及 3 都是幸运数,只需要返回其中最大的 3 。
示例 3:
输入:arr = [2,2,2,3,3]
输出:-1
解释:数组中不存在幸运数。
示例 4:
输入:arr = [5]
输出:-1
示例 5:
输入:arr = [7,7,7,7,7,7,7]
输出:7
提示:
1 <= arr.length <= 500
1 <= arr[i] <= 500
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/find-lucky-integer-in-an-array 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
class Solution {
public:
int findLucky(vector<int>& arr) {
map<int,int> m;
for(int a : arr)
m[a]++;
int ans = -1;
for(auto& mi : m)
if(mi.first == mi.second)
ans = mi.first;
return ans;
}
};
20 ms 10.4 MB
class Solution:
def findLucky(self, arr: List[int]) -> int:
ans = sorted(filter(lambda x :x[0]==x[1], zip(set(arr),map(arr.count,set(arr)))), key = lambda x:x[0])
return ans[-1][0] if ans else -1;
72 ms 13.5 MB
zip(set(arr),map(arr.count,set(arr))
zip打包成:set去重的集合,及对应的个数mapfilter
:取出 满足 lambda 表达式的x[0]==x[1]
(元素==其频次)sorted
排序,key按照元素大小升序
ans[-1][0] if ans else -1
,最后一个【-1】最大的,【0】表示元素,ans空返回-1扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有