这个题目就是一个排序问题,只不过排序的是字符串类型表示的整数。
看提示信息可知每个数字的长度最长可达100,因此不能够将字符串转化成数字。
做法很简单:自定义一个字符串数字比较函数,排序找到第k大的元素。
C++ 中字符串可以直接比较大小,很方便,不要使用 compare 函数会导致排序错误。
自带快排:
(比较函数记得定义成 static bool;符号与意义相同 <:从小到大;>:从大到小)
class Solution {
public:static bool cmp (string s1, string s2) {if(s1.size() == s2.size()) return s1 > s2;else return s1.size() > s2.size();}string kthLargestNumber(vector<string>& nums, int k) {sort(nums.begin(), nums.end(), cmp);return nums[k-1];}
};
堆排序代码:
class Solution {
public:struct cmp {bool operator () (string s1, string s2) {if(s1.size() == s2.size()) return s1 < s2;else return s1.size() < s2.size();}};string kthLargestNumber(vector<string>& nums, int k) {string out = "";priority_queue<string, vector<string>, cmp> que;for(int i=0; i<nums.size(); i++){que.push(nums[i]);}while(k > 0) {out = que.top();que.pop();k--;}return out;}
};