【发布时间】:2020-08-15 05:49:32
【问题描述】:
给定一个数组和一个数字 k,我们必须将数组旋转 k 次。
Sample Input
1 //number of of testcases
5 2 //5(array size) 2(K value)
1 2 3 4 5 /array elements
Sample output
4 5 1 2 3
这是我的代码
import java.util.*;
class TestClass {
public static void main(String args[] ) throws Exception {
// Write your code here
Scanner input=new Scanner(System.in);
int testcases=input.nextInt();
for(int i=0;i<testcases;i++)
{
int size=input.nextInt();
int rotationNo=input.nextInt();
rotateArray(size, rotationNo, input);
}
}
public static void rotateArray(int size, int rotationNo, Scanner input)
{
int[] arr=new int[size];
int[] result=new int[size];
rotationNo=rotationNo%size;
for(int i=0;i<size;i++)
{
arr[i]=input.nextInt();
}
int resultIndex=0;
int index=size-rotationNo;
int k=index,t=0,track=0;
while(true)
{
if(k<size)
{
System.out.print(arr[k++]+" ");
++track;
if(track==size)
{
break;
}
else
{
continue;
}
}
if(t<index)
{
if(t==(index-1))
{
System.out.print(arr[t++]);
}
else
{
System.out.print(arr[t++]+" ");
}
++track;
if(track==size)
{
break;
}
else
{
continue;
}
}
}
System.out.println();
}
}
这个问题是在一次编程比赛中提出的。我的所有测试用例都通过了,除了一个显示超出时间限制的测试用例。但我不明白超出时限的原因是什么。循环将始终停止任何测试用例。 我的代码的时间复杂度是 O(n)。 还有其他更好更有效的解决方案吗?
【问题讨论】:
-
"我的所有测试用例都通过了,除了一个显示超出时间限制的测试用例。" - 请包括测试用例。
-
@Turing85 测试用例在这种情况下通常是保密的。
-
TLE 并不意味着循环无法结束。这不是关于无限循环。这关乎效率。
-
测试用例被隐藏了。顺便说一句,我的代码效率是 O(n),所以它一定是关于无限循环。
-
我猜 TLE 测试用例看起来像
1\n10000 1\n1 2 3 4 5 ...。这消除了存储过多的程序。