基于快速排序:

  1. class Solution {
  2. public:
  3. /*
  4. * param k : description of k
  5. * param nums : description of array and index 0 ~ n-1
  6. * return: description of return
  7. */
  8. int kthLargestElement(int k, vector<int> nums) {
  9. // write your code here
  10. int left = , right = nums.size() - ;
  11. while (true) {
  12. int pos = partition(nums, left, right);
  13. if (pos == k - ) return nums[pos];
  14. if (pos < k - ) left = pos + ;
  15. if (pos > k - ) right = pos - ;
  16. }
  17. }
  18. private:
  19. int partition(vector<int>& nums, int left, int right) {
  20. int pivot = nums[left];
  21. int l = left + , r = right;
  22. while (l <= r) {
  23. if (nums[l] < pivot && nums[r] > pivot)
  24. swap(nums[l++], nums[r--]);
  25. if (nums[l] >= pivot) l++;
  26. if (nums[r] <= pivot) r--;
  27. }
  28. swap(nums[left], nums[r]);
  29. return r;
  30. }
  31. };

基于最大堆:

  1. class Solution {
  2. public:
  3. /*
  4. * param k : description of k
  5. * param nums : description of array and index 0 ~ n-1
  6. * return: description of return
  7. */
  8. inline int left(int idx) {
  9. return (idx << ) + ;
  10. }
  11. inline int right(int idx) {
  12. return (idx << ) + ;
  13. }
  14. void max_heapify(vector<int>& nums, int idx) {
  15. int largest = idx;
  16. int l = left(idx), r = right(idx);
  17. if (l < heap_size && nums[l] > nums[largest])
  18. largest = l;
  19. if (r < heap_size && nums[r] > nums[largest])
  20. largest = r;
  21. if (largest != idx) {
  22. swap(nums[idx], nums[largest]);
  23. max_heapify(nums, largest);
  24. }
  25. }
  26. void build_max_heap(vector<int>& nums) {
  27. heap_size = nums.size();
  28. for (int i = (heap_size >> ) - ; i >= ; i--)
  29. max_heapify(nums, i);
  30. }
  31. int kthLargestElement(int k, vector<int> nums) {
  32. // write your code here
  33. build_max_heap(nums);
  34. for (int i = ; i < k; i++) {
  35. swap(nums[], nums[heap_size - ]);
  36. heap_size--;
  37. max_heapify(nums, );
  38. }
  39. return nums[heap_size];
  40. }
  41. private:
  42. int heap_size;
  43. };

[LintCode] 第k大元素的更多相关文章

  1. LintCode——第K大元素

    第K大元素:在数组num中找到第k大的元素(可以交换数组中的元素的位置) 样例: 数组 [9,3,2,4,8],第三大的元素是 4 数组 [1,2,3,4,5],第一大的元素是 5,第二大的元素是 4 ...

  2. lintcode 中等题:kth-largest-element 第k大元素

    题目 第k大元素 在数组中找到第k大的元素 样例 给出数组[9,3,2,4,8],第三大的元素是4 给出数组 [1,2,3,4,5],第一大的元素是5,第二大的元素是4,第三大的元素是3,以此类推 注 ...

  3. 【转载】两个排序数组的中位数 / 第K大元素(Median of Two Sorted Arrays)

    转自 http://blog.csdn.net/zxzxy1988/article/details/8587244 给定两个已经排序好的数组(可能为空),找到两者所有元素中第k大的元素.另外一种更加具 ...

  4. 寻找两个已序数组中的第k大元素

    寻找两个已序数组中的第k大元素 1.问题描述 给定两个数组与,其大小分别为.,假定它们都是已按照增序排序的数组,我们用尽可能快的方法去求两个数组合并后第大的元素,其中,.例如,对于数组,.我们记第大的 ...

  5. 面试题:求第K大元素(topK)?

    一.引言二.普通算法算法A:算法B:三.较好算法算法C:算法D:四.总结 一.引言 ​ 这就是类似求Top(K)问题,什么意思呢?怎么在无序数组中找到第几(K)大元素?我们这里不考虑海量数据,能装入内 ...

  6. java优先级队列的使用 leecode.703.数据流中的第K大元素

    //设计一个找到数据流中第K大元素的类(class). //注意是排序后的第K大元素,不是第K个不同的元素. class KthLargest { private PriorityQueue<I ...

  7. [Swift]LeetCode703. 数据流中的第K大元素 | Kth Largest Element in a Stream

    Design a class to find the kth largest element in a stream. Note that it is the kth largest element ...

  8. 数据流中的第k大元素的golang实现

    设计一个找到数据流中第K大元素的类(class).注意是排序后的第K大元素,不是第K个不同的元素. 你的 KthLargest 类需要一个同时接收整数 k 和整数数组nums 的构造器,它包含数据流中 ...

  9. 第k大元素

    在数组中找到第k大的元素 样例 给出数组[9,3,2,4,8],第三大的元素是4 给出数组 [1,2,3,4,5],第一大的元素是5,第二大的元素是4,第三大的元素是3,以此类推 注意 你可以交换数组 ...

随机推荐

  1. 使用Openssl创建证书

    概述 SSL证书通过在客户端浏览器和Web服务器之间建立一条SSL安全通道(Secure socketlayer(SSL),SSL安全协议主要用来提供对用户和服务器的认证:对传送的数据进行加密和隐藏: ...

  2. Android面试常问到的知识点

    一.算法,数据结构 1.排序算法 2.查找算法 3.二叉树 4.广度,深度算法: 二.java基础 1.集合Collection,List,Map等常用方法,特点,关系: 2.线程的同步,中断方式有几 ...

  3. EF 表联合查询 join

    有两张表m_Dept.m_User,联合查询 linq方式.EF方式 private void Add() { List<m_Dept> lst = new List<m_Dept& ...

  4. Android开发笔记之:Handler Runnable与Thread的区别详解

    在java中可有两种方式实现多线程,一种是继承Thread类,一种是实现Runnable接口:Thread类是在java.lang包中定义的.一 个类只要继承了Thread类同时覆写了本类中的run( ...

  5. MySQL监控脚本

    zabbix监控mysql时自定key用到的脚本 #!/usr/bin/env python #-*- coding: UTF-8 -*- from __future__ import print_f ...

  6. maven学习资料

    maven学习资料 maven学习教程:What.How.Whyhttp://www.flyne.org/article/167 Maven 那点事儿 https://my.oschina.net/h ...

  7. Hbase系列-Hbase简介

    自1970年以来,关系数据库用于数据存储和维护有关问题的解决方案.大数据的出现后,好多公司实现处理大数据并从中受益,并开始选择像 Hadoop 的解决方案.Hadoop使用分布式文件系统,用于存储大数 ...

  8. 如何使用NFS

    这两个网卡之间可以通信的,如图所示 也可以写成具体的ip地址,或者ip地址段例如192.168.1.2-200 注意看下面这幅图,路径一定要写完整 下面开始挂载共享的目录 挂载之后什么都没有出现说明挂 ...

  9. PHP——文本编辑器

    简单的代码演示 详细文件在文件目录里 <!doctype html> <html> <head> <meta charset="utf-8" ...

  10. MFC编程之创建Ribbon样式的应用程序框架

    Ribbon界面就是微软从Office2007開始引入的一种为了使应用程序的功能更加易于发现和使用.降低了点击鼠标的次数的新型界面.从实际效果来看,不仅外观美丽,并且功能直观,用户操作简洁方便. 利用 ...