首页 > 试题广场 >

数组中的第K个最大元素

[编程题]数组中的第K个最大元素
  • 热度指数:1 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。

请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。

你必须设计并实现时间复杂度为 O(n) 的算法解决此问题。
示例1

输入

[3,2,1,5,6,4],2

输出

5
C++三路快排实现随机选择:
```
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param nums int整型vector 
     * @param k int整型 
     * @return int整型
     */
    // nums数组有序后,第 i 个数的位置
    int randSelect(vector<int>&nums, int i){
        int ans = 0;
        for(int l = 0, r = nums.size() - 1;l <= r;){
            int lt = l, gt = r, x = nums[l + rand() % (r - l + 1)];
            for(int j = l;j <= gt;){
                if(nums[j] < x){
                    swap(nums[j++], nums[lt++]);
                }else if(nums[j] == x){
                    j++;
                }else{
                    swap(nums[j], nums[gt--]);
                }
            }
            if(i < lt){
                r = lt - 1;
            }else if(i > gt){
                l = gt + 1;
            }else{
                ans = nums[i];
                break;
            }
        }
        return ans;
    }
    int findKthLargest(vector<int>& nums, int k) {
        // write code here
        return randSelect(nums, nums.size() - k);
    }
};

编辑于 2025-11-28 18:46:52 回复(0)