利用快排和堆排序寻找无序数组中的第K大数

最近遇到的几个小问题,记录一下~~~
1、【快排和堆排序实现寻找第K大数】
快排和堆排序实现寻找第K大数github地址
2、【两个二维数组相乘】

3、【wmd讲解】

4、【三个激活函数的优缺点】

5、【LSTM解决的问题以及解决方法】

6、【fasttext原理】

7、【字典树的原理】

8、【过拟合 欠拟合了怎么办】

9、【正则项的作用】

1、求第K大数

leetcode # 215

【解法1 快排+分治算法】

利用快速排序算法找到pivotIndex(前后的分界点,左边的全都大于pivotIndex,右边的全都小于pivotIndex),判断当前pivot与K的大小关系

if pivotIndex == k: return nums[pivotIndex]

if pivotIndex > K : 只需要对数组前pivotIndex-1个进行递归找第K大数

if pivotIndex < K: 只需要对数组中pivotIndex+1后的进行递归

主要是利用一个Partition函数,得到分界点。这里提供两种写法的Partition函数。我觉得第一种比较好理解啦~~~

这里是从大到小进行排序,左边的全部大于pivotINDEX,右边的全部小于。

【Partition函数 第一种写法】

 def partition(self, nums, begin, end):
        left = begin +1
        right = end
        while left <= right:
            if nums[left] < nums[begin] and nums[right] > nums[begin]:
                nums[left],nums[right] = nums[right],nums[left]
            if nums[left] >= nums[begin]: left += 1
            if nums[right] <= nums[begin]: right -= 1
        nums[begin], nums[right] = nums[right],nums[begin]
        return right

【Partition函数 第二种写法】

 def Partition(self, nums, left, right):
        pivot = left
        index = pivot+1
        i = index
        while i <= right:
            if nums[i] > nums[pivot]:
                nums[i], nums[index] = nums[index], nums[i]
                index += 1
            i += 1
        nums[pivot]
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值