• 今日头条实习生面试常见题目 堆排序topk, 反转链表


    用堆排序找出list中第K小的数字, 用小顶堆

    def min_heap_k(nums, topk):
        def siftdown(nums, e, begin, end):
            i = begin
            j = 2*i + 1
            while j < end:
                if j+1 < end and num[j+1] < nums[j]:
                    j += 1
                if e < nums[j]:
                    break
                nums[i] = nums[j]
                i = j
                j = 2*i + 1
            nums[i] = e
        
        end = len(nums)
        for k in range(end//2, -1, -1):
            siftdown(nums, e, k, end)
        for k in range(end-1, 0, -1):
            e = nums[k]
            topk -= 1
            if topk == 0:
                return nums[0]
            siftdown(nums, e, 0, k)
    
    
    if __name__ == "__main__":
        print(min_heap_k([2, 3, 1, 5, -1, 0, -10, -9, -6], topk=4))
    

    链表反转

    手写快速排序

    def quicksort(nums):
        quicksort_rec(nums, 0, len(nums)-1)
    def quicksort_rec(nums, left, right):
        if left >= right:
            return None
        i = left
        j = right 
        k = nums[i]
        while i<j:
            while i<j and nums[j] > k:
                j -= 1
            if i < j :
                nums[i] = nums[j]
                i += 1
            while i < j and nums[i] <k:
                i += 1
            if i < j :
                nums[j] = nums[i]
                j -= 1
        nums[i] = k
        quicksort_rec(nums, left, i-1)
        quicksort_rec(nums, i+1, right)
    
  • 相关阅读:
    C# 6.0
    C# 4.0
    C# 5.0
    C# 3.0
    C# 2.0
    C# 1.0(2002)
    字典树Trie
    Hadoop——生态体系
    程序是怎样跑起来的
    Redis实战(十七)Redis各个版本新特性
  • 原文地址:https://www.cnblogs.com/theodoric008/p/8981846.html
Copyright © 2020-2023  润新知