面試40題:
題目:最小的k個數
題:輸入n個整數,找出其中最小的K個數。例如輸入4,5,1,6,2,7,3,8這8個數字,則最小的4個數字是1,2,3,4,。
解題思路一:
class Solution:
def GetLeastNumbers_Solution(self, tinput, k):
if k >len(tinput):
return []
tinput.sort()
return tinput[:k]
解題思路二:
class Solution:
def GetLeastNumbers_Solution(self, tinput, k):
# write code here
import heapq
#此方法時間複雜度爲O(nlogk)
if k >len(tinput):
return []
return heapq.nsmallest(k,tinput)
解題思路三:
def GetLeastNumbers_Solution(self, tinput, k):
import heapq as hq
if k > len(tinput) or k <= 0: return []
heap = [-x for x in tinput[:k]]
hq.heapify(heap)
for num in tinput[k:]:
if -heap[0] > num:
hq.heapreplace(heap, -num)
return sorted(-x for x in heap)