【C++实现】第k大元素 时间复杂度为O(n),空间复杂度为O(1)

题目来源:Lintcode

解题思路:

二基准快速排序,在排序时判断每次找到的标记点下标 p 与 n-k 的大小,若小于n-k,则只需在p的右侧继续递归,若大于 p 则只需在p 的左侧递归,直至 p 与 n-k 相等

vs可运行代码

#include<ctime>
#include<vector>
#include<iostream>
#include<cassert>
#include<string>
using namespace std;
namespace SortTestHelper {

	// 生成有n个元素的随机数组,每个元素的随机范围为[rangeL, rangeR]
	vector<int> generateRandomArray(int n, int rangeL, int rangeR)
	{
		assert(rangeL <= rangeR);

		vector<int> v;
		srand(time(NULL));
		for (int i = 0; i < n; i++)
			v.push_back( rand() % (rangeR - rangeL) + rangeL);
		return v;
	}
}

class Solution {
public:
	/*
	* @param n: An integer
	* @param nums: An array
	* @return: the Kth largest element
	*/
	
	int __partition(vector<int> &arr, int
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值