LC264. 丑数 II

LC264. 丑数 II

给你一个整数 n ,请你找出并返回第 n丑数

丑数 就是质因子只包含 235 的正整数。

示例 1:

1
2
3
输入:n = 10
输出:12
解释:[1, 2, 3, 4, 5, 6, 8, 9, 10, 12] 是由前 10 个丑数组成的序列。

示例 2:

1
2
3
输入:n = 1
输出:1
解释:1 通常被视为丑数。

提示:

  • 1 <= n <= 1690
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
class Solution {
public:
int nthUglyNumber(int n) {
int p2 = 1, p3 = 1, p5 = 1;
int product2 = 1, product3 = 1, product5 = 1;
vector<int> ugly(n + 1, 0);

int p = 1;
while(p <= n) {
int min_val = std::min({product2, product3, product5});
ugly[p++] = min_val;
if(min_val == product2) {
product2 = 2 * ugly[p2++];
}

if(min_val == product3) {
product3 = 3 * ugly[p3++];
}

if(min_val == product5) {
product5 = 5 * ugly[p5++];
}
}
return ugly[n];
}
};

378. 有序矩阵中第 K 小的元素

给你一个 n x n 矩阵 matrix ,其中每行和每列元素均按升序排序,找到矩阵中第 k 小的元素。 请注意,它是 排序后 的第 k 小元素,而不是第 k不同 的元素。

你必须找到一个内存复杂度优于 O(n2) 的解决方案。

示例 1:

1
2
3
输入:matrix = [[1,5,9],[10,11,13],[12,13,15]], k = 8
输出:13
解释:矩阵中的元素为 [1,5,9,10,11,12,13,13,15],第 8 小元素是 13

示例 2:

1
2
输入:matrix = [[-5]], k = 1
输出:-5

提示:

  • n == matrix.length
  • n == matrix[i].length
  • 1 <= n <= 300
  • -109 <= matrix[i][j] <= 109
  • 题目数据 保证 matrix 中的所有行和列都按 非递减顺序 排列
  • 1 <= k <= n2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Solution {
public:
int kthSmallest(vector<vector<int>>& matrix, int k) {
auto cmp = [](vector<int>& a, vector<int>& b) {return a[0] > b[0];};
priority_queue<vector<int>, vector<vector<int>>, decltype(cmp)> pq(cmp);
for(int i = 0; i < matrix.size(); i++) {
pq.push({matrix[i][0], i, 0});
}

int res = -1;
while(!pq.empty() && k > 0) {
vector<int> cur = pq.top();
pq.pop();
res = cur[0];
k--;
int i = cur[1], j = cur[2];
if(j + 1 < matrix[i].size()) {
pq.push({matrix[i][j + 1], i, j + 1});
}
}
return res;
}
};

LC264. 丑数 II
http://binbo-zappy.github.io/2025/03/04/leetcode/LC264-丑数 II/
作者
Binbo
发布于
2025年3月4日
许可协议