[LeetCode]5855. 找出数组中的第 K 大整数

字符串比较

Posted by JinFei on August 31, 2021

题目描述

给你一个字符串数组nums和一个整数k。nums中的每个字符串都表示一个不含前导零的整数。

返回nums中表示第k大整数的字符串。

注意:重复的数字在统计时会视为不同元素考虑。例如,如果nums是[“1”,”2”,”2”],那么”2”是最大的整数,”2”是第二大的整数,”1”是第三大的整数。

Example 1:

输入:nums=[“3”,”6”,”7”,”10”],k=4 输出:”3” 解释: nums中的数字按非递减顺序排列为[“3”,”6”,”7”,”10”] 其中第4大整数是”3”

Example 2:

输入:nums = [“2”,”21”,”12”,”1”], k = 3 输出:”2” 解释: nums 中的数字按非递减顺序排列为 [“1”,”2”,”12”,”21”] 其中第 3 大整数是 “2”

Example 3:

输入:nums = [“0”,”0”], k = 2 输出:”0” 解释: nums 中的数字按非递减顺序排列为 [“0”,”0”] 其中第 2 大整数是 “0”

Constraints:

  • 1 <= k <= nums.length <= 10^4
  • 1 <= nums[i].length <= 100
  • nums[i] 仅由数字组成
  • nums[i] 不含任何前导零

解题思路

  • 自定义字符串排序

C++代码

class Solution {
public:
    static bool cmp(string& a, string& b){
        return a.size() > b.size() || (a.size() == b.size() && a > b);
    }
    string kthLargestNumber(vector<string>& nums, int k) {
        sort(nums.begin(), nums.end(), cmp);
        string s = nums[k - 1];
        return s;
    }
};