215.数组中第的K个最大元素(力扣leetcode) 博主可答疑该问题

一、笔记部分:

方法:

排序取下标

快排要点:

1.i,j,指左,指右,一起往中间走,直到相等,其中可能会交换几次,碰见就要与key交换,所以移动的时候也要加i<j,走不动一次就要交换一次,所以后面有一个if(i<j),因为i==j后就跳出循环与左值交换

2.j一定要先走,因为这样采用先指向小于Key的值,如果i先走先指向大于Key的值,然后j走过来后相等,交换,结果把大值交换到最左边了。

 

寻找第k个一般只用提取一半,看这个值与i,j重合哪个值哪个大哪个小。

 

必须要加return 否则进入else if后无法有返回值,会报错

 

方法2优先队列方法(包含堆排序方法):是利用堆实现的,插入和删除都是堆实现(logN)。

push方法是O(N):选前几就开多少长度的数组,数组比较非常常用,但是用堆排序(一个节点的)就是更小的时间复杂度(logN),重建最大堆是(N*logN)

K是2,开一个k=2的数组,遍历数组与新开数组的最小值进行比较比较,如果大于,次数与最小值交换,直到数组遍历完,再将新建数组的最小值提取出来。就是第k大的数

 

方法三最大堆(平衡二叉树):3ms比选择派少了9ms。

O(NlogN)空间复杂度O(K)

队列实现二叉树。

 

注意点:

1.最大堆的实现,从有子树的节点开始(size/2)开始与子树比较,将最大值放到父节点,然后依  次往上遍历,直到堆顶,堆顶就是最大值。

2.实现数组的交换,一定要传入数组进去,这样才是地址交换,才有质的变换,所以数组元素的交换肯定会有三个数。

3.调换了顶部的元素,最大值只能从其子树选,所以直接用maxHeap,不需要重新建树。

 

二、排序类型的高频面试题汇总:

https://blog.csdn.net/qq_40262372/article/details/112643107

 

三、各种类型的高频面试题汇总:

https://blog.csdn.net/qq_40262372/article/details/112556249

 

四、如有疑问可加QQ群讨论:725936761 博主免费答疑

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

万小猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值