如何优化此代码以节省执行时间?

时间:2017-01-17 11:10:57

标签: java

代码如下。我认为排序方法需要更多时间。 所以请在必要时修改代码。 输入的第一行包含两个以空格分隔的整数,分别为N(字符串中的字符数)和Q(查询总数)。

输入的第二行包含字符串S.

下一个Q行中的每一行都包含一个查询。查询是以下两种类型之一:

  • 1 X C - 查询类型为1,字符串中位置X(整数)的字符应替换为C(字符)。
  • 2 X-查询类型为2,如果字符串中的字符按字母顺序排列,则打印出字符串中X(整数)位置的字符。

输出:

对于类型2的每个查询,如果字符串中的字符按字母顺序排列,则打印位置X处的字符。

import java.util.*;

public class test{

    public static void main(String[] args) {
        Scanner scan=new Scanner(System.in);

        int N=scan.nextInt();
        int n=scan.nextInt();
        String S=scan.next();
        char[]chars=S.toCharArray();
        Arrays.sort(chars);

        StringBuilder sb=new StringBuilder(S);

        for(int i=0;i<n;i++){

            int b=scan.nextInt();
            if(b==1){
                int c=scan.nextInt();
                char c1=scan.next().charAt(0);
                sb.setCharAt(c-1, c1);
                String newString=sb.toString();
                chars=newString.toCharArray();
                Arrays.sort(chars);
            }

            if (b==2){

                int c=scan.nextInt();
                System.out.println(chars[c-1]);
            }

        }

1 个答案:

答案 0 :(得分:0)

我假设你想减少运行时间。您只需要保留初始文本的两个副本,目前您有 Event::with(['workedtimes' => function ($query) { $query->where('uid', Auth::user()->id ); }])->get(); StringStringBuilder。我建议你只保留其中两个:char[]原始订单由类型1查询修改,第二个char[]包含排序字符以回答类型2查询。

在每个类型1查询后对字符进行排序。这可能没有必要。当类型2查询遵循类型1查询(或首先出现)时,您只需要求助已排序的数组。否则排序就浪费了。除非你确定每个类型2总是遵循类型1,否则这将为你节省一些种类。如果两个或多个类型1彼此跟随,则排序肯定会被浪费。