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

Posted 一条图图犬

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了今日头条实习生面试常见题目 堆排序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)

以上是关于今日头条实习生面试常见题目 堆排序topk, 反转链表的主要内容,如果未能解决你的问题,请参考以下文章

今日头条Android开发岗实习生面试

今日头条——面试案例

今日头条实习面试

今日头条机器学习实习生

图文最详细的堆解析:从二叉树到堆到解析大根堆小根堆,分析堆排序,最后实现topK经典面试问题

实习生求职今日头条笔试