白白白小白 2016-03-07 02:36 采纳率: 100%
浏览 1303

【JAVA算法】凑字数凑字数啦

题目是这样的

 第一行两个数,分别为n,m。
  第二行n个数,表示盾神一开始的项链。第i个数表示第i颗珠子的颜色。
  接下来m行,为以下形式之一:
  ADD P Q:表示在颜色为P的珠子前面加上一个颜色为Q的珠子。
  DEL P:表示把颜色为P的珠子去掉,如果它不在端点处,则需要把它旁边的两颗珠子连起来。例如某时刻项链状态为1 4 5 8,则执行DEL 4会变成1 5 8,执行DEL 1会变成4 5 8。
  输入保证在每次操作之前,项链有颜色为P的珠子,且任意时刻珠子颜色互不相同。
输出格式
  第一行为一个数len,为做完所有操作后,项链的长度。
  第二行len个数,表示此时项链的状态。第i个数表示第i颗珠子的颜色。
样例输入
10 5
1 2 3 4 5 6 7 8 9 10
DEL 5
ADD 7 5
DEL 10
ADD 4 20
ADD 20 12
样例输出
11

1 2 3 12 20 4 6 5 7 8 9

-------------------------代码-------------------------
public static void main(String[] args) {

ArrayList list = new ArrayList();
Scanner scan = new Scanner(System.in);
int n = scan.nextInt();
int m = scan.nextInt();
for (int i = 0; i < n; i++) {
list.add(scan.nextInt());
}
for (int i = 0; i < m; i++) {
String s = scan.next();
if (s.equals("ADD")) {
int a = scan.nextInt();
int b = scan.nextInt();
list.add(list.indexOf(a),b);
}
else{
int a = scan.nextInt();
int b = list.indexOf(a);
list.remove(b);
}
}
System.out.println(list.size());
for (int i = 0; i < list.size(); i++) {
System.out.print(list.get(i)+" ");
}

}

用JAVA 很好写 但是很多数据之后会运行超时或者根本运行不出来
求问大神 有没有简单的办法

  • 写回答

3条回答

  • u52983610 2016-03-07 03:02
    关注

    我觉得你可以加个map试试,储存颜色P对应的珠子的位置,比如一开始1,2,。。,20,1就对应1 ,2就对应2.。。。然后加入珠子就update这个颜色的珠子的位置,这样一是节省add里indexof的时间,二是可以用removeat代替remove

    评论

报告相同问题?

悬赏问题

  • ¥15 扩散模型sd.webui使用时报错“Nonetype”
  • ¥15 stm32流水灯+呼吸灯+外部中断按键
  • ¥15 将二维数组,按照假设的规定,如0/1/0 == "4",把对应列位置写成一个字符并打印输出该字符
  • ¥15 NX MCD仿真与博途通讯不了啥情况
  • ¥15 win11家庭中文版安装docker遇到Hyper-V启用失败解决办法整理
  • ¥15 gradio的web端页面格式不对的问题
  • ¥15 求大家看看Nonce如何配置
  • ¥15 Matlab怎么求解含参的二重积分?
  • ¥15 苹果手机突然连不上wifi了?
  • ¥15 cgictest.cgi文件无法访问