代码优化使代码对于非常大的输入合法

时间:2016-10-25 12:06:55

标签: java optimization

我有一个正在运行的代码,它正确地执行了正确的输出,但是给出了#34; Time Exceeded"某些输入案例的错误。这是在线编码论坛的一个实践问题。我用java编码并使用BufferedReader而不是Scanner,因为它更快。但是,我无法执行它。问题是向右执行数组旋转k次。此外,nk的值应按空格分隔。数组输入也应该是空格分隔的。

k->轮换次数

t->测试用例数

n->数组的大小

以下是我的代码。我应该做出哪些改变,以便它适用于大输入。我可以用C ++编写代码,但我想知道这段代码的问题。

import java.io.InputStreamReader;
import java.io.BufferedReader;
import java.io.IOException;
import java.util.Scanner;
public class Samp  {

    public static void main(String[] args)throws IOException {
        try {
            InputStreamReader is = new InputStreamReader(System.in);
            BufferedReader br = new BufferedReader(is);
            int a[], b[], c[];
            int n, k;
            byte t;
            t = Byte.parseByte(br.readLine());
            while (t != 0) {
                String s = br.readLine();
                String ss[] = s.split(" ");
                n = Integer.parseInt(ss[0]);
                k = Integer.parseInt(ss[1]);
                a = new int[n];
                b = new int[n];
                String st = br.readLine();
                String stt[] = st.split(" ");
                for (int i = 0; i < n; i++) {
                    a[i] = Integer.parseInt(stt[i]);
                }
                while (k != 0) {
                    solve(a, k);
                    k--;
                }
                for (int i = 0; i < n; i++)
                    System.out.print(a[i] + " ");
                System.out.println();
                t--;
            }

        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    static void solve(int[] a, int k) {
        for (int i = a.length - 1; i > 0; i--) {
            int t = a[i];
            a[i] = a[i - 1];
            a[i - 1] = t;
        }
    }

0 个答案:

没有答案