此代码在Hackerrank上的某些大型输入上显示“由于超时而终止”错误,但在其他情况下工作正常 . 请帮我改进这段代码 .
John Watson在一个整数数组上执行一个称为右旋转的操作 . 执行一次右旋转操作后,数组从变换为 .
Watson执行此操作时间 . 为了测试Sherlock识别旋转数组中特定位置的当前元素的能力,Watson询问查询,其中每个查询由一个整数组成,您必须在旋转数组中的索引处打印元素(即,值) .
输入格式
第一行包含空格分隔的整数,,和 . 第二行包含空格分隔的整数,其中每个整数描述数组元素(where) . 每个后续行包含一个表示的整数 .
约束
输出格式
对于每个查询,在新行上打印旋转数组索引处的元素值 .
样本输入
3 2 3 1 2 3 0 1 2样品输出
2 3 1
MY CODE
import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;
public class Solution {
public static void main(String[] args) {
/* Enter your code here. Read input from STDIN. Print output to STDOUT. Your class should be named Solution. */
int n,k,q,temp=0,c=0;
Scanner sc=new Scanner(System.in);
try{
n=sc.nextInt();
k=sc.nextInt();
q=sc.nextInt();
int[] arr=new int[n];
int qrr[]=new int[q];
for(int i=0;i<n;i++)
arr[i]=sc.nextInt();
while(sc.hasNext()){
qrr[c++]=sc.nextInt();
}
for(int j=1;j<=k;j++){
temp=arr[n-1];
for(int i=n-2;i>=0;i--){
arr[i+1]=arr[i];
}
arr[0]=temp;
}
for(int i=0;i<q;i++){
System.out.println(arr[qrr[i]]);
}
}
catch(Exception ae){
System.out.println(ae.getMessage());
}
}
}
1 回答
上述函数适用于最坏情况下的O(n)复杂度 . 基本上你正在做的是为元素分配一个新的索引,使它们正确地旋转或递增一个量k,并且模数操作处理溢出 .