当前位置: 首页 > news >正文

LeetCode -- 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.




在一个数组中找到第k大的数字。


首先要确定的是,本题可以通过某种排序来完成。由于要找到第k个数字,那么可以通过选择排序或堆排序;
显然,堆排序效率更好一些。可以大根堆或小根堆来完成,第k大的数,显然使用大根堆。


1.建立堆。
2.找出前k大的数字,存入集合List。
3.返回List中的最后一个即可。




实现代码:


public class Solution {
    public int FindKthLargest(int[] nums, int k) 
    {
       	var index = k - 1;
    	if(index >= nums.Length){
    		index = nums.Length - 1;
    	}
    	
    	var r = TopK(nums.ToList(), index);
    	return r.Last();
    }
	
private List<int> TopK(List<int> arr, int k)
{
	var ret = new List<int>();
	var c = 0;
	while (c <= k)
	{
		for (int i = arr.Count / 2 - 1;i >= 0; i--)
		{
			if (i > 0){
				HeapMerge(arr, i);
			}
			
			HeapMerge(arr, i * 2 + 1);
			
			if (i * 2 + 2 <= arr.Count - 1){
				HeapMerge(arr, i * 2 +2);
			}
		}
		
		ret.Add(arr[0]);
		arr.RemoveAt(0);
		c++;
	}


	return ret;
}


//construct maximum heap
private void HeapMerge(List<int>arr , int index)
{
	if (index > 0 && arr[index] > arr[(index-1)/2])
	{
		var tmp = arr[index];
		arr[index] = arr[(index-1)/2];
		arr[(index-1)/2] = tmp;
		HeapMerge(arr,(index-1)/2);
	}
}
}


相关文章:

  • 最近评论回复汇总
  • LeetCode -- Maximum Gap
  • OO系统分析员之路--用例分析系列(8)--如何编写一份完整的UML需求规格说明书[整理重发]...
  • LeetCode -- Maximum Subarray
  • ArcGIS Server Java ADF 案例教程 25
  • LeetCode -- Minimum Depth of Binary Tree
  • ArcGIS Server Java ADF 案例教程 26
  • LeetCode -- Minimum Path Sum
  • LeetCode -- Multiply Strings
  • ArcGIS Server Java ADF 案例教程 27
  • LeetCode -- Permutations II
  • SQL语句性能调整之ORACLE的执行计划
  • LeetCode -- Product of Array Except Self
  • 不知道为什么我的一oracle的sql调优文章笔记无法发表,提示“文章中出现禁止的词语,系统不予接受。”...
  • LeetCode -- Remove Duplicates From Sorted Array 2
  • C++类中的特殊成员函数
  • JAVA SE 6 GC调优笔记
  • Java超时控制的实现
  • React-Native - 收藏集 - 掘金
  • vue 个人积累(使用工具,组件)
  • vuex 学习笔记 01
  • Wamp集成环境 添加PHP的新版本
  • 两列自适应布局方案整理
  • 项目管理碎碎念系列之一:干系人管理
  • 小程序button引导用户授权
  •  一套莫尔斯电报听写、翻译系统
  • gunicorn工作原理
  • 移动端高清、多屏适配方案
  • ​Java并发新构件之Exchanger
  • ​Kaggle X光肺炎检测比赛第二名方案解析 | CVPR 2020 Workshop
  • #!/usr/bin/python与#!/usr/bin/env python的区别
  • #[Composer学习笔记]Part1:安装composer并通过composer创建一个项目
  • #WEB前端(HTML属性)
  • $refs 、$nextTic、动态组件、name的使用
  • (C++)八皇后问题
  • (C语言)求出1,2,5三个数不同个数组合为100的组合个数
  • (day 12)JavaScript学习笔记(数组3)
  • (NSDate) 时间 (time )比较
  • (ZT) 理解系统底层的概念是多么重要(by趋势科技邹飞)
  • (定时器/计数器)中断系统(详解与使用)
  • (分享)自己整理的一些简单awk实用语句
  • (附源码)ssm经济信息门户网站 毕业设计 141634
  • (力扣记录)235. 二叉搜索树的最近公共祖先
  • (转)winform之ListView
  • .NET 4.0网络开发入门之旅-- 我在“网” 中央(下)
  • .net core webapi 部署iis_一键部署VS插件:让.NET开发者更幸福
  • .NET I/O 学习笔记:对文件和目录进行解压缩操作
  • .Net Web窗口页属性
  • .NET企业级应用架构设计系列之应用服务器
  • @Bean, @Component, @Configuration简析
  • @JoinTable会自动删除关联表的数据
  • [ 隧道技术 ] cpolar 工具详解之将内网端口映射到公网
  • [BZOJ 1032][JSOI2007]祖码Zuma(区间Dp)
  • [CSS]CSS 的背景
  • [CSS]文字旁边的竖线以及布局知识