zoukankan      html  css  js  c++  java
  • hulu

    一、

    一开始因为没收到含有共享文档链接的邮件,所以简单自我介绍,聊了几句项目。问了:

    1. 玩嗨如果数据库结构变化要怎么办

    2. 哈佛项目是否为官方渠道

    一直没收到邮件,面试官读网址给我,进到共享文档界面。

    共享文档编程:

    1. 单链表的快速排序

    我先求了长度,他说不用求长度。

    第一个元素为枢轴,然后把当前链表分成两个链表,一个全部是小于等于枢轴的元素,另一个全部是大于等于枢轴的元素,然后递归快排这两个新链表,最后把它们连起来。

    2. 给一个无序数组,元素不重复,连续数字的最大长度。例:[4,5,1,3,8,9]的最长连续数字为[3,4,5],所以最大长度为3。

    我先说的排序,然后遍历。时间复杂度O(nlogn)。

    面试官说时间复杂度低一些的呢。

    提示可以用额外的存储空间来换时间。

    最后说出来用哈希表存储每个元素是否出现,然后从每个元素开始找它加1的元素是否存在,若存在则长度加1,若不存在则重新计数。

    具体实现:首先遍历链表用map记录元素是否存在(map.find(element) != map.end()即元素存在),然后再遍历链表,对每一个元素,找比它大和比它小的连续元素,从map中删除所有找过的元素,记录最大长度。

    时间复杂度O(n)。

    3. 给一个n,求从0到n所有数字的二进制表示中1的个数。

    n为偶数时,n的二进制表示中1的个数 = (n/2)的二进制表示中1的个数。

    n为奇数时,n的二进制表示中1的个数 = (n-1)的二进制表示中1的个数 + 1。

    设f(n)为 0到n所有数字的二进制表示中1的个数。

    n为奇数时,0到n的所有偶数的二进制表示中1的个数为 f(n/2),0到n的所有奇数的二进制表示中1的个数为 f(n/2)+(n+1)/2。

    n为偶数时,0到n的所有偶数的二进制表示中1的个数为 f(n/2),0到n的所有奇数的二进制表示中1的个数为 f((n-1)/2)+((n-1)+1)/2。

    综上,

    f(n) = f(n/2) * 2 + (n+1) / 2, n为奇数

              f(n/2) + f((n-1) / 2) + n/2, n为偶数

    二、

    五道算法题:

    1. 矩形覆盖层数:给n个矩形的长和宽,长宽都大于等于的可以覆盖,问最多能覆盖的层数。

    按矩形的宽和长从小到大排序,然后动态规划。

    从第一个开始,记录到它为止最大覆盖层数。

    对每个矩形,遍历它前面的所有矩形,若能覆盖,则更新该矩形的覆盖数的最大值。

    2. 求排列的下一个

    从最右开始找到n[i]<n[i+1]的第一对相邻数字。若没有则说明没有下一个排列。

    将n[i]与最右数字(即i到最右的最小数字)交换,再将i+1到最右排序。


    3. n个人比赛 0 VS 1, 2 VS 3, ..., (n-2) VS (n-1), 问i和j什么时候相遇(假设i和j每次都能胜出)。

    假设都是编号较小者胜。

    第一局:0 VS 1, 2 VS 3, ..., (n-2) VS (n-1)

    第二局:0 VS 2, 4 VS 6, ..., (n-2) VS (n-1)

    当 i / 2^k == j / 2^k 时,i和j相遇。


    4. 求n位字符串有多少种形式


    5. 求完全二叉树的最后一个节点

    递归后序遍历,每次返回该子树的深度和其中最右节点指针。

    对某个节点,若其左子树深度大于右子树,则该子树深度为左子树深度加一,返回其左子树最右节点指针;否则,该子树深度为右子树深度加一,返回其右子树最右节点指针。

  • 相关阅读:
    trap命令
    MySQL数据库中日期中包涵零值的问题
    MySQL锁等待分析【2】
    MySQL锁等待分析【1】
    mysql日志文件相关的配置【2】
    mysql日志文件相关的配置【1】
    Linux的标准输出、标准错误输出、nohup
    mysql在关闭时的几个阶段
    MHA环境搭建【4】manager相关依赖的解决
    keepalived+httpd 做web服务的高可用
  • 原文地址:https://www.cnblogs.com/argenbarbie/p/5349248.html
Copyright © 2011-2022 走看看