字节跳动校招一面挂

面试时间选择四点,排队等到五点四十面试官才上线。

首先自我介绍,介绍了项目经历,面试官也没有提问。直接上来就是coding

第一题:给出一个非降数列,和一个数,返回数在列表中的下标+1

def find(vec,x):
    dict = {}
    for i in range(len(vec)):
        dict[vec[i]] = i
    if x in dict:
        if dict[x] == len(vec)-1:return -1
        else:return dict[x] + 1
    else:return -1

面试官说不是最优解,问我这个的时间复杂度是多少,我说O(n)

第二题:一棵树,中序遍历,转为双向链表,lchild是前驱节点,rchild是后驱节点。

不会。

第三题:两个有序链表合并。

没说合并的链表还是有序,我也没问。直接写的

while head1.next is not None:

      head1 = head1.next

head1.next = head2.next

面试官问怎么想的,我就说尾结点指向第二个链表头结点指向的结点。面试官把我挂了。

整个过程不超过15分钟。

过几天填坑

 

——————————————————————————————————————————

第一题想了一下,可以用二分查找,但是难点在于,列表中可能会有重复元素。

def search(vec,left,right,num):
    if left > right:
        return -1
    mid = (left+right)//2
    if num < vec[mid]:
        right = mid - 1
    elif num >= vec[mid]:
        left = mid + 1
    if vec[right] == num:
        if right == len(vec)-1:return -1
        else: return right + 1
    
    return search(vec,left,right,num)

 

你可能感兴趣的:(liu,keng)