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

时间: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 = null;left_tail.right = tmp;}TreeNode right_tail = preorder(tmp);return right_tail == null ? (left_tail == null ? root: left_tail): right_tail;}public void flatten(TreeNode root) {preorder(root);}
}

二面

合并k个有序链表为一个有序链表。这是LeetCode上的原题:Merge k Sorted Lists. 我的做法是用一个优先队列维护k个链表的表头,每次从优先队列中取出队首元素作为合成链表的一个节点,并将所在链表的头指针后移并加入优先队列,如此循环直到优先队列为空。记合成链表的长度为n, 则建优先队列的复杂度为O(k), 从优先队列中取队首并将新元素插入优先队列的复杂度为O(logk), 这样的出队入队操作要重复n次,所以总复杂度为O(k+nlogk) = O(nlogk). 更加详细的解题报告见我的博客LeetCode 23. Merge k Sorted Lists(最小堆)。由于现场面试官允许使用Java自带的优先队列类,故我在面试现场没有手写一个最小堆来实现优先队列:

/*** Definition for singly-linked list.* public class ListNode {*     int val;*     ListNode next;*     ListNode(int x) { val = x; }* }*/
class Solution {  class Node {public int val;public int index;public Node(int val, int index){this.val = val;this.index = index;}public Node(Node node){this.val = node.val;this.index = node.index;}}public ListNode mergeKLists(ListNode[] lists) {int k = lists.length, i = 0, value = 0;if (k == 0){return null;}PriorityQueue<Node> queue = new PriorityQueue<Node>(1, new NodeComparator implements Comparator<Node>() {@Overridepublic int compare(Node n1, Node n2){return n1.val - n2.val;}} );ListNode head = null, ret = null;for (i=0; i<k; i++){if (lists[i] != null){queue.add(new Node(lists[i].val, i));lists[i] = lists[i].next;}}if (queue.size() == 0){return null;}while (!queue.isEmpty()){Node cur = queue.poll();if (head == null){head = new ListNode(cur.val);ret = head;}else{head.next = new ListNode(cur.val);head = head.next;}if (lists[cur.index] != null){queue.add(new Node(lists[cur.index].val, cur.index));lists[cur.index] = lists[cur.index].next;}}return ret;}
}

快手算法岗日常实习面试经验相关推荐

  1. 今日头条推荐系统算法岗日常实习面试经验

    今日头条推荐系统算法岗日常实习面试经验 时间:2019年3月27日 地点:校内视频面试 一面 深度学习基础 Adam的原理.公式 (没答上来) 找了一个简书的讲解,挺好的,有需要的同学可以移步简单认识 ...

  2. 华为通信算法岗(实习)-- 准备到入职全记录

    最近马上就准备入职菊厂的通信算法岗暑期实习,突然发现自己还没做过总结,写出来跟大家共勉. 第一关:性格测试 早有耳闻菊厂的性格测试很反人类,而且真的会挂人,一次不过有重测机会,两次不过直接拉黑一年,所 ...

  3. 我的美国(北美)计算机CS实习面试经验分享

    过去的一年多里,参加了一些面试,虽然面过的公司不多,但都从头一直走到尾.毕竟自己也是花了大量的时间和精力在这一场场的面试里.所以,就絮叨下自己的一些经验,希望能给在美国找实习找工作的同学们提供一点点帮 ...

  4. vivo人工智能推荐算法岗提前批面试

    vivo人工智能推荐算法岗提前批面试 8月15日面了vivo的人工智能推荐岗位 主要的面试问题有: 1.RNN的正向传播公式 2.CNN的正向传播公式 3.深度学习项目中过拟合的问题?怎么解决?样本不 ...

  5. 机器学习算法岗:常见面试问题及解答整理,持续更新

    机器学习算法岗:常见面试问题及解答整理,持续更新 一.决策树ID3和C4.5的差别?各自优点? ID3算法: C4.5算法: 差异: 二.过拟合的原因及如何防止 三.几种模型( SVM,LR,GBDT ...

  6. 2018年互联网技术岗(数据分析)暑期实习面试经验

      此经验帖适合想找互联网相关工作的人,如数据分析.算法工程师.数据挖掘工程师等.或者是想进入BAT等互联网公司的人,我会介绍他们暑期实习招聘流程及笔面试经验等,暑期实习往往是有转正机会的.友情提醒: ...

  7. 【面试经验分享】十分值得一看! 研一下-算法实习-面试经验汇总

    青藤云安全(2月26日) 机器学习算法实习岗 微信视频面试,15分钟.主要问了下简历上做阿里云比赛的经历,后未联系,预计已挂. 主要存在的问题: 1)做的东西太简单太基础,不够看,导致面试官其实没啥可 ...

  8. 【面试招聘】有哪些好的秋招经验分享?数据、算法岗的几点经验分享

    作者:Datawhale优秀回答者 目录 有哪些好的秋招经验分享? 机器学习中常用的最优化方法有哪些? 想通过数据竞赛来提升实践能力,作为小白有什么入门经验?(今日问题) 有哪些好的秋招经验分享? 1 ...

  9. 京东Java后台开发岗社招面试经验分享,4面的面经

    前言 正好最近我一朋友面试京东回来,和我聊了他的面试经过,最后经过四面成功斩获offer!下面我把他所得经验毫无保留的分享给大家!希望对正准备面试小伙伴们能有所帮助!!! 京东一面 1.自我介绍 2. ...

最新文章

  1. JAVA SE学习day_06:字符流、异常处理
  2. apache solr velocity 注入远程命令执行漏洞 (cve-2019-17558)
  3. jboss eap 7.0_创建委托登录模块(用于JBoss EAP 6.1)
  4. docker内存阀值_kubernetes调度之资源耗尽处理配置
  5. python 匹配字符串map lambda函数_Python map amp; reduce 以及lambda匿名函数 - jvisualvm - ITeye博客...
  6. 第二节:ES6新增了let关键字,干嘛用的?
  7. OpenBSD4.6 FAQ[一]
  8. []TLD code run
  9. mysql linux 表名区分大小写吗_MySQL在linux下的表名如何不区分大小写
  10. 一文告诉你市面上最火的游戏都是用什么引擎做的!!!
  11. matlab中dfft,2-DFFT 该实验的目的是开发一个 2-D FFT程序包 联合开发网 - pudn.com
  12. 中标麒麟linux系统微信安装,Linux安装wine微信安装和遇到的问题及解决方法
  13. 光伏窗性能研究(5)——中空光伏窗节能性能模拟及优化设计
  14. ddr4 dqs 频率_ddr4
  15. vue中接口返回数据过大回显导致页面崩溃解决方法
  16. stc单片机c语言程序头文件(stc12c5a60s2.h,STC12C5A60S2单片机头文件
  17. 大二下学期ACM比赛总结
  18. Matlab 动态心形线GIF图
  19. 华为MateBook16投屏设置
  20. 普博也有120万房补!40万安家费+50万科启,硕士也可入教职!浙江该高校大量招人...

热门文章

  1. 实测中国版Afterpay:上市就被套现大军盯上,中介费率高达50%
  2. app启动速度优化实践
  3. transmit video
  4. ZYNQ学习笔记PS部分【基本介绍】
  5. [1-3] 把时间当做朋友(李笑来)Chapter 3 【提高心智,和时间做朋友】 摘录
  6. 英仕曼235年传奇之路从CTA策略鼻祖到全球最大上市对冲基金
  7. 吉吉国王(树形dp)
  8. 【题解】CSP-J2021第二轮题解
  9. Singularity 快速上手, 带你飞
  10. c语言逻辑运算符两侧运算对象,逻辑运算符两侧运算对象的数据类型是什么?...