快手算法岗日常实习面试经验
快手算法岗日常实习面试经验
时间: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;}
}
快手算法岗日常实习面试经验相关推荐
- 今日头条推荐系统算法岗日常实习面试经验
今日头条推荐系统算法岗日常实习面试经验 时间:2019年3月27日 地点:校内视频面试 一面 深度学习基础 Adam的原理.公式 (没答上来) 找了一个简书的讲解,挺好的,有需要的同学可以移步简单认识 ...
- 华为通信算法岗(实习)-- 准备到入职全记录
最近马上就准备入职菊厂的通信算法岗暑期实习,突然发现自己还没做过总结,写出来跟大家共勉. 第一关:性格测试 早有耳闻菊厂的性格测试很反人类,而且真的会挂人,一次不过有重测机会,两次不过直接拉黑一年,所 ...
- 我的美国(北美)计算机CS实习面试经验分享
过去的一年多里,参加了一些面试,虽然面过的公司不多,但都从头一直走到尾.毕竟自己也是花了大量的时间和精力在这一场场的面试里.所以,就絮叨下自己的一些经验,希望能给在美国找实习找工作的同学们提供一点点帮 ...
- vivo人工智能推荐算法岗提前批面试
vivo人工智能推荐算法岗提前批面试 8月15日面了vivo的人工智能推荐岗位 主要的面试问题有: 1.RNN的正向传播公式 2.CNN的正向传播公式 3.深度学习项目中过拟合的问题?怎么解决?样本不 ...
- 机器学习算法岗:常见面试问题及解答整理,持续更新
机器学习算法岗:常见面试问题及解答整理,持续更新 一.决策树ID3和C4.5的差别?各自优点? ID3算法: C4.5算法: 差异: 二.过拟合的原因及如何防止 三.几种模型( SVM,LR,GBDT ...
- 2018年互联网技术岗(数据分析)暑期实习面试经验
此经验帖适合想找互联网相关工作的人,如数据分析.算法工程师.数据挖掘工程师等.或者是想进入BAT等互联网公司的人,我会介绍他们暑期实习招聘流程及笔面试经验等,暑期实习往往是有转正机会的.友情提醒: ...
- 【面试经验分享】十分值得一看! 研一下-算法实习-面试经验汇总
青藤云安全(2月26日) 机器学习算法实习岗 微信视频面试,15分钟.主要问了下简历上做阿里云比赛的经历,后未联系,预计已挂. 主要存在的问题: 1)做的东西太简单太基础,不够看,导致面试官其实没啥可 ...
- 【面试招聘】有哪些好的秋招经验分享?数据、算法岗的几点经验分享
作者:Datawhale优秀回答者 目录 有哪些好的秋招经验分享? 机器学习中常用的最优化方法有哪些? 想通过数据竞赛来提升实践能力,作为小白有什么入门经验?(今日问题) 有哪些好的秋招经验分享? 1 ...
- 京东Java后台开发岗社招面试经验分享,4面的面经
前言 正好最近我一朋友面试京东回来,和我聊了他的面试经过,最后经过四面成功斩获offer!下面我把他所得经验毫无保留的分享给大家!希望对正准备面试小伙伴们能有所帮助!!! 京东一面 1.自我介绍 2. ...
最新文章
- JAVA SE学习day_06:字符流、异常处理
- apache solr velocity 注入远程命令执行漏洞 (cve-2019-17558)
- jboss eap 7.0_创建委托登录模块(用于JBoss EAP 6.1)
- docker内存阀值_kubernetes调度之资源耗尽处理配置
- python 匹配字符串map lambda函数_Python map amp; reduce 以及lambda匿名函数 - jvisualvm - ITeye博客...
- 第二节:ES6新增了let关键字,干嘛用的?
- OpenBSD4.6 FAQ[一]
- []TLD code run
- mysql linux 表名区分大小写吗_MySQL在linux下的表名如何不区分大小写
- 一文告诉你市面上最火的游戏都是用什么引擎做的!!!
- matlab中dfft,2-DFFT 
该实验的目的是开发一个 2-D FFT程序包 联合开发网 - pudn.com
- 中标麒麟linux系统微信安装,Linux安装wine微信安装和遇到的问题及解决方法
- 光伏窗性能研究(5)——中空光伏窗节能性能模拟及优化设计
- ddr4 dqs 频率_ddr4
- vue中接口返回数据过大回显导致页面崩溃解决方法
- stc单片机c语言程序头文件(stc12c5a60s2.h,STC12C5A60S2单片机头文件
- 大二下学期ACM比赛总结
- Matlab 动态心形线GIF图
- 华为MateBook16投屏设置
- 普博也有120万房补!40万安家费+50万科启,硕士也可入教职!浙江该高校大量招人...