1985. Find the Kth Largest Integer in the Array
Description
You are given an array of strings nums
and an integer k
. Each string in nums
represents an integer without leading zeros.
Return the string that represents the kth
largest integer in nums
.
Note: Duplicate numbers should be counted distinctly. For example, if nums
is ["1","2","2"]
, "2"
is the first largest integer, "2"
is the second-largest integer, and "1"
is the third-largest integer.
Example 1:
Input: nums = ["3","6","7","10"], k = 4 Output: "3" Explanation: The numbers in nums sorted in non-decreasing order are ["3","6","7","10"]. The 4th largest integer in nums is "3".
Example 2:
Input: nums = ["2","21","12","1"], k = 3 Output: "2" Explanation: The numbers in nums sorted in non-decreasing order are ["1","2","12","21"]. The 3rd largest integer in nums is "2".
Example 3:
Input: nums = ["0","0"], k = 2 Output: "0" Explanation: The numbers in nums sorted in non-decreasing order are ["0","0"]. The 2nd largest integer in nums is "0".
Constraints:
1 <= k <= nums.length <= 104
1 <= nums[i].length <= 100
nums[i]
consists of only digits.nums[i]
will not have any leading zeros.
Solutions
Solution 1: Sorting or Quickselect
We can sort the strings in the $\textit{nums}$ array in descending order as integers, and then take the $k$-th element. Alternatively, we can use the quickselect algorithm to find the $k$-th largest integer.
The time complexity is $O(n \times \log n)$ or $O(n)$, where $n$ is the length of the $\textit{nums}$ array. The space complexity is $O(\log n)$ or $O(1)$.
Python3
class Solution:
def kthLargestNumber(self, nums: List[str], k: int) -> str:
return nlargest(k, nums, key=lambda x: int(x))[k - 1]
Java
class Solution {
public String kthLargestNumber(String[] nums, int k) {
Arrays.sort(
nums, (a, b) -> a.length() == b.length() ? b.compareTo(a) : b.length() - a.length());
return nums[k - 1];
}
}
C++
class Solution {
public:
string kthLargestNumber(vector<string>& nums, int k) {
nth_element(nums.begin(), nums.begin() + k - 1, nums.end(), [](const string& a, const string& b) {
return a.size() == b.size() ? a > b : a.size() > b.size();
});
return nums[k - 1];
}
};
Go
func kthLargestNumber(nums []string, k int) string {
sort.Slice(nums, func(i, j int) bool {
a, b := nums[i], nums[j]
if len(a) == len(b) {
return a > b
}
return len(a) > len(b)
})
return nums[k-1]
}