Skip to content

Commit 7fe9c3a

Browse files
authored
Update query-kth-smallest-trimmed-number.cpp
1 parent 6d3271a commit 7fe9c3a

File tree

1 file changed

+17
-9
lines changed

1 file changed

+17
-9
lines changed

C++/query-kth-smallest-trimmed-number.cpp

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,22 @@
1-
// Time: O(q + n * l)
2-
// Space: O(l + n + q)
1+
// Time: O(q + n * t)
2+
// Space: O(t + n + q)
33

44
// radix sort
55
class Solution {
66
public:
77
vector<int> smallestTrimmedNumbers(vector<string>& nums, vector<vector<int>>& queries) {
8-
vector<vector<pair<int, int>>> lookup(size(nums[0]) + 1);
8+
int max_t = 0;
9+
for (int i = 0; i < size(queries); ++i) {
10+
max_t = max(max_t, queries[i][1]);
11+
}
12+
vector<vector<pair<int, int>>> lookup(max_t + 1);
913
for (int i = 0; i < size(queries); ++i) {
1014
lookup[queries[i][1]].emplace_back(queries[i][0], i);
1115
}
1216
vector<int> idxs(size(nums));
1317
iota(begin(idxs), end(idxs), 0);
1418
vector<int> result(size(queries));
15-
for (int l = 1; l <= size(nums[0]); ++l) {
19+
for (int l = 1; l <= max_t; ++l) {
1620
vector<int> cnt(10);
1721
for (int i = 0; i < size(idxs); ++i) {
1822
const int d = nums[idxs[i]][size(nums[idxs[i]]) - l]- '0';
@@ -37,7 +41,7 @@ class Solution {
3741
};
3842

3943
// Time: O(q * n * t) on average
40-
// Space: O(n)
44+
// Space: O(n + q)
4145
// quick select
4246
class Solution2 {
4347
public:
@@ -59,20 +63,24 @@ class Solution2 {
5963
}
6064
};
6165

62-
// Time: O(q + nlogn * l)
63-
// Space: O(l + n + q)
66+
// Time: O(q + nlogn * t)
67+
// Space: O(t + n + q)
6468
// sort
6569
class Solution3 {
6670
public:
6771
vector<int> smallestTrimmedNumbers(vector<string>& nums, vector<vector<int>>& queries) {
68-
vector<vector<pair<int, int>>> lookup(size(nums[0]) + 1);
72+
int max_t = 0;
73+
for (int i = 0; i < size(queries); ++i) {
74+
max_t = max(max_t, queries[i][1]);
75+
}
76+
vector<vector<pair<int, int>>> lookup(max_t + 1);
6977
for (int i = 0; i < size(queries); ++i) {
7078
lookup[queries[i][1]].emplace_back(queries[i][0], i);
7179
}
7280
vector<int> idxs(size(nums));
7381
iota(begin(idxs), end(idxs), 0);
7482
vector<int> result(size(queries));
75-
for (int t = 1; t <= size(nums[0]); ++t) {
83+
for (int t = 1; t <= max_t; ++t) {
7684
if (empty(lookup[t])) {
7785
continue;
7886
}

0 commit comments

Comments
 (0)