1、从大到小第K个数 

在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。

示例 1:

输入: [3,2,1,5,6,4] 和 k = 2
输出: 5
示例 2:

输入: [3,2,3,1,2,4,5,5,6] 和 k = 4
输出: 4

题目要求是求得从大到小第K个数。首先想到的是对数组排序,直接sort()取k-1个数。复杂度为

O(NlogN).

方法二:根据快排中partition的思想,进行分治,,存在情况1:[left,k,p,right] 情况2:[left,p,k,right]

对于情况1继续遍历[left,p],情况2继续遍历[p,right].

class Solution(object):def findKthLargest(self, nums, k):""":type nums: List[int]:type k: int:rtype: int"""#partitiondef core(left,right,nums,k):r = nums[right]i = leftlittle = right-1while i<=little:if nums[i]>=r:i+=1                    else:#交换i,littleself.swap(i,little,nums)little-=1self.swap(i,right,nums)if i==k-1:return nums[i]elif i<k-1:return core(i+1,right,nums,k)else:return core(left,i-1,nums,k)return core(0,len(nums)-1,nums,k)def swap(self,i,j,nums):tmp = nums[i]nums[i] = nums[j]nums[j] = tmp

2、从大到小第K大的数

3、数据流的中位数

搞成两个堆,大根堆,小根堆。两个堆中元素最多不相差1。大根堆顶、小根堆顶元素求平均数。

对于每个从数据流中新进来数来讲:若是偶数index放进大根堆,反之放进小根堆,这样保证了大小根堆的数量差值不多于1.但同时又需要保证大根堆中所有数字都要小于等于根堆中的数。所以新来的数偶数idx的数,先和小根堆顶比较,若大于小根堆顶,则把小根堆顶数字拿出放进大根堆,并将新数放进小根堆。

【215】第K个大的数,K相关题目-分治、堆应用相关推荐

  1. 利用快排查询无序数组第k位大的数

    由于快速排序的partion函数返回值是基准值最终的位置,由此可以启发得出当这个位置刚好是第k位时,直接输出它下标对应的值,如果这个位置大于第k位时,则向该基准位置的左边递归:如果这个位置小于第k位时 ...

  2. 第k个数, (第k个大的数)

    第k个数 给定一个长度为 n 的整数数列,以及一个整数 k,请用快速选择算法求出数列从小到大排序后的第 k 个数. 输入格式 第一行包含两个整数 n 和 k. 第二行包含 n 个整数(所有整数均在 1 ...

  3. 得到第K个大的数算法研究

    本文为原创,如需转载,请注明作者和出处,谢谢! 第一种算法是最容易想到的,就是利用快速排序的思想,将一个数组分成以某一个数X为轴,左边的所有的数都比X小,而右边的数都比X大.但我快速排序不同的是,在这 ...

  4. 两数、三数、四数之和相关题目(Leetcode题解-Python语言)

    作为 Leetcode 的第一题,两数之和自然是知名度最高的,从两数之和出发也有不少的衍生题目,下面就让我们好好地解决它们. 1. 两数之和 class Solution:def twoSum(sel ...

  5. c语言判断数组里的数据先递增后递减,查找两个有序序数组(一个递增、一个递减)中第K大的数...

    题目不难,关键是边界条件要想清楚.先写一个时间复杂度为O(K) 的解法. #include using namespace std; //a[] increase //b[] decrease //u ...

  6. java寻找数组中第k大的数

    快速排序思想,先找数组第k小的数,当执行一次partition函数找到index下标时,index左边的数比arr[index]小,右边的数比arr[index]大 public class Test ...

  7. [leetcode]堆排序 求前k大的数

    前一篇博客中写到了排序算法,其中包含一个堆排序,因此本篇博客讲解堆这个数据结构及其应用. 关于最大堆最小堆以及初始建堆和整理堆在上篇博客中有提及,此处不再赘述.下面讲解一个堆的重要应用,求n个数中前k ...

  8. 将一个数组中的值按逆序重新排放。_六十五、下一个更大的数系列,单调栈解决方法...

    「@Author:Runsen」 ❝ 编程的本质来源于算法,而算法的本质来源于数学,编程只不过将数学题进行代码化. 「---- Runsen」 ❞ 据说,放张小姐姐觉得照片可以提高阅读量,图是来源学校 ...

  9. java实现小顶堆 在指定数据中找出前n大的数

    小顶堆: 我们利用的特性:每个节点都比左右孩子小 图示: 取数组前n个数,构成小顶堆 然后从数组里面获取数据,如果比堆顶小,直接抛弃,如果比堆顶大,就替换堆顶,并调整堆,使堆始终满足小顶堆的特性 93 ...

最新文章

  1. 安装64位Oracle 10g超详细教程
  2. 基于大数据审计的信息安全日志分析法
  3. 【错误记录】Visual Studio 编译 C++ 代码报错 ( To disable deprecation, use _CRT_SECURE_NO_WARNINGS. )
  4. idea启动多个tomcat失败
  5. 数据库编程——intro to JDBC
  6. Diango博客--22.Django Haystack 全文检索与关键词高亮
  7. H3C的DHCP中继配置命令
  8. C语言程序设计double,C语言中double类型数据占字节数为
  9. Java中的非对称加密算法RSA实现
  10. 源码解析——消息机制
  11. [LeetCode]Balanced Binary Tree
  12. ImageJ-计算创面面积 此博文包含图片 (2014-01-28 15:59:14)
  13. 自定义条件查询_跟我学shardingjdbc之自定义分库分表策略-复合分片算法自定义实现...
  14. 爬虫项目#4567电影网scrapy数据爬取moviePro/持久化储存handReqPro
  15. Stanford nlp 初步之词性标注
  16. 计算机毕业设计——基于Spring Boot框架的在线导游预约系统
  17. 研究生毕业后工资高多少?
  18. 【Java基础快速入门】概述及开发环境搭建
  19. 硬件产品经理的学习之路(一)
  20. winmail 数据库设置_Windows - 2003下搭建邮件服务器教程和使用 - Winmail - Server - 轻松架设邮件服务器 - 图文...

热门文章

  1. 动网论坛缓存技术研究
  2. 架构设计面试题 (史上最全、持续更新、吐血推荐)
  3. API网关-Gateway
  4. python量化:如何利用时间序列索引找到股票日线行情中的每个月的第一个交易日?每年的最后一个交易日?
  5. [转]Windows Mobile 常用键值(VK)对应表及系统文件夹简单介绍
  6. 计算机网络(考研复试)
  7. Intent Service 和Service的区别
  8. B - Carries SCU - 4437
  9. NSSCTF刷题wp——单表替换密码
  10. 解决 unity 按住鼠标右键 WS不能前进后退(我被自己蠢哭了)