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 };
  • 相关阅读:
    使用线程新建WPF窗体(公用进度条窗体)
    WPF--模板选择
    WPF命令(Command)介绍、命令和数据绑定集成应用
    WPF 员工卡条形码
    WPF入门教程系列(二) 深入剖析WPF Binding的使用方法
    R语言——实验5-聚类分析
    R语言——实验5-聚类分析
    Java学习---流与文件
    Java学习---流与文件
    Java学习---异常处理
  • 原文地址:https://www.cnblogs.com/fenshen371/p/4949281.html
Copyright © 2011-2022 走看看