A "block" is defined as a group of nodes on the list with references directed at them and adjacent to each other.
For example
[node #0] -><-[node#1] -><-[node#2] -><-[node#3]
node[] nodes = {ref_to_node#0, ref_to_node#2, ref_to_node#3};
Is two blocks because the first block is at node #0.
Node #1 has no incomming reference. Node #2 and Node #3 have references are are adjacent so it's just one block.
Implement using JAVA: Hint: You can try using a HashMap.
Thanks.
给定一个双向链表和一个数组中节点的引用。有多少在链表中多少个block?
一个block被定义为链表中的一系列相邻节点的引用。
例如:
[node #0] -><-[node#1] -><-[node#2] -><-[node#3]
node[] nodes = {ref_to_node#0, ref_to_node#2, ref_to_node#3};
上面的数组有两个block,第一个block在 node #0.
Node #1没有接下来的引用。 Node #2 and Node #3有相邻的引用,所以算一个block。
遍历链表将<引用,位置>插入hash表中,遍历数组,根据hash表,查找相应引用的位置A,结合上一个引用的位置B判断,A和B是否相邻,如果不相邻block++(相邻可以递增相邻和递减相邻)A-B==1或者-1,设置一个值IN_OR_DE表示之前的是递增的相邻还是递减的相邻。根据这个值判断是否增加block
初始时IN_OR_DE为0
如果IN_OR_DE为1 表示前面有递增似的相邻,如果此时的引用的之前的引用为递减似的相邻,则将IN_OR_DE置为0 block++
266

被折叠的 条评论
为什么被折叠?



