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