第k大元素

来源:互联网 发布:人工智能计算器3.8.1版 编辑:程序博客网 时间:2024/04/27 14:04

问题描述

http://www.lintcode.com/zh-cn/problem/kth-largest-element/

在数组中找到第k大的元素

样例
给出数组 [9,3,2,4,8],第三大的元素是 4

给出数组 [1,2,3,4,5],第一大的元素是 5,第二大的元素是 4,第三大的元素是 3,以此类推

笔记

使用快排的partition函数

代码

class Solution {public:    /*     * param k : description of k     * param nums : description of array and index 0 ~ n-1     * return: description of return     */    int kthLargestElement(int k, vector<int> nums) {        // write your code here        int start = 0;        int end = nums.size() - 1;        while (start < end)        {            int p = partition(nums, start, end);            if (p == k - 1)            {                return nums[p];            }            else if (p > k - 1)                end = p - 1;            else                start = p + 1;        }        return nums[start];    }    int partition(vector<int> &nums, int start, int end)    {        int lo = start;        int hi = start;        while (hi < end)        {            if (nums[hi] > nums[end])                swap(nums[hi++], nums[lo++]);            else                hi++;        }        swap(nums[end], nums[lo]);        return lo;    }};

进一步参考

分布式集群中大数据的中位数

0 0
原创粉丝点击