0
点赞
收藏
分享

微信扫一扫

【剑指 Offer】剑指 Offer 40. 最小的k个数

you的日常 2022-03-13 阅读 59

题目
代码
执行用时:
56 ms, 在所有 Python3 提交中击败了73.20%的用户
内存消耗:
15.8 MB, 在所有 Python3 提交中击败了95.39%的用户
通过测试用例:
38 / 38

class Solution:
    def getLeastNumbers(self, arr: List[int], k: int) -> List[int]:
        arr.sort()
        return arr[:k]

【方法2】
执行用时:
64 ms, 在所有 Python3 提交中击败了61.82%的用户
内存消耗:
内存消耗:
15.9 MB, 在所有 Python3 提交中击败了85.22%的用户
通过测试用例:
38 / 38

class Solution:
    def getLeastNumbers(self, arr: List[int], k: int) -> List[int]:
        heapify(arr)        
        ans=[]
        while k:
            k-=1
            ans.append(heappop(arr))
        return ans

【方法3】快速排序原始版本
执行用时:
272 ms, 在所有 Python3 提交中击败了12.45%的用户
内存消耗:
19.1 MB, 在所有 Python3 提交中击败了8.83%的用户
通过测试用例:
38 / 38

class Solution:
    def getLeastNumbers(self, arr: List[int], k: int) -> List[int]:
        def quick_sort(l,r):
            if l>r:return
            i,j=l,r
            while i<j:
                while i<j and arr[j]>arr[l]:j-=1
                while i<j and arr[i]<=arr[l]:i+=1
                arr[i],arr[j]=arr[j],arr[i]
            arr[i],arr[l]=arr[l],arr[i]
            quick_sort(l,i-1)
            quick_sort(i+1,r)
        quick_sort(0,len(arr)-1)
        return arr[:k]

【方法4】
执行用时:
112 ms, 在所有 Python3 提交中击败了37.88%的用户
内存消耗:
19 MB, 在所有 Python3 提交中击败了10.88%的用户
通过测试用例:
38 / 38

class Solution:
    def getLeastNumbers(self, arr: List[int], k: int) -> List[int]:
        def quick_sort(l,r):
            if l>=r:return
            i,j=l,r
            while i<j:
                while i<j and arr[j]>=arr[l]:j-=1
                while i<j and arr[i]<=arr[l]:i+=1
                arr[i],arr[j]=arr[j],arr[i]
            arr[i],arr[l]=arr[l],arr[i]
            if i>k:quick_sort(l,i-1)
            if i<k:quick_sort(i+1,r)
        quick_sort(0,len(arr)-1)
        return arr[:k]
举报

相关推荐

0 条评论