Skip to content

Commit 619405b

Browse files
committed
Update 0347. 前 K 个高频元素.md
1 parent 96a1826 commit 619405b

File tree

1 file changed

+27
-6
lines changed

1 file changed

+27
-6
lines changed

Solutions/0347. 前 K 个高频元素.md

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,22 +5,39 @@
55

66
## 题目大意
77

8-
给定一个整数数组 `nums` 和一个整数 `k`
8+
**描述**给定一个整数数组 `nums` 和一个整数 `k`
99

10-
要求:返回出现频率前 `k` 高的元素。可以按任意顺序返回答案。
10+
**要求**:返回出现频率前 `k` 高的元素。可以按任意顺序返回答案。
11+
12+
**说明**
13+
14+
- $1 \le nums.length \le 10^5$。
15+
- $k$ 的取值范围是 $[1, 数组中不相同的元素的个数]$。
16+
- 题目数据保证答案唯一,换句话说,数组中前 $k$ 个高频元素的集合是唯一的。
17+
18+
**示例**
19+
20+
```Python
21+
输入: nums = [1,1,1,2,2,3], k = 2
22+
输出: [1,2]
23+
24+
25+
输入: nums = [1], k = 1
26+
输出: [1]
27+
```
1128

1229
## 解题思路
1330

14-
1. 使用哈希表记录下数组中各个元素的频数。时间复杂度 $O(n)$,空间复杂度 $O(n)$。
31+
### 思路 1:哈希表 + 优先队列
32+
33+
1. 使用哈希表记录下数组中各个元素的频数。
1534
2. 然后将哈希表中的元素去重,转换为新数组。时间复杂度 $O(n)$,空间复杂度 $O(n)$。
1635
3. 使用二叉堆构建优先队列,优先级为元素频数。此时堆顶元素即为频数最高的元素。时间复杂度 $O(n)$,空间复杂度 $O(n)$。
1736
4. 将堆顶元素加入到答案数组中,进行出队操作。时间复杂度 $O(log{n})$。
1837
- 出队操作:交换堆顶元素与末尾元素,将末尾元素已移出堆。继续调整大顶堆。
1938
5. 不断重复第 4 步,直到 `k` 次结束。调整 `k` 次的时间复杂度 $O(nlog{n})$。
2039

21-
所以总体时间复杂度 $O(nlog{n})$。
22-
23-
## 代码
40+
### 思路 1:代码
2441

2542
```Python
2643
class Heapq:
@@ -105,3 +122,7 @@ class Solution:
105122
return res
106123
```
107124

125+
### 思路 1:复杂度分析
126+
127+
- **时间复杂度**:$O(n \times \log_2n)$。
128+
- **空间复杂度**:$O(n)$。

0 commit comments

Comments
 (0)