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.

思路:

堆。讲解:二叉堆

  1. class Solution {
  2. public:
  3. //新插入i结点 其父节点为(i - 1) / 2
  4. void MinHeapFixup(int a[], int i)
  5. {
  6. int j = (i - ) / ; //父节点
  7. int temp = a[i];
  8. while(j >= && i != )
  9. {
  10. if(a[j] <= temp) break;
  11. a[i] = a[j];
  12. i = j;
  13. j = (i - ) / ;
  14. }
  15. a[i] = temp;
  16. }
  17.  
  18. //在最小堆中插入新数据nNum
  19. void MinHeapAddNumber(int a[], int n, int nNum)
  20. {
  21. a[n] = nNum;
  22. MinHeapFixup(a, n);
  23. }
  24.  
  25. //堆删除后的调整 从i节点开始调整,n为节点总数 从0开始计算 i节点的子节点为 2*i+1, 2*i+2
  26. void MinHeapFixdown(int a[], int i, int n)
  27. {
  28. int j = * i + ;
  29. int temp = a[i];
  30. while(j < n)
  31. {
  32. if(j + < n && a[j + ] < a[j]) //在左右孩子中找最小的
  33. j++;
  34. if(a[j] >= temp)
  35. break;
  36. a[i] = a[j]; //把较小的子结点往上移动,替换它的父结点
  37. i = j;
  38. j = * i + ;
  39. }
  40. a[i] = temp;
  41. }
  42.  
  43. //在最小堆中删除数
  44. void MinHeapDeleteNumber(int a[], int n)
  45. {
  46. swap(a[], a[n - ]);
  47. MinHeapFixdown(a, , n - );
  48. }
  49.  
  50. int findKthLargest(vector<int>& nums, int k) {
  51. int * a = new int[k]; //大小为k的最小堆
  52. for(int i = ; i < nums.size(); ++i)
  53. {
  54. if(i < k)
  55. {
  56. MinHeapAddNumber(a, i, nums[i]); //插入数据
  57. }
  58. else if(nums[i] > a[]) //比已有的k个最大的数字大
  59. {
  60. MinHeapDeleteNumber(a, k);
  61. MinHeapAddNumber(a, k - , nums[i]);
  62. }
  63. }
  64. return a[];
  65. }
  66. };

用STL的堆:

  1. int findKthLargest(vector<int>& nums, int k) {
  2. priority_queue<int> p;
  3. const int s(nums.size());
  4.  
  5. for (int i = ; i < s; ++i) p.push(nums[i]);
  6. while (--k) p.pop();
  7.  
  8. return p.top();
  9. }

堆的相关讲解:

http://www.cnblogs.com/flyoung2008/articles/2136485.html

【leetcode】Kth Largest Element in an Array (middle)☆的更多相关文章

  1. 【LeetCode】764. Largest Plus Sign 解题报告(Python)

    [LeetCode]764. Largest Plus Sign 解题报告(Python) 作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn ...

  2. 215. Kth Largest Element in an Array(QuickSort)

    Find the kth largest element in an unsorted array. Note that it is the kth largest element in the so ...

  3. 【树】Kth Smallest Element in a BST(递归)

    题目: Given a binary search tree, write a function kthSmallest to find the kth smallest element in it. ...

  4. 【LeetCode】976. Largest Perimeter Triangle 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 排序 日期 题目地址:https://leetcod ...

  5. 【LeetCode】368. Largest Divisible Subset 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 题目地址:https://leetcode.com/problems/largest-d ...

  6. 【LeetCode】812. Largest Triangle Area 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 三重循环 组合函数 日期 题目地址:https:// ...

  7. LeetCode Kth Largest Element in an Array (快速排序)

    题意: 在一个无序的数组中第k大的数是多少? 思路: 按照快排的思路,如果每次分成两段后,设为L和R.如果R>=k ,则答案在右边集合,否则在左边集合. 这里用了3位取中法.注意快排别给写死循环 ...

  8. 【leetcode】Binary Tree Zigzag Level Order Traversal (middle)

    Given a binary tree, return the zigzag level order traversal of its nodes' values. (ie, from left to ...

  9. 【leetcode】Remove Duplicates from Sorted List II (middle)

    Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numb ...

随机推荐

  1. 使用Javascript实现返回顶部功能。

    为了提高网站的浏览体验及友好度,相信大部分网站需要一个返回顶部的按钮,如果使用传统的a标记,再做一个div加上链接的话,非常麻烦,不仅每个页面都需要添加,而且不能实现非常智能的效果及简化维护时间. 下 ...

  2. CATransition-转场动画

    CAAnimation的子类,用于做转场动画,能够为层提供移出屏幕和移入屏幕的动画效果.iOS比Mac OS X的转场动画效果少一点 UINavigationController就是通过CATrans ...

  3. codevs2171 棋盘覆盖

    题目描述 Description 给出一张n*n(n<=100)的国际象棋棋盘,其中被删除了一些点,问可以使用多少1*2的多米诺骨牌进行掩盖. 输入描述 Input Description 第一 ...

  4. maven打包步骤_maven 构建项目

    maven打包 1:先在pom文件中添加下面配置  jar <build>        <plugins>            <!-- compiler插件, 设定 ...

  5. 《深入浅出WPF》笔记一

    1.项目模板 Visual Studio自动配置编译器参数,并准备好一套基本的源代码. 2.App.xaml/App.xaml.cs 声明程序的进程,并指定程序的主窗体. 3.Attribute和Pr ...

  6. Hibernate面试题

    一.谈一谈Hibernate的缓存机制 1.一级缓存: 内部缓存存在于HIbernate中又叫一级缓存,他属于应用事务级缓存. 2.二级缓存: 01.应用级缓存. 02.分布式缓存. 条件:数据不会被 ...

  7. iOS开发——UI进阶篇(八)pickerView简单使用,通过storyboard加载控制器,注册界面,通过xib创建控制器,控制器的view创建,导航控制器的基本使用

    一.pickerView简单使用 1.UIPickerViewDataSource 这两个方法必须实现 // 返回有多少列 - (NSInteger)numberOfComponentsInPicke ...

  8. [HDU2089]不要62

    [HDU2089]不要62 试题描述 杭州人称那些傻乎乎粘嗒嗒的人为62(音:laoer).杭州交通管理局经常会扩充一些的士车牌照,新近出来一个好消息,以后上牌照,不再含有不吉利的数字了,这样一来,就 ...

  9. BZOJ 1419: Red is good

    Sol 期望DP. \(f[i][j]\) 表示剩下 \(i\) 张红牌, \(j\) 张黑牌的期望. 有转移方程. \(f[i][j]=0,i=0\) 没有红色牌了,最优方案就是不再翻了. \(f[ ...

  10. 15 BasicHashTable基本哈希表类(二)——Live555源码阅读(一)基本组件类

    这是Live555源码阅读的第一部分,包括了时间类,延时队列类,处理程序描述类,哈希表类这四个大类. 本文由乌合之众 lym瞎编,欢迎转载 http://www.cnblogs.com/oloroso ...