题目
输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。
方法一:利用python的sort函数和切片的性质
class Solution:
def GetLeastNumbers_Solution(self, tinput, k):
# write code here
if tinput==[]:
return []
if k>len(tinput):
return []
tinput.sort()
return tinput[:k]
方法二:利用最大堆和最小堆
class Solution:
def GetLeastNumbers_Solution(self, tinput, k):
# write code herem
#创建最大堆
def createMaxHeap(num):
maxHeap.append(num)
currentIndex=len(maxHeap)-1
while currentIndex!=0:
parentIndex=(currentIndex-1)>>1#相当于parentIndex=(currentIndex-1)//2,目的是为了寻找父结点
if maxHeap[parentIndex]<maxHeap[currentIndex]:#和父结点进行比较
maxHeap[parentIndex],maxHeap[currentIndex]=maxHeap[currentIndex],maxHeap[parentIndex]
else:
break
#当根结点变化时,如何调整最大堆
def adjustMaxHeap(num):
if num<maxHeap[0]:
maxHeap[0]=num
maxHeapLen=len(maxHeap)
index=0
while index<maxHeapLen:
leftIndex=index*2+1
rightIndex=index*2+2
largerIndex=0
if rightIndex<maxHeapLen:
if maxHeap[rightIndex]<maxHeap[leftIndex]:
largerIndex=leftIndex
else:
largerIndex=rightIndex
elif leftIndex<maxHeapLen:
largerIndex=leftIndex
else:
break
if maxHeap[index]<maxHeap[largerIndex]:
maxHeap[index],maxHeap[largerIndex]=maxHeap[largerIndex],maxHeap[index]
index=largerIndex
maxHeap=[]
inputLen=len(tinput)
if inputLen<k or k<=0:
return []
for i in range(inputLen):
if i<k:
createMaxHeap(tinput[i])
else:
adjustMaxHeap(tinput[i])
maxHeap.sort()
return maxHeap