独角兽公司电话面试记录 2019-June

独角兽公司, 果然厉害, 全是没有听说过的题目.

第一道题目大约花了二十分钟, 第二道题, 我只完成了核心 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]

 

欢迎留言说说您的思路, 第二道题目, 有比暴力算法更简洁的办法吗?

 

posted @ 2019-06-05 03:27  木匠_Charlie  阅读(265)  评论(0编辑  收藏  举报