最近遇到的几个小问题,记录一下~~~
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], nums

博客介绍了如何利用快速排序和堆排序算法寻找无序数组中的第K大数,详细阐述了解法一的快排分治策略,包括两种Partition函数的实现,并对比了快排与堆排序在寻找第K大数时的时间复杂度。还提及了堆排序在不同场景下的效率分析,以及如何构建最大堆和最小堆来解决问题。

283

被折叠的 条评论
为什么被折叠?



