Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit c0bf7b8

Browse files
committed
01394 solved
1 parent 67ec318 commit c0bf7b8

File tree

2 files changed

+106
-0
lines changed
  • 01394-Find-out-the-lucky-number-in-the-array

2 files changed

+106
-0
lines changed
7.6 MB
Binary file not shown.
Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
# 1394. 找出数组中的幸运数
2+
3+
> 本文首发于公众号「图解面试算法」,是 [图解 LeetCode ](<https://github.com/MisterBooo/LeetCodeAnimation>) 系列文章之一。
4+
>
5+
> 同步博客:https://www.algomooc.com
6+
7+
题目来源于 LeetCode 上 1394题: 找出数组中的幸运数。,主要涉及哈希表。
8+
9+
## 题目
10+
11+
在整数数组中,如果一个整数的出现频次和它的数值大小相等,我们就称这个整数为「幸运数」。
12+
13+
给你一个整数数组 arr,请你从中找出并返回一个幸运数。
14+
15+
如果数组中存在多个幸运数,只需返回 最大 的那个。
16+
如果数组中不含幸运数,则返回 -1 。
17+
18+
19+
示例 1:
20+
21+
```
22+
输入:arr = [2,2,3,4]
23+
输出:2
24+
解释:数组中唯一的幸运数是 2 ,因为数值 2 的出现频次也是 2 。
25+
```
26+
27+
示例 2:
28+
29+
```
30+
输入:arr = [1,2,2,3,3,3]
31+
输出:3
32+
解释:1、2 以及 3 都是幸运数,只需要返回其中最大的 3 。
33+
```
34+
35+
示例 3:
36+
37+
```
38+
输入:arr = [2,2,2,3,3]
39+
输出:-1
40+
解释:数组中不存在幸运数。
41+
```
42+
43+
示例 4:
44+
45+
```
46+
输入:arr = [5]
47+
输出:-1
48+
```
49+
50+
示例 5:
51+
52+
```
53+
输入:arr = [7,7,7,7,7,7,7]
54+
输出:7
55+
```
56+
57+
提示:
58+
59+
1 <= arr.length <= 500
60+
1 <= arr[i] <= 500
61+
62+
## 题目解析
63+
64+
1. 遍历arr,用哈希表记录每个数组元素出现的次数
65+
2. 遍历哈希表,每次找到一个幸运数就和当前的幸运数对比,最后找到最大的幸运数,如果没有找到的话输出-1
66+
67+
## 动画理解
68+
69+
70+
<video id="video" controls="" preload="none" >
71+
<source id="mp4" src="../Animation/01394.mp4" type="video/mp4">
72+
</video>
73+
74+
## 参考代码
75+
76+
77+
```javaScript
78+
/**
79+
* @param {number[]} arr
80+
* @return {number}
81+
*/
82+
var findLucky = function(arr) {
83+
let map = new Map()
84+
let maxLucky = -1
85+
arr.map(i => {
86+
map.set(i, map.get(i)+1 || 1)
87+
})
88+
map.forEach((key, value)=>{
89+
if(key == value){
90+
maxLucky = Math.max(maxLucky, key)
91+
}
92+
})
93+
return maxLucky
94+
};
95+
```
96+
97+
## 复杂度分析
98+
99+
假设元素的个数是n个,那么哈希表中最多有 n 个键值对。
100+
101+
时间复杂度:这个算法里有两次遍历,遍历数组的时间复杂度是O(n),遍历哈希表的时间复杂度是O(n),所以最后的时间复杂度就是O(n)。
102+
103+
空间复杂度:额外只用了哈希表,哈希表中最多有 n 个键值对,所以空间复杂度是 O(n)。
104+
105+
106+
![](../../Pictures/qrcode.jpg)

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /