代码如下。我认为排序方法需要更多时间。 所以请在必要时修改代码。 输入的第一行包含两个以空格分隔的整数,分别为N(字符串中的字符数)和Q(查询总数)。
输入的第二行包含字符串S.
下一个Q行中的每一行都包含一个查询。查询是以下两种类型之一:
输出:
对于类型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]);
}
}
答案 0 :(得分:0)
我假设你想减少运行时间。您只需要保留初始文本的两个副本,目前您有 Event::with(['workedtimes' => function ($query) {
$query->where('uid', Auth::user()->id );
}])->get();
个String
和StringBuilder
。我建议你只保留其中两个:char[]
原始订单由类型1查询修改,第二个char[]
包含排序字符以回答类型2查询。
在每个类型1查询后对字符进行排序。这可能没有必要。当类型2查询遵循类型1查询(或首先出现)时,您只需要求助已排序的数组。否则排序就浪费了。除非你确定每个类型2总是遵循类型1,否则这将为你节省一些种类。如果两个或多个类型1彼此跟随,则排序肯定会被浪费。