当前位置: 首页 > 知识库问答 >
问题:

数组旋转TLE(超过时间限制)

郑光济
2023-03-14

我真的很困惑为什么我的Java代码不起作用,它给了黑客地球上的代码僧侣TLE。这里是指向1的链接

  • 链接质疑第一个问题和尚和旋转
import java.util.Scanner;
class TestClass {
    static int[] ar=new int[100001];
    public static void main(String args[] ){
        Scanner in=new Scanner(System.in);
        byte t=in.nextByte();
        while(t-->0){
            int n=in.nextInt();
            int k=in.nextInt()%n;
                for(int i=0;i<n-k;i++)
                    ar[i]=in.nextInt();
                for(int i=0;i<k;i++)
                    System.out.print(in.nextInt()+" ");
                for(int i=0;i<n-k;i++)
                    System.out.print(ar[i]+" ");
            System.out.println();
        }
    }
}

我不知道为什么它给了TLE我想这是一个无限循环。

现场的问题是-

蒙克和旋转蒙克喜欢对数组执行不同的操作,所以作为哈克地球学校的校长,他给他的新学生米什基布置了一个任务。Mishki将被提供一个大小为N的整数数组A和一个整数K,在这里她需要将数组向正确的方向旋转K步,然后打印结果数组。由于她是新来学校的,请帮助她完成这项任务。

输入:第一行将由一个表示测试用例数量的整数T组成。对于每个测试用例:

  1. 第一行由两个整数N和K组成,N是数组中的元素数,K表示旋转的步数。
  2. 下一行由N个空格分隔的整数组成,表示数组A的元素。输出:打印所需的数组。

约束条件:

1<=T<=20
1<=N<=10^5
0<=K<=10^6
0<=A[i]<=10^6

样本输入

1

5 2

1 2 3 4 5

样本输出

4 5 1 2 3

解释

这里T是1,这意味着一个测试用例。

表示数组中元素的数目,并表示旋转的步数。

初始数组为:在第一个旋转中,5将出现在第一个位置,所有其他元素将从当前位置移动到前面的一个位置。现在,结果数组将是

在第二次旋转中,4将进入第一个位置,所有其他元素将从当前位置移动到前面的一个位置。现在,结果数组将是

时间限制:每个输入文件1.0秒内存限制:256 MB源限制:1024 KB

共有2个答案

柳镜
2023-03-14
import java.util.*;
public class temp {
    public static void main (String[] args) {
        Scanner sc = new Scanner(System.in);
        int t = sc.nextInt();
        while(t-->0){
            int n = sc.nextInt();
            int k = sc.nextInt();
            int p = 0;
            int ar[] = new int[n];
            for(int i=0;i<n;i++){
                ar[i] = sc.nextInt();
            }
            k %= n;
            for(int i=0;i<n;i++){
                p = ar[(i+(n-k))%n];
                System.out.print(p+" ");
            }
            System.out.println();
        }       
    }
}

虽然我在开始时没有使用过大尺寸的数组,但这段代码对所有测试用例都很好。

试试这个。

戚阳曜
2023-03-14

我不确定您的解决方案的正确性,但尝试使用StreamTokenizer或BufferedReader而不是Scanner。当需要读取大量数据时,扫描器太慢,可能会导致TLE。

 类似资料:
  • 假设我有这样的多维数组:

  • 问题内容: 因此,目标是将阵列中的元素正确旋转一次。举个例子; 如果, 则将成为 这是我所拥有的: 但是,这无法说明何时大于数组的长度。我读到我应该将更大的存储在另一个Array中,但是看到变量是不确定的,因此我不确定这是最好的解决方案。提前致谢。 问题答案: 在代码中添加一个模数组长度: 您还应该创建一个要复制到的新值,以免覆盖以后需要的值。

  • 问题内容: 是否可以轻松地“旋转” PHP中的数组? 像这样:1,2,3,4-> 2,3,4,1 为此有某种内置的PHP函数吗? 问题答案: 当前大多数答案都是正确的,但前提是您不关心索引: 输出: 要保留索引,您可以执行以下操作: 输出: 也许有人可以比我的四行方法更简洁地进行轮换,但这还是行得通的。

  • 预期的结果是逆时针旋转字节数组,以获得一个固定的“a”。 我试图将给定的数组转换为旋转版本,但效果不佳。我的代码在“loop()”中的位移位和计算部分有一些不正确的地方。因此,我不得不分别处理x==5和x==6。 我如何在C中以更一般的方式逆时针旋转字节数组? 代码: 输出LED:

  • 我成功地解决了Hackerrank上的一个问题,它通过了所有测试用例,但我得到了一个错误,时间限制超过。我猜如果我优化我的代码,它会起作用,但我想不出任何方法来使我的代码更有效率。 问题是:对大小为n的数组进行左旋操作会将数组的每个元素向左移动1个单位。例如,如果在数组[1,2,3,4,5]上执行两次左旋转,则该数组将变为[3,4,1,2]。 给定一个由n个整数和一个数字d组成的数组,在数组上执行

  • 我最近了解了杂耍算法如何在线性时间内旋转数组 时间复杂度如何线性???