剑指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]

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM