剑指offer 面试40题

面试40题:

题目:最小的k个数

题:输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。

解题代码一:

# -*- coding:utf-8 -*-
class Solution:
    def GetLeastNumbers_Solution(self, tinput, k):
        # write code here
        #此方法时间复杂度为O(nlogn)
        if k >len(tinput):
            return []
        tinput.sort()
        return tinput[:k]

解题代码二:

# -*- coding:utf-8 -*-
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)

解题代码三:另:自己实现快速排序

# -*- coding:utf-8 -*-
class Solution:
    def GetLeastNumbers_Solution(self, tinput, k):
        # write code here
        #此方法时间复杂度为O(nlogn)
        if k >len(tinput) or not tinput:
            return []
        #tinput.sort()
        #实现一个快速排序
        def quick_sort(array):
            if not array:
                return []
            pivot=array[0]
            left=quick_sort([x for x in array[1:] if x<pivot])
            right=quick_sort([x for x in array[1:] if x>=pivot])
            return left+[pivot]+right
        
        return quick_sort(tinput)[:k]

 

posted @ 2018-06-25 09:59  Fintech带你飞  阅读(1172)  评论(0编辑  收藏  举报