• 图森


    编程:1.lfu cache、lru cache

       2.给一个正整数集合,求一个和最大且能被3整除的子集。Follow up: 如果集合里有正有负,怎么做(http://www.1point3acres.com/bbs/thread-331981-1-1.html)

       3.leetcode136变体,如果出现两次的数总是相邻的,有没有比异或一遍更高效的做法

       4.leetcode200-number of islands;followup:leetcode694-Number of Distinct Islands,leetcode253-

       5.leetcode69 sqrt double (binary search)
       6. calculate possibilities (dfs -> recursion -> dp)
    给你n个硬币,每个硬币正面向上概率为一个array [p1, p2, ..., pn]
    问题:每个硬币扔一次,计算k个正面向上的概率

             follow up:空间怎么优化到On

       7.很简单的二叉树题,判断树的所有节点value是不是都相同

       9.给定N,请通过从小到大输出,分母不超过N的真分数序列。比如给定5,就输出1/5,1/4, 1/3,5/2,....等
    先开始想了一个用PriorityQueue的算法,因为不超过N的序列中,以分母归类,以n=5为例,
    1/5 2/5 3/5 4/5
    1/4 2/4 3/4.本文原创自1point3acres论坛
    1/3 2/3
    1/2  
    首先把每一行的第一个元素加入PriorityQueue,再poll出来,poll到的数用一个指针往后移动,这样时间是O(nlogn)。. visit 1point3acres for more.
    后来面试官给提示说,这其实是一个从左到右,从上到下都递增的序列,每次只需要比较右边的和下边的谁大就可以了。

       10.一个4*4的棋盘,O代表空位,X或者Y代表棋子。每次可以移动一步,求问最少多少次可以移动至胜利。胜利的条件是,存在排成一列的或者一行或者一条斜线的X(或者Y)。
    OXXY
    XOOY. 留学申请论坛-一亩三分地
    XXXY
    YYOO
    我先说了DFS,后来觉得应该是BFS,通过Hash值来保存棋盘的状态。



       11.两堆石子(m,n),两个人A和B,每次只能取(0,k)或者(k,0)或者(k,k),其中k<=min(m,n)。求问如果A先取,A有没有必胜策略。
    首先想的是迭代,边界条件是如果m=n,那么A必定赢了。
    初步的想法是,f(m,n) = f(m-k,n-k) || f(m-k,n) || f(m,n-k) 等等 0<k<min(m,n)
    时间复杂度是3的min(m,n)次方。
    后来又说能不能提升复杂度,想到了记忆化搜索。但是最后面试官说可以达到O(m)的复杂度

    最后一题忘记说赢的条件了,就是谁先把两堆石子都取完了,谁就赢了-google 1point3acres

       12.口头design 一个类似于找一对朋友的东西,要求朋友间距离小于K,并且朋友属于同一组,不难,用一个sliding window size K, running time O(N)。

       13.给N个点,连起来,长度K等分,找到等分点(在折线上),也不难,就是码有点难写,cornner case,dummy node 比较繁琐。 medium 难度,做法就是presum 然后binary search (或者map到index也可以,我用了upperbound)到位置找点,我没仔细写,写了几行core code,也是O(N)。

       14.给一个size 为n的堆,O(k logk) 时间求这个堆中前k小的树

       15.一个数轴上,有n个点(x1,x2,...,xn)和m个区间(a1_b1),(a2_b2),...,(am,bm)。每一个点只能匹配一个区间,每一个区间也只能匹配一个点。匹配的必要条件是点包含在区间之内
    也就是对于(ai,bi),当ai<=x<=bi时,可以进行匹配,当然也可以选择不匹配,把这个区间让给其他的点。求最多可以有多少个区间被匹配到

       17.面试官说由于你是面dl组的,所以coding不考难的。问了一些c++基本知识和c++11新特性,然后算法题 实现了一个循环队列,和一道跟树相关的easy题和followup

       18.物体从x = 0处开始运动,初速度v0 = 1m/s, 给出两个array
    l1 = [[2,4],[4,7]...] 
    l2 = [[1,3],[5,8]...].
    l1表示物体运动到l1[i][0]时刻时,速度变为l1[i][1],
    l2表示物体运动到l2[i][0]坐标时,速度变为l2[i][1]..
    给定一个时间点t,求物体在t时刻的position.

        19. Edit Distance

        20.1. pow(x,n) ,log(n) 2. longest common subsequence +follow up dp +返回一个结果 +返回所有结果

        21.第一题用DFS是肯定可以做的,但我当时想的是先排个序,然后greedy地取集合里的所有数,看看除3余几

    1) 如果余0直接return
    2) 如果余1,考虑是丢掉一个最小的除3余1的数,还是丢掉两个最小的除3余2的数.留学论坛-一亩-三分地
    3) 如果余2也是类似的
    后来跟面试官讨论发现其实不用排序。。打个擂台就能找了(但其实我是想着排序了代码好写一点orz)
    优化后时间复杂度是O(n),本来还担心这个方法会不会有点野鸡,但是讲道理效率确实比DFS好得多。。。
    follow up: 加入负数的话也是类似的,一开始greedy地取所有正数,然后再考虑是丢掉最小的正数还是加入最大的负数,复杂度一样

        22.

    一面:
    介绍一下简历约5~10分钟
    然后coding:
    给array of integers. 1point 3acres 论坛
    裡面有一个数字是单独出现  其他都会出现两次(而且一起出现)
    ex: [1,2,2,3,3]
    要判断哪个数字是单独出现的. 牛人云集,一亩三分地
    以这个例子的话就是 1
    LZ 一开始先说了用HashMap 去记出现几次
    面试官说有没有不用额外空间的方式
    我说 那就用XOR 去算吧   剩下来的那个就是单独出现的了  複杂度是O(N)
    面试官说可以,但是希望再想其他方式可以优化的 比如说O(logN)複杂度
    看到logN就想到binary serach了
    不过一时没有想到怎麽个search法
    面试官给了提示才推出来的
    结论就是用index是基数或偶数 来判断 search砍半时应该往前找或往后找  (多找两个例子就可以看出来了)
     
     
    二面:
    考binary tree
    给你一棵树 问是不是uniform tree (也就是 整棵树的值都一样)
    follow-up: 问这棵树有几个subtree是uniform tree.
    两题都是divide & conquer recursive写的
    面试官就说不然再考一题吧:.1point3acres网
    给一个数组 裡面只有 0和1
    问最少次数把0换成1 或把1换成0    可以让 0都在左边 1都在右边 (或者0都在右边  1都在左边)
    [0,1,0,1]的话就是把第一个1换成0  可以达到分边
        23.一面两个年轻的工程师,主要聊项目,稍有深度即可。会问一些他们关心的检测问题,还有怎么做hard example mining等等。二面乃岩,问的很有深度,会问损失函数背后的假设是什么,还有如果需求改变如何设计一个新的损失函数等等。三面工程的同事,上来就让写一个LRU cache实现,代码量还是挺大的,然后一步步优化瓶颈,貌似面试官还比较满意。后来又出了一道比较有意思的题,我提出了DFS+DP的思路,面试官说第一次有人说出这样的思想,然后告诉我其实可以用插入排序实现,甚至归并排序,赞解题思路。

    24.一面:
    问了一些基础的data structure, algorithm, 聊了大概10分钟简历,然后一道很类似与merge sort的基础题目,但是corner case比较复杂,所以写完基本也就没什么时间follow up了。然后让问问题。
    三面:
    看到已经面了50分钟,还以为就结束了。没想到还有以到coding题目,我没见过,但后来面完发现之前地里有出现过... 不过其实挺简单,就是n个点在2D平面上,return k等分点的位置并返回。基本就是presum,然后考虑各种corner case

        25.第一轮: leetcode76
    第二轮: 简历
                 字典树 
                 字符串匹配1 : 正常版 =>KMP/RK
                 字符串匹配2 : 模版串可以shuffle (abc 可以匹配bca)
                 字符串匹配3 : 模版串可以shuffle + mapping (abc 可以匹配321    abc =》 cba =》 321). 1point 3acres 论坛
                 字符串匹配4 : AC自动机
                 给n个点和m个区间,一个点最多匹配几个区间 问最多匹配几个区间和点 :  堆+扫描线    需要证明正确性    貌似用二分图?-google 1point3acres
                 给n的点形成一条折线,求k等分点 : 二分
                 有n个object  两两之间可以有三种关系(相同种类1,不同种类2,不知道2)  给m个三元组(object1, object2,relation 1/2/3)假设不存在矛盾  求问给定一些二元组(object1,object2) 输出他们的关系 . more info on 1point3acres
                 A B  1
                 A C  1.本文原创自1point3acres论坛
                 A D  2
                 C  F  1
                 D E  2
                 则输出 B D =》 2    A E =》 3  A F =》1           并查集建点(same relation) +   图遍历建边(different relation)   

        26.leetcode215,但是不能用priority queue,必须用quick sort来写
           leetcode53,这是个easy题很快就写好了,但是followup是找出两个subarray,使他们sum最大,这里我用的是两个数组保存每个位置左边的maximum subarray和右边的maximum subarray。然后找两个数组对应位置sum最大的就行了

    1.问了ssh,远程连接如果断了,远程端程序还会继续运行吗?ssh跑远程程序,怎么保证断开链接,代码可以继续运行?

    不会运行。为什么?

    screen -s abc创建一个会话,在这个窗口执行程序,然后Ctrl+a+d 退出,让会话Detached,这样就能保证你的任务在后台一直运行,也不会随着终端的关闭任务就停止运行。

    https://zhuanlan.zhihu.com/p/40133139

    有时候我们需要任务在后台运行,且关机不影响任务的执行,推荐用screen.

    首先linux下载screen 命令:进入root后 apt install screen 或者直接sudo apt install screen

    (1)screen -S abc 创建一个abc的会话,即打开了一个新的窗口。在里面执行你想要执行的程序。再用Ctrl+a+d 退出,让会话Detached,这样就能保证你的任务在后台一直运行,也不会随着终端的关闭任务就停止运行。

    (2)screen -ls 查看当前的会话。

    (3)screen -r abc 重新连接abc这个会话,让会话Attached

    (4)进入会话,Ctrl+d 为退出并删除会话。或者screen -X -S 会话名称 quit 直接强制杀死一个Detached 会话。

    (5)screen -wipe 清除一系列Dead的会话。

    2.情景题:for循环读十万张图片,如何优化,如何加速

    大规模图片几百万张,如何加速处理,高效读取图片

  • 相关阅读:
    Android从零开发目录
    全国软考数据库系统工程师教程(第2版) 第1章 计算机系统知识
    全国软考数据库系统工程师教程(第2版)目录
    jvm性能调优(转载)
    开博宣言
    使用C#为Uipath封装控件
    Java时间简单操作
    js限制文本框内只能输入数字
    正则表达式语法
    JVM调优浅谈
  • 原文地址:https://www.cnblogs.com/ymjyqsx/p/9574699.html
Copyright © 2020-2023  润新知