下面的代码应该将数组A旋转B个位置。
例如,
A:[1 2 3 4 5 6]
B:1
输出:
[2 3 4 5 6 1]
我的代码是
(我只是一个初学者,因此代码如此复杂)
int* rotateArray(int* A, int n1, int B, int *len)
{
int *ret = (int *)malloc(n1 * sizeof(int));
*len = n1;
int i=0;
int J=0;
int t=0;
t=(i+B)%n1;
if((i+B)>=n1)
{
for(i=t;i<n1;i++)
{
ret[J]=A[i];
J++;
}
for(i=0;i<n1;i++)
{
ret[J]=A[i];
J++;
}
return ret;
}
else
{
J=0;
for (i = 0; i < n1; i++)
{
if((i+B)<n1)
{
ret[i] = A[i + B];
}
else
{
ret[i]=A[J];
J++;
}
}
return ret;
}
}
我遇到运行时错误 运行时错误。由于运行时错误,您的提交停止了。例如:被零除,数组索引超出范围,未捕获的异常您可以尝试使用自定义输入测试代码,并尝试在代码中放入调试语句。
*`./solution'中的错误:free():下一个大小无效(快速):0x00000000009640a0 *
中止
您的提交遇到以下输入的运行时错误:
A:[14,5,14,34,42,63,17,25,39,61,97,55,33,96,62,32,98,77,35]
B:56
此测试用例的预期输出为:
35 14 5 14 34 42 63 17 25 39 61 97 55 33 96 62 32 98 77
我不知道为什么! 我所有的测试用例都是正确的
答案 0 :(得分:0)
您在第二个for循环中循环太多,并且在分配的输出数组的末尾进行写操作(因为您总是在递增J)。所以改变
if((i+B)>=n1)
{
for(i=t;i<n1;i++)
{
ret[J]=A[i];
J++;
}
for(i=0;i<n1;i++)
{
ret[J]=A[i];
J++;
}
return ret;
}
成为:
if((i+B)>=n1)
{
for(i=t;i<n1;i++)
{
ret[J]=A[i];
J++;
}
for(i=0;i<t;i++) // ichanged the stop condition here from i<n1 to i<t
{
ret[J]=A[i];
J++;
}
return ret;
}
答案 1 :(得分:0)
您的代码似乎比必要的时间更长。这应该足够了:
models.TextField(name="foo", db_column="something_else")
我删除了一个参数,因为您所做的就是将其分配给另一个参数的值。