Leetcode 215. 数组中的第K个最大元素
2021-05-01 13:27
标签:交换 思想 返回 names 快排 思路 namespace std ++i 在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。 主要思想:将区间[start, end)中第一个元素作为主元pivot,把该区间分为大于等于主元和小于主元2部分,返回主元所在的下标 拓展:快排的partition有3中写法 前2种写法注意while循环里面--j和++i的顺序不能倒过来。 Leetcode 215. 数组中的第K个最大元素 标签:交换 思想 返回 names 快排 思路 namespace std ++i 原文地址:https://www.cnblogs.com/pusidun/p/13207918.html题目
示例 1:
输入: [3,2,1,5,6,4] 和 k = 2
输出: 5
示例 2:
输入: [3,2,3,1,2,4,5,5,6] 和 k = 4
输出: 4
解法一:用快排partition思路
class Solution {
public:
int findKthLargest(vector
我们通过主元所在的位置,就能知道主元是第几大的元素
主义第一个元素应该随机选取,否则最坏情况算法会退化成O(n^2).我们这里partition是左边元素大于主元,右边元素小于主元。所以最坏情况下是数组从小到大已排序好。#include
通过--j退出时,j指向的元素必定可以和pivot交换,通过++i退出就不一定了。