zoukankan      html  css  js  c++  java
  • Java OJ 快速读入 竞赛用

    背景

    Java打比赛太吃亏了吧
    人家C艹有超快的getchar()
    最不济cin的效率也比Java带的Scanner高
    还有内存占用方面
    竞赛中都不计算Java的内存占用
    因为占用太多了( 在空间上卡Java一卡一个准

    结论

    利用读入二维数组进行测试:

    用StreamTokenizer是最快的方法

    代码如下:

    public class TokenRead {
        public static int[][] bufferedRead() throws IOException {
            StreamTokenizer scanner = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
    
            scanner.nextToken();
            long initTime = System.currentTimeMillis();
            int n = (int) scanner.nval;
            int[][] all = new int[n][];
    
            for (int i = 0; i < n; i++) {
                scanner.nextToken();
                int count = (int) scanner.nval;
                all[i] = new int[count];
                for (int j = 0; j < count; j++) {
                    scanner.nextToken();
                    all[i][j] = (int) scanner.nval;
                }
            }
    
            long nowTime = System.currentTimeMillis();
            System.out.println((nowTime - initTime));
            return all;
        }
    

    大概是其他读入方法的数量级的差距

    对比算法1:

        public static int[][] bufferedRead(String input) {
            Scanner scanner = new Scanner(new BufferedInputStream(System.in));
            scanner = new Scanner(new BufferedReader(new InputStreamReader(System.in)));
    
            int n = scanner.nextInt();
            long initTime = System.currentTimeMillis();
            int[][] all = new int[n][];
            for (int i = 0; i < n; i++) {
                int num = scanner.nextInt();
                all[i] = new int[num];
                for (int j = 0; j < num; j++) {
                    int value = scanner.nextInt();
                    all[i][j] = value;
                }
            }
            long nowTime = System.currentTimeMillis();
            System.out.println((nowTime - initTime));
            return all;
        }
    

    对比算法2:

        public static int[][] lineRead(String input) {
            Scanner scanner = new Scanner(new BufferedInputStream(System.in));
    
            int n = scanner.nextInt();
            long initTime = System.currentTimeMillis();
            scanner.nextLine();
    
            int[][] all = new int[n][];
            for (int i = 0; i < n; i++) {
                String num = scanner.nextLine();
                String[] nums = num.split(" ");
                int len = Integer.parseInt(nums[0]);
                all[i] = new int[len];
                for (int j = 0; j < len; j++) {
                    all[i][j] = Integer.parseInt(nums[j + 1]);
                }
            }
    
            long nowTime = System.currentTimeMillis();
            System.out.println((nowTime - initTime));
            return all;
        }
    

    对比算法3:

        public static int[][] forceRead(String input) {
            Scanner scanner = new Scanner(System.in);
            int n = scanner.nextInt();
            long initTime = System.currentTimeMillis();
    
            int[][] all = new int[n][];
            for (int i = 0; i < n; i++) {
                int num = scanner.nextInt();
                all[i] = new int[num];
                for (int j = 0; j < num; j++) {
                    int value = scanner.nextInt();
                    all[i][j] = value;
                }
            }
            long nowTime = System.currentTimeMillis();
            System.out.println((nowTime - initTime));
            return all;
        }
    
  • 相关阅读:
    spring 09-Spring框架基于QuartZ实现调度任务
    spring 08-Spring框架Resource资源注入
    spring 07-Spring框架Resource读取不同资源
    spring 06-Spring框架基于Annotation的依赖注入配置
    html 默认跳转
    poi 设置样式
    支付宝扫码支付回调验证签名
    构造器初始化
    cxf webservice
    CSS3 border-image 属性
  • 原文地址:https://www.cnblogs.com/licsber/p/java_fast_read.html
Copyright © 2011-2022 走看看