我想要从索引i到j(包括两者)开始反转给定数组的一部分。例如,如果它包含:
1 2 3 4 5 6 7
反向过程后,它应如下所示:
1 6 5 4 3 2 7
在这种情况下,i = 1,j = 5。 我的方法是:
public static void sw(int[] l, int i,int j)
{
for(int z=i; z<((j-i)+1)/2;z++)
{
int y=((j-i)+1) - z - 1;
int temp = l[z];
l[z] = l[y];
l[y] = temp;
}
}
某些情况下工作不正常。
Case#1:
6 78 63 59 28 24 8 96 99
output is:
6 78 59 63 28 24 8 96 99
答案 0 :(得分:0)
您可以完全删除“z”和“y”。它们太复杂,没有必要完成任务。你只想增加'i'并递减'j'直到i <= j
不再是真的。
因此我们有:
public static void sw(int[] l, int i,int j)
{
for(; i<=j;i++, j--)
{
int temp = l[i];
l[i] = l[j];
l[j] = temp;
}
}
for循环有一个空的第一个语句,因为'i'已经被声明了。
希望这有帮助!