算法工程师笔试真题总结

旷视科技2019

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
resnet-50:有多少个卷积层
参考答案:49
在这里插入图片描述
CNN中parameters和FLOPs计算:https://blog.csdn.net/sinat_34460960/article/details/84779219
(1) FLOPs = 2 * (C in * H k * W k + 1) * C out * H * W
(2) Params = (C in * H k * W k + 1) * C out
在这里插入图片描述
参考答案
(1) 标 准 答 案 1( 直 接 计 算 ) : data[670617]-0.3441 * data[1089228]- 0.7141 * data[1319628] ;标 准 答 案 2( 背 的 系 数 ) : data[670617]-0.3455 * data[1089228]- 0.7169 * data[1319628]
编写程序,求 n 个节点的二叉树有多少种形态
递推公式:
f(n)=f(n-1)f(0)+f(n-2)f(1)+……….+f(1)f(n-2)+f(0)f(n-1)
或者使用 Catalan 数 C(N, 2N) / (N+1)
给定一个卷积层 C in * C out * H k * W k, 以及输入 feature map C in * H * W,我们希望将该卷积操作转化为一次矩阵乘,以便使用一些矩阵计算优化策略,请设计转换方法。
img2col
Mat A: (H * W) * (C in * H k * W k )
Mat B: (C in * H k * W k )* (C out )
使用 KMP 算法在一长度为N 的字符串中寻找长度为 M 的子字符串的时间复杂度
O(N + M)
平衡二叉树的插入节点操作平均时间复杂度
二叉查找树和平衡二叉树:https://blog.csdn.net/qq_25940921/article/details/82183093
O(log(n))
在一长度为 N 的有序数列中寻找两个数,使得两数之和等于某指定值的最快的算法的平均时间复杂度
O(N)

target = set()
data = data*2
for i in data:
    if i in target:
        print(i,sum-i)
    else:
        target.add(sum-i)
print("not find")

找出一个数组中出现次数超过半数的元素(保证答案存在)

int moore_voting(vector<int> &num)
{
    int curIdx = 0, count = 1;
    for (int i = 1; i < num.size(); ++i)
    {
    num[i] == num[curIdx] ? ++count : --count;
    if (!count)
    {
    curIdx = i;
    count = 1;
    }
}
return num[curIdx];
from collections import Counter
def Findelement(arr):
    obj = collections.Counter(arr)
    return [k for k,v in obj.items() if v >len(arr)/2]

iHandy2019校招

在这里插入图片描述

import sys
sys.setrecursionlimit(100000000)
global count
count = 0
def fib(n):
    global count
    count = count + 1
    print(count)
    if n==0:
       return 1
    elif n==1:
        return 2
    else:
       return fib(n-1)+fib(n-2)
fib(9)
print(count)

或者观察规律:从n=3开开始,调用次数为前两次和加1
f(3) =f(2) +f(1) +1=5
f(4) =f(3) +f(4) +1=9
f(5) =f(4) +f(3) +1=15
f(6) =f(5) +f(4) +1=25
f(7) =f(6) +f(5) +1=41
f(8) =f(7) +f(6) +1=67
f(9) =f(8) +f(7) +1=109

PCA属于确定性算法,Kmeans属于不确定性算法

已知二叉树的前序序列是ABCDEFGH,中序序列是CBEDFAGH,其后序序列是?
CEFDBHGA
在这里插入图片描述
在这里插入图片描述
CPU利用率:运行的程序占用的CPU资源,表示机器在某个时间点的运行程序的情况。使用率越高,说明机器在这个时间上运行了很多程序,反之较少。
CPU是负责运算和处理的,内存是交换数据的。
1.可以看出CPU利用率低;3.I/O设备利用率低(减少多道程序的度数)
CPU一次读取的太多的程序放入内存中,因此需要降低多道程序的度数
2.交换空间的磁盘利用率高(增大内存的容量)
交换空间利用率高,因此需要扩大数据交换空间(增大内存的容量)
在这里插入图片描述
A. AVL树是最先发明的自平衡二叉查找树。在AVL树中任何节点的两个子树的高度最大差别为一,所以它也被称为高度平衡树。查找、插入和删除在平均和最坏情况下都是O(log n)。
B.伸展树(Splay Tree),也叫分裂树,是一种二叉排序树,它能在O(log n)内完成插入、查找和删除操作。伸展树支持所有的二叉树操作。伸展树不保证最坏情况下的时间复杂度为O(logN)。伸展树的时间复杂度边界是均摊的。
C.红黑树(Red Black Tree) 是一种自平衡二叉查找树,它虽然是复杂的,但它的最坏情况运行时间也是非常良好的,并且在实践中是高效的: 它可以在O(log n)时间内做查找,插入和删除,这里的n是树中元素的数目。
D.在二叉查找树中查询元素的最优时间复杂度是O(logN)即在满二叉树的情况下,最坏时间复杂度是O(n)即除叶子节点外每个节点只有一个子节点。

爱奇艺2019秋招算法方向笔试题

6个圆盘的汉诺塔,总的移动次数
63,6^n-1
在这里插入图片描述
广义表K=(m,n,(p,(q,s)),(h,f)),则head[tail[head[tail[tail(K)]]]]的值
head() 返回列表的第一个元素;
tail() 返回列表的删去第一个元素之后的剩余列表;
K=(m,n,(p,(q,s)),(h,f)),
head[tail[head[tail[tail(K)]]]]
tail(K)-------(n,(p,(q,s)),(h,f))
tail[tail[K]]--------((p,(q,s)),(h,f))
head()-----((p,(q,s))
tail()-----(q,s)
head()-------q
在这里插入图片描述
UDP包含8个字节,包头结构:源端口 16位;目的端口 16位、;长度 16位;校验和 16位
TCP包含20个字节,包头结构:源端口号16位;目的端口号16位;序列号32位;确认号32位;HeaderLenAndFlag 前4位:TCP头长度、中6位:保留、后6位:标志位;窗口大小16位
;检验和16位;紧急数据偏移量16位。序列号是指客户端确认序列号以及以前的信息都收到了,窗口大小则是提高传输效率,保证信息按序到达。

程序员编写程序时使用文件系统提供的系统调用将内存中由address地址开始的n个字节或n个记录的信息写入指定文件中,但发现文件名不可用,可行的解决办法
1.使用文件描述符代替文件名
2.使用文件句柄代替文件名

京东2019算法工程师

在这里插入图片描述
分支限界法思想
1.以广度优先或以最小耗费(最大效益)优先的方式搜索问题的解空间树
2.分支限界法中,每一个活结点只有一次机会成为扩展结点,活结点一旦成为扩展结点,就一次性产生其所有儿子结点,其中导致不可行解或导致非最优解的儿子结点被舍弃,其余儿子结点被加入活结点表中
然后从活结点表中取下一结点成为当前扩展结点
3.重复上述结点扩展过程,直至到找到所需的解或活结点表为空时为止
从中可以看出,广度优先且不满足的被舍弃,满足的找其儿子节点,所以其不可能再次成为活结点
回溯法:深度优先自然可以回到此节点。
在这里插入图片描述
在邻接表不确定或者没给出的情况下,深度优先和广度优先均有多种可能。

用俩个栈模拟实现一个队列,如果栈的容量分别是O和P(O>P),那么模拟实现的队列最大容量是多少?
2P+1,思路:https://www.cnblogs.com/eniac12/p/4865158.html

在这里插入图片描述
一、count存储A-Z的个数,即count[0]存储A的个数,于是 ++count[a[i]-‘A’]; 'A’+i,count[i]; 二、count存储Z~A的个数,即count[0]存储Z的个数,于是 ++count[‘Z’-a[i]]; ’Z’-i,count[i]。

在这里插入图片描述
1.sleep()方法
在指定时间内让当前正在执行的线程暂停执行,但不会释放“锁标志”。不推荐使用。
sleep()使当前线程进入阻塞状态,在指定时间内不会执行。
2.wait()方法
在其他线程调用对象的notify或notifyAll方法前,导致当前线程等待。线程会释放掉它所占有的“锁标志”,从而使别的线程有机会抢占该锁。
当前线程必须拥有当前对象锁。如果当前线程不是此锁的拥有者,会抛出IllegalMonitorStateException异常。
唤醒当前对象锁的等待线程使用notify或notifyAll方法,也必须拥有相同的对象锁,否则也会抛出IllegalMonitorStateException异常。
waite()和notify()必须在synchronized函数或synchronized block中进行调用。如果在non-synchronized函数或non-synchronized block中进行调用,虽然能编译通过,但在运行时会发生IllegalMonitorStateException的异常。
3.yield方法
暂停当前正在执行的线程对象。
yield()只是使当前线程重新回到可执行状态,所以执行yield()的线程有可能在进入到可执行状态后马上又被执行。
yield()只能使同优先级或更高优先级的线程有执行的机会。
4.join方法
join()等待该线程终止

在这里插入图片描述

顺丰科技2019秋招视觉算法工程师笔试客观题合集

https://www.nowcoder.com/test/15254292/summary

顺丰科技2019秋招人工智能与机器学习工程师笔试客观题合集

https://www.nowcoder.com/test/15254225/summary

蘑菇街2019届实习生-算法工程师笔试试题

https://www.nowcoder.com/test/15710382/summary

蘑菇街2019届校招-算法类笔试题

https://www.nowcoder.com/test/15710972/summary

小米2019秋招算法笔试题(A)

https://www.nowcoder.com/test/15241711/summary

京东2019校招算法工程师笔试题

https://www.nowcoder.com/test/14274536/summary

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值