LC 1394.Find Lucky Integer in an Array
题目描述
这是 LeetCode
上的 1394.
找出数组中的幸运数 ,难度为简单。
在整数数组中,如果一个整数的出现频次和它的数值大小相等,我们就称这个整数为「幸运数」。
给你一个整数数组 arr
,请你从中找出并返回一个幸运数。
- 如果数组中存在多个幸运数,只需返回 最大 的那个。
- 如果数组中不含幸运数,则返回 -1 。
示例 1:
1 |
|
示例 2:
1 |
|
示例 3:
1 |
|
示例 4:
1 |
|
示例 5:
1 |
|
提示:
1 <= arr.length <= 500
1 <= arr[i] <= 500
解答
方法一:哈希表
最容易想到的方法就是用一个哈希表来存储出现的数字和次数,然后再用一个循环判断是否相等,返回其中最大的”幸运数“。
1 |
|
- 时间复杂度:\(O(n)\),遍历数组的时间代价是\(O(n)\),遍历哈希表的代价也是\(O(n)\),故渐进时间复杂度为\(O(n)\)。
- 空间复杂度:\(O(n)\),哈希表中最多有\(n\)个键值对,故渐进空间复杂度为\(O(n)\)。
方法二:用数组模拟哈希表
由提示中的数据可以看出可以用数组模拟哈希表来实现哈希表的功能,具体原理和方法一一样。
1 |
|
时间复杂度:\(O(n)\),遍历数组的时间代价是\(O(n)\),临时数组的大小为常数,所以时间复杂度为\(O(n)\)。
空间复杂度:\(O(1)\),临时数组的大小为常数,所以空间复杂度为\(O(1)\)。
每题一图
LC 1394.Find Lucky Integer in an Array
https://chen-huaneng.github.io/2023/12/05/2023-12-5-2023-12-05-lc-1394/