博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
求数组中第K大的数
阅读量:7025 次
发布时间:2019-06-28

本文共 979 字,大约阅读时间需要 3 分钟。

题目内容

  有N个整数,请找到其中最大的第K个数。

求解方法

  注意,这里题目不是topK问题,但是完全可以利用topK问题来解决。但是从算法上来说,求的是第K大的数,而计算的是前K大的数,必然是进行了额外的计算。这里给出一种基于快速排序的求解第K大数的算法。

public int findKthNum(int[] array, int left, int right, int k) {		int j = partition(array, left, right);		int target = left + k - 1;		if (j == target)			return array[j];		else if (j > target)			return findKthNum(array, left, j - 1, k);		else			return findKthNum(array, j + 1, right, k - (j - left + 1));	}	public int partition(int[] array, int left, int right) {		int j = left;		int index = getRandom(left, right);		for (int i = left; i <= right; i++) {			if (i != index && array[i] < array[index]) {				int temp = array[j];				array[j] = array[i];				array[i] = temp;				j++;			}		}		int temp = array[j];		array[j] = array[index];		array[index] = temp;		return j;	}	public int getRandom(int left, int right) {		double index = Math.random();		return (int) (index * (right - left) + left);	}复制代码

转载于:https://juejin.im/post/5c25983d6fb9a049dd805ab1

你可能感兴趣的文章
利用scrapy 爬取OSChina全站URL
查看>>
CISCO 6509 日志分析
查看>>
AutoOps 1.8 版本
查看>>
烂泥:centos安装LVM方式
查看>>
写时拷贝(方案一)
查看>>
教程Micropython自制小型家庭气象站(萝卜教育)
查看>>
Redis源码分析系列26:对redis的一点小感触
查看>>
phpstudy 性能调优
查看>>
JDK源码解读(1)ArrayList和LinkedList
查看>>
第22讲: Scala中的闭包实战详解
查看>>
linux信号解释(1)
查看>>
串口DTU设备常见问题处理
查看>>
28.umask值
查看>>
制作Sysprep 静默安装脚本指南
查看>>
pandas
查看>>
文件操作工具类
查看>>
03,什么是shell,一些最基本的命令和小技巧。
查看>>
nginx教程从入门到精通(ttlsa出品)
查看>>
squid日志之access.log格式+内容
查看>>
mac 下常见问题处理
查看>>