LeetCode 215 数组中第 K 个最大元素

1、题目描述

  给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。
请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。
示例 1:
  输入: [3,2,1,5,6,4] 和 k = 2
  输出: 5
示例 2:
  输入: [3,2,3,1,2,4,5,5,6] 和 k = 4
  输出: 4

2、思路
2.1使用基本排序算法

排序后 返回第 数组长度 - k 个元素

class Solution {
public:
    //先排序:快速排序
    void kpsort(vector<int>& nums, int i , int j){
        if(i < j){
            int left = i, right = j;
            int mid = nums[left];
            while(left < right){
                while(nums[right] >= mid && left < right){
                    right--;
                }
                if(left < right){
                    nums[left++] = nums[right];
                }
                while(nums[left] < mid && left < right){
                    left++;
                }
                if(left < right){
                    nums[right--] = nums[left];
                }
            }
            nums[left] = mid;
            kpsort(nums, i, left - 1);
            kpsort(nums, left + 1, j);
        }
    }
    int findKthLargest(vector<int>& nums, int k) {
        kpsort(nums, 0 , nums.size() -1);
        return nums[nums.size() - k];
    }
};
2.2 使用容器 multiset
class Solution {
public:
    int findKthLargest(vector<int>& nums, int k) {
        multiset<int>mset;
        for(int i = 0; i<nums.size(); ++i){
            mset.insert(nums[i]);
        }
        auto it = mset.end();
        while(k--){
            it--;
        }
        return *it;
    }
};

整理不易 你的点赞、关注是对我莫大的鼓励
LeetCode 215 数组中第 K 个最大元素_第1张图片

你可能感兴趣的:(LeetCode,leetcode,排序算法,算法,c++)