X

LEETCODE 1394. Find Lucky Integer in an Array 解题思路分析

题目大意:

找出数组中的幸运数

在整数数组中,如果一个整数的出现频次和它的数值大小相等,我们就称这个整数为「幸运数」。

给你一个整数数组 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.

本网站文章均为原创内容,并可随意转载,但请标明本文链接
如有任何疑问可在文章底部留言。为了防止恶意评论,本博客现已开启留言审核功能。但是博主会在后台第一时间看到您的留言,并会在第一时间对您的留言进行回复!欢迎交流!
本文链接: http://leetcode.jp/leetcode-1394-find-lucky-integer-in-an-array-解题思路分析/
Categories: leetcode
kwantong: