zoukankan      html  css  js  c++  java
  • Kth Largest Element in an Array

    Find the kth largest element in an unsorted array. Note that it is the kth largest element in the sorted order, not the kth distinct element.

    For example,
    Given [3,2,1,5,6,4] and k = 2, return 5.

    Note: 
    You may assume k is always valid, 1 ≤ k ≤ array's length.

    思路:方法一:排序,然后输出第k个数。O(nlogn)。

    方法二:进行k次冒泡排序,然后输出倒数第k个数。O(nk)。

    方法三:构建一个大小为n的大顶堆,然后从中抽取k-1次最大值,之后堆顶的值就是第k大的数。复杂度为O(n + klogn)。

    下面附上方法三的代码。

     1 class Solution {
     2 public:
     3     int heap_size;
     4     void Max_Heapify(vector<int>& nums, int i)
     5     {
     6         int l = i * 2 + 1;
     7         int r = i * 2 + 2;
     8         int largest = i;
     9         if (l < heap_size && nums[l] > nums[i])
    10             largest = l;
    11         if (r < heap_size && nums[r] > nums[largest])
    12             largest = r;
    13         if (largest != i)
    14         {
    15             swap(nums[i], nums[largest]);
    16             Max_Heapify(nums, largest);
    17         }
    18     }
    19     void Build_MaxHeap(vector<int>& nums, int length)
    20     {
    21         heap_size = length;
    22         for (int i = heap_size / 2 - 1; i >= 0; i--)
    23             Max_Heapify(nums, i);
    24     }
    25     void Extract(vector<int>& nums)
    26     {
    27         if (heap_size == 0) return;
    28         swap(nums[0], nums[heap_size - 1]);
    29         heap_size--;
    30         Max_Heapify(nums, 0);
    31     }
    32     int findKthLargest(vector<int>& nums, int k) {
    33         Build_MaxHeap(nums, nums.size());
    34         for (int i = 1; i < k; i++)
    35             Extract(nums);
    36         return nums[0];
    37     }
    38 };
  • 相关阅读:
    [转]CentOS 修改yum源为国内源
    著名的镜像网站
    [译]LRTHW练习五——更多的变量及输出打印
    CentOS足迹一
    LRTHW笔记二
    线程的创建和运行(未完待续)
    比较当前时间和给定时间大小
    单独管理image
    Java 修改页面排序条件
    Java 如何使用radio button保存值
  • 原文地址:https://www.cnblogs.com/fenshen371/p/4949281.html
Copyright © 2011-2022 走看看