架构师训练营 1 期 - 第八周作业(vaik)

用户头像
行之
关注
发布于: 2020 年 11 月 16 日
架构师训练营 1 期 - 第八周作业(vaik)

第一题

有两个单向链表(链表长度分别为 m,n),这两个单向链表有可能在某个元素合并,也可能不合并,如下图所示的这样。现在给定两个链表的头指针,在不修改链表的情况下,如何快速地判断这两个链表是否合并?如果合并,找到合并的元素,也就是图中的 x 元素。

请用代码(或伪代码)描述算法,并给出时间复杂度。



//假设已知两单向链表的头结点Node nodeA nodeB ,结果为NULL表示不能合并
public static Node findFirstLappedNode(Node nodeA,Node nodeB){
//分别取两个链表长度
int lenA=len(nodeA);
int lebB=len(nodeB);
//取长度差
int diff= (lenA-lenB)>0?lenA-lenB:lenB-lenA;
//找出定义长链表和短链表
Node longNode=(lenA-lenB)?nodeA:nodeB;
Node shortNode=lenA-lenB)?nodeB:nodeA;
//移动长链表的节点至长度与短链表相同的位置
int i=0;
while(i<diff){
i++;
longNode=longNode.next;
}
//遍历比较,找到就返回
while(longNode!=null && shortNode!=null){
//比较两个节点是否相等(值相等,并且next节点也相等)
if(longNode==shortNode) return longNode;
longNode = longNode.next;
shortNode = shortNode.next
}
return null
}
//获取链表长度
public static int len(Node node){
int len = 0;
while(node!=null){
len++;
node=node.next;
}
}



算法时间复杂度为O(m+n)

第二题

请画出 DataNode 服务器节点宕机的时候,HDFS 的处理过程时序图。





用户头像

行之

关注

还未添加个人签名 2018.09.18 加入

还未添加个人简介

评论

发布
暂无评论
架构师训练营 1 期 - 第八周作业(vaik)