1
- // Time: O(q + n * l )
2
- // Space: O(l + n + q)
1
+ // Time: O(q + n * t )
2
+ // Space: O(t + n + q)
3
3
4
4
// radix sort
5
5
class Solution {
6
6
public:
7
7
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 );
9
13
for (int i = 0 ; i < size (queries); ++i) {
10
14
lookup[queries[i][1 ]].emplace_back (queries[i][0 ], i);
11
15
}
12
16
vector<int > idxs (size (nums));
13
17
iota (begin (idxs), end (idxs), 0 );
14
18
vector<int > result (size (queries));
15
- for (int l = 1 ; l <= size (nums[ 0 ]) ; ++l) {
19
+ for (int l = 1 ; l <= max_t ; ++l) {
16
20
vector<int > cnt (10 );
17
21
for (int i = 0 ; i < size (idxs); ++i) {
18
22
const int d = nums[idxs[i]][size (nums[idxs[i]]) - l]- ' 0' ;
@@ -37,7 +41,7 @@ class Solution {
37
41
};
38
42
39
43
// Time: O(q * n * t) on average
40
- // Space: O(n)
44
+ // Space: O(n + q )
41
45
// quick select
42
46
class Solution2 {
43
47
public:
@@ -59,20 +63,24 @@ class Solution2 {
59
63
}
60
64
};
61
65
62
- // Time: O(q + nlogn * l )
63
- // Space: O(l + n + q)
66
+ // Time: O(q + nlogn * t )
67
+ // Space: O(t + n + q)
64
68
// sort
65
69
class Solution3 {
66
70
public:
67
71
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 );
69
77
for (int i = 0 ; i < size (queries); ++i) {
70
78
lookup[queries[i][1 ]].emplace_back (queries[i][0 ], i);
71
79
}
72
80
vector<int > idxs (size (nums));
73
81
iota (begin (idxs), end (idxs), 0 );
74
82
vector<int > result (size (queries));
75
- for (int t = 1 ; t <= size (nums[ 0 ]) ; ++t) {
83
+ for (int t = 1 ; t <= max_t ; ++t) {
76
84
if (empty (lookup[t])) {
77
85
continue ;
78
86
}
0 commit comments