面试经验01-- 爬虫工程师(字节跳动)

面试过程比较简短(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 
认清现实,放弃幻想。 细节决定成败,心态放好,认真学习与工作。
原文地址:https://www.cnblogs.com/jyf2018/p/15210483.html