面试过程比较简短(30min)
主要是询问基础技能
爬取数据的方法,封禁ip,账号的处理等
接下来是询问项目经历,也会在其中穿插一些基础的知识
最后一部分就是做一道算法题,不过我也不清楚这个职位为什么要算法题。
算法题算是中等水平的
一个链表的部分反转
示例 1:
输入:head = [1,2,3,4,5], left = 2, right = 4 输出:[1,4,3,2,5]
示例 2:
输入:head = [5], left = 1, right = 1 输出:[5]
这个在leetcode上有原题可以看一下。
题解 python版
1 class Solution: 2 def reverseBetween(self, head: ListNode, left: int, right: int) -> ListNode: 3 def reverse_linked_list(head: ListNode): 4 # 也可以使用递归反转一个链表 5 pre = None 6 cur = head 7 while cur: 8 next = cur.next 9 cur.next = pre 10 pre = cur 11 cur = next 12 13 # 因为头节点有可能发生变化,使用虚拟头节点可以避免复杂的分类讨论 14 dummy_node = ListNode(-1) 15 dummy_node.next = head 16 pre = dummy_node 17 # 第 1 步:从虚拟头节点走 left - 1 步,来到 left 节点的前一个节点 18 # 建议写在 for 循环里,语义清晰 19 for _ in range(left - 1): 20 pre = pre.next 21 22 # 第 2 步:从 pre 再走 right - left + 1 步,来到 right 节点 23 right_node = pre 24 for _ in range(right - left + 1): 25 right_node = right_node.next 26 # 第 3 步:切断出一个子链表(截取链表) 27 left_node = pre.next 28 curr = right_node.next 29 30 # 注意:切断链接 31 pre.next = None 32 right_node.next = None 33 34 # 第 4 步:同第 206 题,反转链表的子区间 35 reverse_linked_list(left_node) 36 # 第 5 步:接回到原来的链表中 37 pre.next = right_node 38 left_node.next = curr 39 return dummy_node.next 40