题目大意:
找出数组中的幸运数
在整数数组中,如果一个整数的出现频次和它的数值大小相等,我们就称这个整数为「幸运数」。
给你一个整数数组 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 <= 5001 <= arr[i] <= 500
如果想查看本题目是哪家公司的面试题,请参考以下免费链接: https://leetcode.jp/problemdetail.php?id=1394
解题思路分析:
本题没有什么难度,我们先遍历一遍数组,统计出每种数字的个数,然后再遍历一遍数组,查看哪个数字等于它的个数即可。
实现代码:
public int findLucky(int[] arr) {
int[] count=new int[501];
int length=arr.length;
for(int num:arr){
if(num>length) continue;
count[num]++;
}
for(int i=length;i>=1;i--){
if(count[i]==i) return i;
}
return -1;
}本题解法执行时间为1ms。
Runtime: 1 ms, faster than 99.90% of Java online submissions for Find Lucky Integer in an Array.
Memory Usage: 39.4 MB, less than 100.00% of Java online submissions for Find Lucky Integer in an Array.
Kotlin版本:
fun findLucky(arr: IntArray): Int {
var count = IntArray(501);
for(n in arr) count[n]++;
for(n in count.lastIndex downTo 1){
if(count[n]==n) return n;
}
return -1;
}Runtime: 188 ms, faster than 84.62% of Kotlin online submissions for Find Lucky Integer in an Array.
Memory Usage: 35 MB, less than 100.00% of Kotlin online submissions for Find Lucky Integer in an Array.
本网站文章均为原创内容,并可随意转载,但请标明本文链接如有任何疑问可在文章底部留言。为了防止恶意评论,本博客现已开启留言审核功能。但是博主会在后台第一时间看到您的留言,并会在第一时间对您的留言进行回复!欢迎交流!
本文链接: https://leetcode.jp/leetcode-1394-find-lucky-integer-in-an-array-解题思路分析/