我正在开发一个程序,需要找出给定数组中可以形成的最大链条。
例如:
假设输入为:
现在,如果我取数组索引和相应的值,我可以形成的最大链是:
索引0,值为5 -> 索引5,值为6 -> 索引6,值为2 -> 索引2,值为0。这个循环重复,所以这是我使用这个数组可以形成的最大链。
以下是我的代码:
我想出了上述逻辑,但是我发现在我的代码中我正在尝试查找多个相同类型的链。这意味着如果我打印我的列表,它会有这些值:
这里重复多次使用了
例如:
假设输入为:
Arr[0] = 5
Arr[1] = 4
Arr[2] = 0
Arr[3] = 3
Arr[4] = 1
Arr[5] = 6
Arr[6] = 2
现在,如果我取数组索引和相应的值,我可以形成的最大链是:
索引0,值为5 -> 索引5,值为6 -> 索引6,值为2 -> 索引2,值为0。这个循环重复,所以这是我使用这个数组可以形成的最大链。
以下是我的代码:
public static int getMax(int[] nums) {
int result = 0;
for (int i = 0; i < nums.length; i++) {
List<Integer> list = new ArrayList<>();
list.add(i);
int temp = i;
while (true) {
int next = nums[temp];
if (list.contains(next)) {
break;
} else {
list.add(next);
temp = next;
}
}
result = Math.max(result, list.size());
}
return result;
}
我想出了上述逻辑,但是我发现在我的代码中我正在尝试查找多个相同类型的链。这意味着如果我打印我的列表,它会有这些值:
[0, 5, 6, 2]
[1, 4]
[2, 0, 5, 6]
[3]
[4, 1]
[5, 6, 2, 0]
[6, 2, 0, 5]
这里重复多次使用了
0,5,6,2
链,有没有办法提高代码性能,避免不必要的类似循环?