题解 | 【模板】序列操作
【模板】序列操作
https://www.nowcoder.com/practice/12da4185c0bb45918cfdc3072e544069
import java.util.*;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
List<Integer> string = new ArrayList<Integer>();
int q = in.nextInt();//操作的次数
in.nextLine();
for(int i = 0; i < q; i++){
String line = in.nextLine();
String[] caozuo = line.split(" ");
changelist(caozuo,string);
}
}
public static void changelist(String[] caozuo, List string){
if(caozuo[0].equals("1")){
int x = Integer.parseInt(caozuo[1]);
string.add(x);
return;
}else if(caozuo[0].equals("2")){
string.remove(string.size() - 1);
return;
}else if(caozuo[0].equals("3")){
int i = Integer.parseInt(caozuo[1]);
System.out.println(string.get(i));
return;
}else if(caozuo[0].equals("4")){
int i = Integer.parseInt(caozuo[1]);
int x = Integer.parseInt(caozuo[2]);
string.add(i+1,x);
return;
}else if(caozuo[0].equals("5")){
// 1. 按空格切分
Collections.sort(string);
return;
}else if(caozuo[0].equals("6")){
string.sort(Collections.reverseOrder());
return;
}else if(caozuo[0].equals("7")){
System.out.println(string.size());
}else if(caozuo[0].equals("8")){
for(int i = 0;i < string.size() - 1; i++){
System.out.print(string.get(i) + " ");
}
System.out.print(string.get(string.size() - 1));
System.out.println();
}
}
}
题目要求维护的是整数序列,而不是一个字符串。最合适的数据结构是 ArrayList<Integer>。这样增删查改、排序都直接有现成方法。
操作 2(删除末尾元素)、操作 3(按下标取元素)、操作 4(插入)、操作 5/6(排序)、操作 7(长度)、操作 8(输出整个序列),都可以直接用 ArrayList 实现。
Collections.sort(list);-->用的是 Collections 工具类里的静态方法。默认按照升序排序(即元素类要实现 Comparable 接口,例如 Integer)。
list.sort(Collections.reverseOrder());-->这是 List 接口自带的 default sort 方法(Java 8 引入)。接收一个 比较器 Comparator 作为参数。Collections.reverseOrder() 返回一个倒序的比较器。

