[LintCode] 第k大元素
基于快速排序:
- 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 left = , right = nums.size() - ;
- while (true) {
- int pos = partition(nums, left, right);
- if (pos == k - ) return nums[pos];
- if (pos < k - ) left = pos + ;
- if (pos > k - ) right = pos - ;
- }
- }
- private:
- int partition(vector<int>& nums, int left, int right) {
- int pivot = nums[left];
- int l = left + , r = right;
- while (l <= r) {
- if (nums[l] < pivot && nums[r] > pivot)
- swap(nums[l++], nums[r--]);
- if (nums[l] >= pivot) l++;
- if (nums[r] <= pivot) r--;
- }
- swap(nums[left], nums[r]);
- return r;
- }
- };
基于最大堆:
- class Solution {
- public:
- /*
- * param k : description of k
- * param nums : description of array and index 0 ~ n-1
- * return: description of return
- */
- inline int left(int idx) {
- return (idx << ) + ;
- }
- inline int right(int idx) {
- return (idx << ) + ;
- }
- void max_heapify(vector<int>& nums, int idx) {
- int largest = idx;
- int l = left(idx), r = right(idx);
- if (l < heap_size && nums[l] > nums[largest])
- largest = l;
- if (r < heap_size && nums[r] > nums[largest])
- largest = r;
- if (largest != idx) {
- swap(nums[idx], nums[largest]);
- max_heapify(nums, largest);
- }
- }
- void build_max_heap(vector<int>& nums) {
- heap_size = nums.size();
- for (int i = (heap_size >> ) - ; i >= ; i--)
- max_heapify(nums, i);
- }
- int kthLargestElement(int k, vector<int> nums) {
- // write your code here
- build_max_heap(nums);
- for (int i = ; i < k; i++) {
- swap(nums[], nums[heap_size - ]);
- heap_size--;
- max_heapify(nums, );
- }
- return nums[heap_size];
- }
- private:
- int heap_size;
- };
[LintCode] 第k大元素的更多相关文章
- LintCode——第K大元素
第K大元素:在数组num中找到第k大的元素(可以交换数组中的元素的位置) 样例: 数组 [9,3,2,4,8],第三大的元素是 4 数组 [1,2,3,4,5],第一大的元素是 5,第二大的元素是 4 ...
- lintcode 中等题:kth-largest-element 第k大元素
题目 第k大元素 在数组中找到第k大的元素 样例 给出数组[9,3,2,4,8],第三大的元素是4 给出数组 [1,2,3,4,5],第一大的元素是5,第二大的元素是4,第三大的元素是3,以此类推 注 ...
- 【转载】两个排序数组的中位数 / 第K大元素(Median of Two Sorted Arrays)
转自 http://blog.csdn.net/zxzxy1988/article/details/8587244 给定两个已经排序好的数组(可能为空),找到两者所有元素中第k大的元素.另外一种更加具 ...
- 寻找两个已序数组中的第k大元素
寻找两个已序数组中的第k大元素 1.问题描述 给定两个数组与,其大小分别为.,假定它们都是已按照增序排序的数组,我们用尽可能快的方法去求两个数组合并后第大的元素,其中,.例如,对于数组,.我们记第大的 ...
- 面试题:求第K大元素(topK)?
一.引言二.普通算法算法A:算法B:三.较好算法算法C:算法D:四.总结 一.引言 这就是类似求Top(K)问题,什么意思呢?怎么在无序数组中找到第几(K)大元素?我们这里不考虑海量数据,能装入内 ...
- java优先级队列的使用 leecode.703.数据流中的第K大元素
//设计一个找到数据流中第K大元素的类(class). //注意是排序后的第K大元素,不是第K个不同的元素. class KthLargest { private PriorityQueue<I ...
- [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 ...
- 数据流中的第k大元素的golang实现
设计一个找到数据流中第K大元素的类(class).注意是排序后的第K大元素,不是第K个不同的元素. 你的 KthLargest 类需要一个同时接收整数 k 和整数数组nums 的构造器,它包含数据流中 ...
- 第k大元素
在数组中找到第k大的元素 样例 给出数组[9,3,2,4,8],第三大的元素是4 给出数组 [1,2,3,4,5],第一大的元素是5,第二大的元素是4,第三大的元素是3,以此类推 注意 你可以交换数组 ...
随机推荐
- 使用Openssl创建证书
概述 SSL证书通过在客户端浏览器和Web服务器之间建立一条SSL安全通道(Secure socketlayer(SSL),SSL安全协议主要用来提供对用户和服务器的认证:对传送的数据进行加密和隐藏: ...
- Android面试常问到的知识点
一.算法,数据结构 1.排序算法 2.查找算法 3.二叉树 4.广度,深度算法: 二.java基础 1.集合Collection,List,Map等常用方法,特点,关系: 2.线程的同步,中断方式有几 ...
- EF 表联合查询 join
有两张表m_Dept.m_User,联合查询 linq方式.EF方式 private void Add() { List<m_Dept> lst = new List<m_Dept& ...
- Android开发笔记之:Handler Runnable与Thread的区别详解
在java中可有两种方式实现多线程,一种是继承Thread类,一种是实现Runnable接口:Thread类是在java.lang包中定义的.一 个类只要继承了Thread类同时覆写了本类中的run( ...
- MySQL监控脚本
zabbix监控mysql时自定key用到的脚本 #!/usr/bin/env python #-*- coding: UTF-8 -*- from __future__ import print_f ...
- maven学习资料
maven学习资料 maven学习教程:What.How.Whyhttp://www.flyne.org/article/167 Maven 那点事儿 https://my.oschina.net/h ...
- Hbase系列-Hbase简介
自1970年以来,关系数据库用于数据存储和维护有关问题的解决方案.大数据的出现后,好多公司实现处理大数据并从中受益,并开始选择像 Hadoop 的解决方案.Hadoop使用分布式文件系统,用于存储大数 ...
- 如何使用NFS
这两个网卡之间可以通信的,如图所示 也可以写成具体的ip地址,或者ip地址段例如192.168.1.2-200 注意看下面这幅图,路径一定要写完整 下面开始挂载共享的目录 挂载之后什么都没有出现说明挂 ...
- PHP——文本编辑器
简单的代码演示 详细文件在文件目录里 <!doctype html> <html> <head> <meta charset="utf-8" ...
- MFC编程之创建Ribbon样式的应用程序框架
Ribbon界面就是微软从Office2007開始引入的一种为了使应用程序的功能更加易于发现和使用.降低了点击鼠标的次数的新型界面.从实际效果来看,不仅外观美丽,并且功能直观,用户操作简洁方便. 利用 ...