力扣2343.裁剪数字后查询第K小的数字
-
模拟过程
- 用一个下标数组idx做排序
- 根据nums中取到的数字排
-
class Solution { public: vector<int> smallestTrimmedNumbers(vector<string>& nums, vector<vector<int>>& queries) { vector<int> ans(queries.size()); int n = nums.size(),m = nums[0].size(); int idx[n]; for(int i=0;i<queries.size();i++) { auto &q = queries[i]; //从0开始递增填充 iota(idx,idx+n,0); //相同的元素位置不变,不同的排 stable_sort(idx,idx+n,[&](int a,int b){ auto &s = nums[a],&t = nums[b]; //取后面的几个 for(int j=m-q[1];j<m;j++) if(s[j] != t[j]) return s[j] < t[j]; return false; }); //第q[0]小的下标为q[0]-1 ans[i] = idx[q[0] - 1]; } return ans; } };