【发布时间】:2021-09-18 21:31:46
【问题描述】:
我已编写此代码以将数组旋转 k 次。在此,当我添加 i=0 时,它显示“ArrayOutOfBounds”异常,当我将 i 的值更改为 1 时,它显示错误输出。为什么显示此异常?有什么办法可以纠正这个代码吗?
public void rotate(int[] nums, int k)
{ int j=0, temp=0;
for(j=0;j<k;j++)
{
for(int i=0;i<nums.length;i++)
{
temp=nums[i-1];
nums[i-1]=nums[i];
nums[i]=temp;
}
}
}
}
【问题讨论】:
-
对于
i=0,nums[i-1]变为nums[-1]。 -
如果 i 为 0,您将尝试获取 -1 的索引,这将引发
ArrayOutOfBounds异常。如果 i 从 1 开始,那么你不是在处理第一个数字。 -
@DavidLee,我有什么可以改变的来避免这个错误并在这个程序中得到正确的输出吗?
-
为什么每次swap都需要迭代k次?你可以直接做k-shift,算法变成O(n)而不是O(n*k)。
标签: java arrays for-loop exception