题目大意:
找出数组中的幸运数
在整数数组中,如果一个整数的出现频次和它的数值大小相等,我们就称这个整数为「幸运数」。
给你一个整数数组 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
如果想查看本题目是哪家公司的面试题,请参考以下免费链接: 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-解题思路分析/