快手算法岗日常实习面试经验

本文分享了2019年4月在快手公司面试算法实习的经验,包括两轮面试的手写算法题。一面是将二叉搜索树转化为有序链表,类似LeetCode的Flatten Binary Tree to Linked List问题;二面则是合并k个有序链表,采用优先队列实现,复杂度为O(nlogk)。详细解题过程可参考作者的LeetCode博客。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

快手算法岗日常实习面试经验

时间:2019.4.3 10:00 地点:北京市海淀区上地西路6号(快手总部)-E座

这次快手的面试一共两面,每一场面试都是先针对简历问问题然后手写一道算法题。由于我简历里科研的内容比较多,所以两位面试官都问了我关于我的一作在投论文的问题。由于是现场面试,所以代码是用笔写在草稿纸上然后面试官肉眼判题的。下面的面试流程就不叙述讨论论文的部分,只叙述手写算法题的部分。

一面

【二叉树形态变换】给定一个用中序遍历定义的二叉搜索树,用in-place的算法把二叉树变成有序链表,其中链表用左子树为null的二叉树等价表示。下面是例子,其中N表示null:
在这里插入图片描述

这道题类似LeetCode上的Flatten Binary Tree to Linked List,只不过LeetCode上原二叉搜索树是用先序遍历定义的。大致思路是一样的,都是在先序遍历或中序遍历的过程中加入节点指针的重定向操作,注意一下左子树或右子树为空的情形即可。更加详细的解题报告见我的博客LeetCode 114. Flatten Binary Tree to Linked List(二叉树)。LeetCode上那题的代码如下,可供参考:

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
   
    private TreeNode preorder(TreeNode root)
    {
   
        if (root == null)
        {
   
            return null;
        }
        TreeNode tmp = root.right, left_tail = preorder(root.left);
        if (root.left != null)
        {
   
            root.right = root.left;
        }
        root.left = null;
        if (left_tail != null)
        {
   
            left_tail.left 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值