进入六月,秋招已经近在咫尺了。因为没有投实习,所以早早地准备提前批了。
VIVO这个提前批算是相当早了,据称不影响秋招,所以先投一投涨涨经验。
第一个工作就是要写简历,建议在学长的模版上改,突出项目经验与专业技能。因为有内推码加上学校还可以,所以投的志愿很顺利的进入笔试了,第一个岗位是嵌入式。(牛客网上有985学校没填内推被刷的,可见有内推的话还是填一下比较好)
笔试时间6.4
笔试之前,要调试好chrome浏览器,摄像头,以及确保网络好使。本来以为是选择题与计算题编程题结合,没想到是三道编程题,一个小时。
题目描述:
1、A、B两个数组,要求输出A中存在而B中不存在的元素。
2、一个单向链表,输入m,n,要求在第m和第n区间之内的元素倒序存储并输出此链表。
3、有n种礼品,每个礼品对应一个热度值,总金额为k,每个礼品只能买一次,如何购买可以使得所有礼品的总热度值最高。
注意事项:
vivo是给出部分代码,让你完成空着的部分,因此首先就是要搞清楚到底一道题有几个部分需要补充,不止功能函数,主函数也有可能缺失。
第一题相对容易:
rlistb = []
res = []
for i in b:
listb.append(i)
for j in a:
if j not in listb:
res.append(j)
return res
第二题,涉及到新建链表与反转链表操作:
新建链表示例: https://blog.csdn.net/hotpotbo/article/details/78390342
#! conding:utf-8
__author__ = "hotpot"
__date__ = "2017/10/30 9:20"
class Linknode(object):
def __init__(self,val=None,next=None):
self.val = val
self.next = next
def list_2_linknode(array):
tem_node = Linknode()
node = Linknode()
for i in array:
#记得是判定val是否有值,并且用一个node记住头节点,然后返回的是头节点
if not tem_node.val:
tem_node.val =i
node = tem_node
else:
tem_node.next = Linknode(i)
tem_node = tem_node.next
return node
if __name__ == '__main__':
array = [1,2,3,4,5]
print(list_2_linknode(array).next.next.val)#
本题中的linknode没有输入,因此要改成如下形式。
class Linknode(object):
def __init__(self):
self.val = None
self.next = None
def list_2_linknode(array):
tem_node = Linknode()
node = Linknode()
for i in array:
#记得是判定val是否有值,并且用一个node记住头节点,然后返回的是头节点
if not tem_node.val:
tem_node.val =i
node = tem_node
else:
tem_node.next = Linknode()
tem_node.next.val = i
tem_node = tem_node.next
return node
对于反转链表,可以利用数组反转,代码如下:
class Linknode(object):
def __init__(self):
self.val = None
self.next = None
def list_2_linknode(array):
tem_node = Linknode()
node = Linknode()
for i in array:
#记得是判定val是否有值,并且用一个node记住头节点,然后返回的是头节点
if not tem_node.val:
tem_node.val =i
node = tem_node
else:
tem_node.next = Linknode()
tem_node.next.val = i
tem_node = tem_node.next
return node
def printnode(link):
p1 = link
reslink = []
while p1:
reslink.append(p1.val)
p1 = p1.next
return reslink
def reversenode(link,m,n):
pass
array = [1,2,3,4,5,6]
m = 2
n = 6
#linka = list_2_linknode(array)
reversearray = array[m-1:n]
reversearray.reverse()
array = array[0:m-1] + reversearray
linka = list_2_linknode(array)
print(printnode(linka))
用链表反转的话,代码如下:
if not pHead:
return None
last = None
p1 = pHead
while p1:
pnext = p1.next
p1.next = last
last = p1
p1 = pnext
return last
在本题中,需要反转后再链接起来:
改写如下:
def reversenode(link,m,n):
first = link
count = 0
for i in range(m-2):
link = link.next
count +=1
linkpre = link #要反转的前一个
link = link.next
linkm = link #反转的第一个,反转后的最后一个
last = None
p1 = link
while p1 and count< n-1:
nextp1 = p1.next
p1.next = last
last = p1
p1 = nextp1
count +=1
linkm.next = p1 #反转后最后一个指向后半截第一个
linkpre.next = last #要反转的前一个指向反转后第一个
return first
比较麻烦,在纸上画一下比较清晰
第三题是背包问题,需要用到动态规划,以后博客专题再讲。
总之笔试只过了一道题,第二题看错题意直接gg,第三题没时间看了...
6.5 更新
查询官网状态,嵌入式岗位进入面试了
等待后续更新...
更新,面试时间定在了6.11号,那天正好考系统辨识与自适应控制,问了下不能网面,只能拒了。截图纪念下...
总之还是感谢vivo能给我面试的机会,秋招再见!
更新,一个同学去面了,大概问的是C++,多线程,另外就是唠项目,感觉答得还行但是没进HR面..感觉这次还是挺严格的...