商汤科技2018校招C /算法笔试题

交换机主要工作在()?

网络层是路由器,数据链路层是交换机,物理层是光纤,传输层是TCP/UDP协议!
在这里插入图片描述

完全二叉树

完全二叉树除最后一层外都是满的,所以也可以这么算:第一层1个节点,令层数为n,除最后一层外,每层的节点个数为2^(n-1),有330个叶子节点,所以倒数第二层为第9层,有256个节点,256+x=330得x=74,所以共有1+2+4+8+16+32+64+128+256+74*2=659个节点,又因为第659个节点是右子节点,所以节点个数也可以是660。

因为二叉树度为2的结点n2和叶子结点存在n0:n0=n2+1的关系,所以度为2的结点个数为329,又因为完全二叉树可能存在度为1的结点,所以结点个数为:330+329=659或330+329+1=660.

假设有一种无色的特殊颜料,与红色颜料混合后会变紫色,与黄色颜料混合会变为绿色,与红色、黄色颜料一起混合会变为黑色,发生颜色变化需要1小时。现有700瓶特殊颜料,其中一瓶已经变质,不管与什么颜料混合都会变为白色。只有一小时时间, 最少需要多少个调色盘才能找出变质的特殊颜料?10

10个调色盘 ,分别当作10个二进制位。
700瓶颜料从1到700编号,写成二进制形式,对于每一瓶颜料,在其二进制为1的位所对应的调色盘上加入。
一小时后,按照变成白色该调色盘对应位为1的原则,写出一个二进制数就是变质颜料的编号。
2的10次方 = 1024 > 700
2的9次方 = 521 < 700
因此需要10盘。

你只有 10 只小白鼠和一星期的时间,如何检验出哪个瓶子里有毒药?

有 1000 个一模一样的瓶子,其中有 999 瓶是普通的水,有一瓶是毒药。任何喝下毒药的生物都会在一星期之后死亡。现在,你只有 10 只小白鼠和一星期的时间,如何检验出哪个瓶子里有毒药?

根据2^10=1024,所以10个老鼠可以确定1000个瓶子具体哪个瓶子有毒。具体实现跟3个老鼠确定8个瓶子原理一样。000=0001=1010=2011=3100=4101=5110=6111=7一位表示一个老鼠,0-7表示8个瓶子。也就是分别将1、3、5、7号瓶子的药混起来给老鼠1吃,2、3、6、7号瓶子的药混起来给老鼠2吃,4、5、6、7号瓶子的药混起来给老鼠3吃,哪个老鼠死了,相应的位标为1。如老鼠1死了、老鼠2没死、老鼠3死了,那么就是101=5号瓶子有毒。同样道理10个老鼠可以确定1000个瓶子

一个口袋装着若干蓝球和若干红球,随机抽出两个球。第一个球是蓝球的概率为0.5; 第一球是蓝球且第二个球是红球的概率为0.2。现如果已知第一个球是蓝球,则第二个球是红球的概率是多少?

个狗妈妈有70块肉,狗宝宝距离狗妈妈60步。每次狗妈妈最多拿40块肉,每走2步需要吃掉一块肉,则它最多能把20块肉拿给狗宝宝。

根据题意,如果满载直接到终点会浪费掉30肉,而最优解一定要将这30肉消耗掉,以换取满载的情况下距离宝宝最近,因此一定要在起点与终点之间有一个折返点;
设:起点为O、折返点为A、终点为B。OA距离为X,最后剩余Y肉给宝宝;则:
第一次从O满载出发再返回有:40-(X/2)*2肉留在A点
第二次O载30肉出发到A点捡起第一次留下的肉应该满载:30-X/2+(40-(X/2)*2)=40得到X=20
则Y=70-(3x+(60-x))/2,代入x=20得Y=20

101枚硬币中有一枚假币,有一个无砝码的天平,在最坏情况下最少称1次,可以判断假币比真币重还是轻。2次

问题点在于确认劣质硬币是偏重或偏轻,把所有硬币当作砝码,

首先说最好的情况,第一次天枰两边先各放50枚,如果说左右两边平衡,那么剩下第101枚正好就是劣质硬币,第二次把劣质硬币放任意一边即可确认这枚劣质硬币是重或轻。(总共称两次)
最坏的情况,在第一次称,左右两边各50枚硬币,左右不平衡,说明劣质硬币在这一百枚里面其中一个,那么仍然只需再称一次即可确认是劣质硬币是重或轻,任意取一边的50枚分别放在天枰两边,打个比方,如果你取便轻的那一端的50枚,分两半放天枰上,如果左右平衡则说明劣质硬币再另一端偏重的50中,即确认劣质硬币偏重。故最坏的情况也只需称2次。
方案1:

将硬币按A组(50)、B组(50)、C组(1)分组,先比较A、B两组:

1>.若A=B,则C为假币,再用A或B中任一个与C比,C重则假币重,C轻则真币重

2>.若A!=B,则A或B中含假币,将A组一分为二:A1(25)、A2(25),比较A1、A2:

   <1>.若A1=A2,则A为真币,故:A>B => 真币重;A<B => 假币重

   <2>.若A1!=A2,则A含假币,故:A<B => 真币重;A>B => 假币重

方案2:

1>.将硬币按A组(33)、B组(33)、C组(35)分组,先比较A、B两组:

1>.若A=B,则C含假币,再用A+B中任35个与C比,C重则假币重,C轻则真币重

2>.若A!=B,则C为真币,再用C中33个与A比较:

   <1>.若C=A,则A为真币,故:A>B => 真币重;A<B => 假币重

   <2>.若C!=A,则A含假币,故:A<B => 真币重;A>B => 假币重

注意不是找出假币,而是只要判断出假币比真币轻还是重

扫描二维码关注公众号,回复: 10556893 查看本文章

给定数组 [ 48,8,20,72,65,17,28,23 ],构造一棵左子节点 < 父节点 < 右子节点 的二叉搜索树(Binary Search Tree)。把数字48删除,使用前序节点调整后,则数字28的左子节点是数字8。在这里插入图片描述

前序节点调整:把左子树前序遍历的最后一个节点 也就是左子树里面最大的替换到删除的位置。如果拿来替换的这个节点有子树,递归此过程。

发布了46 篇原创文章 · 获赞 10 · 访问量 4385

猜你喜欢

转载自blog.csdn.net/GFDGFHSDS/article/details/105150879
今日推荐