【发布时间】:2021-06-21 16:02:33
【问题描述】:
在针对编码挑战练习编程时,我遇到了这个问题,我被困住了。你有两个数组:
int[] fromArray
int[] toArray
它们保存“节点”的值(来自和到节点)。索引是这样相关的 fromArray[1] -> toArray[1], fromArray[2] -> toArray[2], .... 它有点像链表。因此,例如在索引 0 上的 fromArray 中,您有值 1,然后在 toArray 中的索引 0 上,您有 4。然后,例如,在 fromArray 值 4 中的索引 2 上,以及 toArray 值 9 中的索引 2 上。这意味着值 1 与 4 相连,4 与 9 相连。
我需要找到最后一个节点(没有连接节点的节点)。如果没有,那么它是循环的,我需要在它变成循环之前打印最后一个节点。
这是标准示例,结果应该是 8:
int[] fromArray = new int[] {1, 4, 6, 2};
int[] toArray = new int[] {4, 6, 8, 5};
作为特殊情况,我们有循环列表,例如
int[] fromArray = new int[] {1, 4, 6, 2};
int[] toArray = new int[] {4, 6, 1, 5};
结果应该是 6(即连接 1 到 1 之前的最后一个节点(使这个列表循环)..
这是我最接近的尝试,但我仍然认为我没有解决这个问题的正确途径。我认为我可以通过找出哪个元素在 toArray 中但不在 fromArray 中来解决这个问题,但这不是正确的解决方案:
public static int findLastNode(int[] fromArray, int[] toArray){
int lastNode = -1;
boolean found = false;
int index = -1;
for (int i = 0; i < fromArray.length; i++){
for (int j = 0; j < fromArray.length; j++){
if (toArray[i] == fromArray[j]){
found = true;
}
}
if (found){
found = false;
}
else {
lastNode = toArray[i];
return lastNode;
}
}
for (int i = 0; i < toArray.length; i++){
for (int j = i+1; j < toArray.length; j++){
if (toArray[i] == toArray[j]){
lastNode = toArray[i];
}
}
}
return lastNode;
}
【问题讨论】:
-
映射模式是否改变?因为有点不清楚模式是什么..在第一种情况下你有
1 -> 4和4 -> 9。似乎用 3 和 5 递增(所以,下一个可以用 7).. 但在另一个例子中,你说,结果应该是8.. 我迷路了。你确定你有正确的任务表述吗? -
你称之为特殊圆形案例的案例实际上包含圆形和非圆形图。 1 -> 4 -> 6 -> 1 是圆形的。 2 -> 5 是非圆形的。那么5是正确的答案吗?当有多个图表时,是否有规则报告哪个图表?
-
@GiorgiTsiklauri 在递增时没有特定的模式
-
@OleV.V.它必须从数组的第一个元素开始。
-
如果图是2 -> 3 -> 7 -> 3,应该返回7吗?例如,数组可以是
{ 2, 3, 7 }和{ 3, 7, 3 }。在这种情况下,循环不会回到我们开始的地方。
标签: java arrays algorithm loops