-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathKth_smallest_trimmed_number.txt
42 lines (40 loc) · 1.53 KB
/
Kth_smallest_trimmed_number.txt
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
2343. Query Kth Smallest Trimmed Number
/*
You are given a 0-indexed array of strings nums, where each string is of
equal length and consists of only digits.
You are also given a 0-indexed 2D integer array queries where queries[i] = [ki, trimi]. For each queries[i],
you need to:
Trim each number in nums to its rightmost trimi digits.
Determine the index of the kith smallest trimmed number in nums.
If two trimmed numbers are equal, the number with the lower index is considered to be smaller.
Reset each number in nums to its original length.
Return an array answer of the same length as queries, where answer[i] is the answer to the ith query.
Note:
To trim to the rightmost x digits means to keep removing the leftmost digit, until only x digits remain.
Strings in nums may contain leading zeros.
*\
class Solution {
public:
vector<int> smallestTrimmedNumbers(vector<string>& nums, vector<vector<int>>& queries) {
vector<int> res;
for(auto x: queries){
priority_queue<pair<string,int>> q;
for(int i = 0; i < nums.size(); i++){
int a = nums[i].length()-x[1];
string str = nums[i].substr(a,x[1]);
if(q.size() < x[0]){
q.push({str,i});
}
else{
if(q.top().first > str){
q.pop();
q.push({str,i});
}
}
}
int value = q.top().second;
res.push_back(value);
}
return res;
}
};