独角兽公司, 果然厉害, 全是没有听说过的题目.
第一道题目大约花了二十分钟, 第二道题, 我只完成了核心 API 和骨架, 我还需要 20 分钟, 才能全部完成.
电话面试一小时.
前 15 分钟, 简单互相介绍, 谈谈最近的一个项目.
问一些技术概念, 工作流程 和 团队分工合作. 比如: SQL 和 NoSQL 的区别.
后 45 分钟, 编写程序:
1. 给出数组 A, 打印柱状图. 像下面这个例子.
A = [3, 2, 1, 4, 3, 5]
x
x x
x x x x
x x x x x
x x x x x x
2. location = 3, balls = 4, 给出索引位置 3 , 填充 4 个小球. 球从 A[3] 倒下来。
像下面这样填充小球, 第 4 个小球,可以在从上数第二行任一位置, 像倒水一样.
就像流水一样,要流到两边最近的低洼地,优先较低的一边.
如果多个低洼中间有一道墙,墙外面有更低的低洼,是流不过去的。必须等墙里边填满 溢出去才行。
前提假设是 两边 边界, 有无穷高的墙.
打印下面这个结果.
x
o x x
x o o x x x
x x o x x x
x x x x x x
我的思路是 B = soft copy A, B = A[:] in Python, 然后 B 记录每一个填进小球以后的高度.
顺着第一道题的思路, 结合 A, B 打印结果.
写一个子函数 fill_ball(B, index), 完成每一次的填充.
完整代码: https://www.cnblogs.com/goodwish/p/10984067.html
....
个人教训和总结:
(EPI 说了, 面试唯一的失败,是你不知道错在哪里,不知道改进和总结提高.)
1. 遇到复杂问题不要怕,保持冷静. 拆分逻辑,设计支撑数据结构, 填充数据,分层模块化编程, 设计处理逻辑,填充每个层次和接口的数据.
2. 坚持练习打代码, 夯实编程基本功.
* while loop 比for loop 更加灵活,适合处理更为复杂的逻辑. 不熟悉的场景, 先尝试 while loop.
* 数组边界条件: i == 0 or A[i - 1] , 或者 i >= 1 and A[i - 1] # 都可以保证 i - 1 不越界.
3. Robin 大师说过的: 唯快不破. 通过坚持努力多做题目, 锻炼加快解题速度.
while loop:
i = curt while i > 0 and A[i - 1] <= A[i]: i -= 1 left_idx, left_low = i, A[i]
.
for loop:
for i in range(curt, -1, -1): if i == 0 or A[i - 1] > A[i]: left_idx, left_low = i, A[i]
欢迎留言说说您的思路, 第二道题目, 有比暴力算法更简洁的办法吗?