蓝桥杯 算法提高 盾神与条状项链 java

Adv193 算法提高 盾神与条状项链

题目如下:
image-20200731150919154

这题直接用LinkedList会超时,把Scanner换成输入挂才800ms过,所以可以不用LinkedList,用ArrayList也ok

package adv;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.List;
import java.util.StringTokenizer;

/**
 * @Description: 算法提高 盾神与条状项链
 * @ClassName: Adv193
 * @author: fan.yang
 * @date: 2020/07/31 14:12
 */
public class Adv193 {

    //题目有提示链表的。理所应当想到了LinkedList,但这道题对于链表不友好(只提供值,不提供序号),不想点办法会超时
    // 这道题其实也没必要LinkedList,ArrayList也可以完成,而且更快
    public static void main(String[] args) throws Exception{
        InputReader inputReader = new InputReader(System.in);
        List<Integer> list = new LinkedList<>();
        int n = inputReader.nextInt();
        int m = inputReader.nextInt();
        for(int i = 0;i < n;i++){
            list.add(inputReader.nextInt());
        }
        while(m-- > 0){
            switch (inputReader.next()){
                case "ADD": //按序号增加是快的,但题目只是提供了值,所以找到这个值所在的序号还是很慢
                            list.add(list.indexOf(inputReader.nextInt()), inputReader.nextInt());
                            break;
                case "DEL": //链表删除快在按序号的删除,按值删除还需要从头开始找到那个值,这个过程很慢
                            list.remove(Integer.valueOf(inputReader.nextInt()));
            }
        }
        System.out.println(list.size());
        list.stream().forEach(e -> System.out.print(e + " "));
    }

}

//java输入挂 替代Scanner
class InputReader {
    private BufferedReader reader;

    private StringTokenizer tokenizer;

    InputReader(InputStream in) {
        reader = new BufferedReader(new InputStreamReader(in));
        tokenizer = new StringTokenizer("");
    }

    public String next() throws IOException {
        while (!tokenizer.hasMoreTokens()) {
            tokenizer = new StringTokenizer(reader.readLine());
        }
        return tokenizer.nextToken();
    }

    public Integer nextInt() throws IOException {
        return Integer.parseInt(next());
    }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值