第K大元素

题目描述在数组中找到第k大的元素。给出数组 [9,3,2,4,8],第三大的元素是 4给出数组 [1,2,3,4,5],第一大的元素是 5,第二大的元素是 4,第三大的元素是 3,以此类推要求时间复杂度为O(n),空间复杂度为O(1)问题分析如果不考虑时间复杂度和空间复杂度,这道题目有很多种方法,利用一种排序算法将数组倒叙排序,第k个数就是第k大元素。题目的重点在于返回第K大元素,...
摘要由CSDN通过智能技术生成

题目描述

在数组中找到第k大的元素。

给出数组 [9,3,2,4,8],第三大的元素是 4

给出数组 [1,2,3,4,5],第一大的元素是 5,第二大的元素是 4,第三大的元素是 3,以此类推

要求时间复杂度为O(n),空间复杂度为O(1)

问题分析

如果不考虑时间复杂度和空间复杂度,这道题目有很多种方法,利用一种排序算法将数组倒叙排序,第k个数就是第k大元素。

题目的重点在于返回第K大元素,而其他元素并不关心。如果要返回第K大元素,必然要先找到比K大的k-1个数,这k-1个数的顺序也并不用关心。如果我们使用冒泡、选择等常规排序,需要从最大的开始找起,那么时间复杂度就是O(n * k),当k较大时,时间复杂度太高。

快速排序算法的特点就在于经过一次遍历,可以分别找到比某个元素小的数和大的数,如果比这个元素大的数的个数恰好是k-1,那么这个数就正是我们要找的数。假如经过一次遍历之后,元素A左边的元素均大于A,右边的元素均小于A,A的数组下标是index,若index+1=k,那么A就是第k大元素;若index+1>k,那么第k大元素就在数组的0~index-1中,此时问题就变为了在数组的0~index-1中寻找第k大元素,继续循环遍历操作直到存在某个index使index+1=k为止;若index+1<k,那么第k大元素就在数组的index+1~length-1中,循环遍历子数组知道找到某个index使index+1=k即可。时间复杂度=O(n + n/2 + n/4 + … + 1)<O(2n)=O(n)。

代码实现

public int kthLargestElement(
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值