zoukankan      html  css  js  c++  java
  • 独角兽公司电话面试记录 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]

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

  • 相关阅读:
    boost::asio 连接管理11 如何关闭连接
    boost::asio async_write也不能保证一次发完所有数据 二
    boost::asio async_write也不能保证一次发完所有数据 一
    boost参考博客
    C++ 多线程编程总结
    Boost::asio io_service 实现分析
    使用boost io_service时,需要注意的东西
    Boost::Thread 多线程的基础知识
    boost::thread类
    Boost::thread库的使用
  • 原文地址:https://www.cnblogs.com/goodwish/p/10977386.html
Copyright © 2011-2022 走看看