最近我遇到了一个问题,我必须对它进行编码,但却无法有效地完成。所以我会尽量用最好的方式来解释这个问题,它是这样的。
有不同的人属于不同的社区。例如,1属于C1, 2属于C2, 3属于C3。我们可以执行两个操作,查询和连接。查询返回属于该人员所属社区的总人数。Join用于将两个人的社区组合成一个社区。我们将人数和要执行的操作数作为输入,我们需要将结果输出到标准输出。
Example Case: (Q -> Query and J -> Join)
3 // No. of People
6 // No. of Operations
Q 1 // Prints 1
J 1,2 // Joins communities of 1 and 2
Q 1 // Prints 2
J 2,3 // Joins communities of 1 and 2
Q 3 // Prints 3
Q 1 // Prints 3
所以从本质上讲,这就像人们最初属于单独的泡沫,在加入时,我们将两个人的泡沫连接起来,形成一个包含两个人的更大的泡沫。有不同的方法来解决这个问题。使用Java的ArrayList方法非常简单。我试着用数组来解它。我的方法是最初为每个人形成一个数组,当我们加入两个社区时,相应的数组添加了如下所述的人员:
Arr1 : 1 // Array for Person 1 ; Size 1
Arr2 : 2 // Array for Person 2 ; Size 1
J 1,2 results in,
Arr1 : 1,2 // Size 2
Arr2 : 2,1 // Size 2
但是我被告知这不是一个有效的方法,一个有效的方法是使用链表。我不能用链表来解它。所以我想听听你们对这个方法的一些看法,我如何准确地利用链表来跟踪连接操作?
很抱歉写了这么长时间,提前感谢:)
p。S:我不确定标题是否合适,如果不合适,请建议合适的标题
我不知道为什么有人觉得在这种情况下链表会比数组更好,但是加入社区就像将一个社区的所有成员添加到另一个社区一样简单,并将所有指向现在为空的社区的指针更改为指向包含所有成员的节点。查询应该足够简单,不用多说。