Keshawn_lu's Blog

Leetcode 面试题 17.09. 第 k 个数

字数统计: 283阅读时长: 1 min
2022/09/28 Share

题目简介:

有些数的素因子只有 3,5,7,请设计一个算法找出第 k 个数。注意,不是必须有这些素因子,而是必须不包含其他的素因子。例如,前几个数按顺序应该是 1,3,5,7,9,15,21。

示例 1:

1
2
3
输入: k = 5

输出: 9

思路:

利用小根堆来储存数字,并用哈希表进行去重。

每次删除的数字便是第count小的数字,直至找到第k小的数字即可。

tip:

  • 使用long long,防止超出范围

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
class Solution {
public:
int getKthMagicNumber(int k) {

if(k == 1)
return 1;

priority_queue<long long,vector<long long>, greater<long long>> big_heap;
unordered_map<long long, int> map;

long long n = 1;
big_heap.push(n);
map[n] = 1;

n = big_heap.top();
int count = 1;

while(big_heap.size() < k){

if(map[n * 3] != 1){

big_heap.push(n * 3);
map[n * 3] = 1;
}
if(map[n * 5] != 1){

big_heap.push(n * 5);
map[n * 5] = 1;
}
if(map[n * 7] != 1){

big_heap.push(n * 7);
map[n * 7] = 1;
}

big_heap.pop(); //删除最小的
count++;
n = big_heap.top();

if(count == k)
return big_heap.top();
}

while(count < k){

big_heap.pop();
count++;
}

return big_heap.top();
}
};
CATALOG
  1. 1. 题目简介:
  2. 2. 思路:
  3. 3. 代码如下: