Java算法题常见的20种输入模板(ACM / LeetCode 通用)

在刷算法题时,很多人一开始都会被 输入输出格式 卡住。实际上,大部分平台(如 LeetCode、Codeforces、AtCoder、洛谷、ACM竞赛)的输入格式都非常固定。

本文整理了 20种最常见的Java输入模板 ,基本覆盖算法题 90%+ 的输入格式,可以直接复制使用。


一、算法题常用输入方式

Java常见有两种输入方式:

1. Scanner(简单但慢)

复制代码
Scanner sc = new Scanner(System.in);

优点:

  • 写法简单

  • 适合初学者

缺点:

  • 数据量大时会 超时

2. BufferedReader(竞赛推荐)

复制代码
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

优点:

  • 读取速度快

  • 适合ACM / 大数据输入


下面进入 20种经典输入模板


二、20种算法题输入模板(Java)


1 输入一个整数

输入

复制代码
5

代码

复制代码
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();

2 输入两个整数

输入

复制代码
3 7

代码

复制代码
Scanner sc = new Scanner(System.in);

int a = sc.nextInt();
int b = sc.nextInt();

3 一行多个整数

输入

复制代码
1 2 3 4 5

代码

复制代码
Scanner sc = new Scanner(System.in);

int[] arr = new int[5];

for(int i = 0; i < 5; i++){
    arr[i] = sc.nextInt();
}

4 n + 数组

输入

复制代码
5
1 2 3 4 5

代码

复制代码
Scanner sc = new Scanner(System.in);

int n = sc.nextInt();
int[] arr = new int[n];

for(int i = 0; i < n; i++){
    arr[i] = sc.nextInt();
}

5 n行数组

输入

复制代码
5
1
2
3
4
5

代码

复制代码
Scanner sc = new Scanner(System.in);

int n = sc.nextInt();
int[] arr = new int[n];

for(int i = 0; i < n; i++){
    arr[i] = sc.nextInt();
}

6 二维矩阵

输入

复制代码
3 3
1 2 3
4 5 6
7 8 9

代码

复制代码
Scanner sc = new Scanner(System.in);

int n = sc.nextInt();
int m = sc.nextInt();

int[][] matrix = new int[n][m];

for(int i = 0; i < n; i++){
    for(int j = 0; j < m; j++){
        matrix[i][j] = sc.nextInt();
    }
}

7 字符矩阵

输入

复制代码
3 3
abc
def
ghi

代码

复制代码
Scanner sc = new Scanner(System.in);

int n = sc.nextInt();
int m = sc.nextInt();

char[][] grid = new char[n][m];

for(int i = 0; i < n; i++){
    String s = sc.next();
    grid[i] = s.toCharArray();
}

8 输入字符串

输入

复制代码
hello

代码

复制代码
Scanner sc = new Scanner(System.in);

String s = sc.next();

9 输入整行字符串

输入

复制代码
hello world

代码

复制代码
Scanner sc = new Scanner(System.in);

String line = sc.nextLine();

注意:

如果前面用了 nextInt(),需要先执行一次

复制代码
sc.nextLine();

10 多组测试数据

输入

复制代码
3
5
10
20

代码

复制代码
Scanner sc = new Scanner(System.in);

int t = sc.nextInt();

for(int i = 0; i < t; i++){
    int n = sc.nextInt();
}

11 读取到EOF(ACM经典)

输入

复制代码
1 2
3 4
5 6

代码

复制代码
Scanner sc = new Scanner(System.in);

while(sc.hasNext()){
    int a = sc.nextInt();
    int b = sc.nextInt();
}

12 图输入(边)

输入

复制代码
5 4
1 2
1 3
2 4
3 5

代码

复制代码
Scanner sc = new Scanner(System.in);

int n = sc.nextInt();
int m = sc.nextInt();

for(int i = 0; i < m; i++){
    int u = sc.nextInt();
    int v = sc.nextInt();
}

13 带权图

输入

复制代码
4 4
1 2 5
1 3 2
2 4 3
3 4 7

代码

复制代码
Scanner sc = new Scanner(System.in);

int n = sc.nextInt();
int m = sc.nextInt();

for(int i = 0; i < m; i++){
    int u = sc.nextInt();
    int v = sc.nextInt();
    int w = sc.nextInt();
}

14 邻接表图

复制代码
Scanner sc = new Scanner(System.in);

int n = sc.nextInt();
int m = sc.nextInt();

List<Integer>[] graph = new ArrayList[n + 1];

for(int i = 1; i <= n; i++){
    graph[i] = new ArrayList<>();
}

for(int i = 0; i < m; i++){
    int u = sc.nextInt();
    int v = sc.nextInt();

    graph[u].add(v);
    graph[v].add(u);
}

15 输入 double

输入

复制代码
3.14

代码

复制代码
Scanner sc = new Scanner(System.in);

double x = sc.nextDouble();

16 输入 long

输入

复制代码
10000000000

代码

复制代码
Scanner sc = new Scanner(System.in);

long x = sc.nextLong();

17 字符串数组

输入

复制代码
3
apple
banana
cat

代码

复制代码
Scanner sc = new Scanner(System.in);

int n = sc.nextInt();

String[] arr = new String[n];

for(int i = 0; i < n; i++){
    arr[i] = sc.next();
}

18 二进制字符串

输入

复制代码
1010101

代码

复制代码
Scanner sc = new Scanner(System.in);

String s = sc.next();

19 逗号分隔输入

输入

复制代码
1,2,3,4

代码

复制代码
Scanner sc = new Scanner(System.in);

String line = sc.next();

String[] parts = line.split(",");

int[] arr = new int[parts.length];

for(int i = 0; i < parts.length; i++){
    arr[i] = Integer.parseInt(parts[i]);
}

20 高性能输入(竞赛推荐)

复制代码
import java.io.*;
import java.util.*;

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

StringTokenizer st = new StringTokenizer(br.readLine());

int n = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(st.nextToken());

读取数组

复制代码
st = new StringTokenizer(br.readLine());

int[] arr = new int[n];

for(int i = 0; i < n; i++){
    arr[i] = Integer.parseInt(st.nextToken());
}

三、推荐的Java算法竞赛模板

复制代码
import java.io.*;
import java.util.*;

public class Main {

    public static void main(String[] args) throws Exception {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st;

        st = new StringTokenizer(br.readLine());

        int n = Integer.parseInt(st.nextToken());
        int m = Integer.parseInt(st.nextToken());

    }
}

四、总结

算法题输入格式其实 高度固定,核心就几类:

  1. 单个整数

  2. 一行多个整数

  3. 数组

  4. 矩阵

  5. 多组测试

  6. 图结构

  7. 字符串

  8. EOF输入

只要掌握这些模板,基本 不会再被输入格式卡住


如果你在刷算法题,建议再掌握:

  • Java算法竞赛万能模板

  • BFS / DFS模板

  • 并查集模板

  • 最短路模板

  • 动态规划模板

这些是算法题中最常出现的核心结构。

相关推荐
周末也要写八哥15 小时前
多进程和多线程的特点和区别
java·开发语言·jvm
惜茶16 小时前
vue+SpringBoot(前后端交互)
java·vue.js·spring boot
杰克尼16 小时前
springCloud_day07(MQ高级)
java·spring·spring cloud
NHuan^_^18 小时前
SpringBoot3 整合 SpringAI 实现ai助手(记忆)
java·人工智能·spring boot
Mr_Xuhhh18 小时前
从ArrayList到LinkedList:理解链表,掌握Java集合的另一种选择
java·数据结构·链表
错把套路当深情18 小时前
Java 全方向开发技术栈指南
java·开发语言
han_hanker18 小时前
springboot 一个请求的顺序解释
java·spring boot·后端
MaCa .BaKa18 小时前
44-校园二手交易系统(小程序)
java·spring boot·mysql·小程序·maven·intellij-idea·mybatis
希望永不加班19 小时前
SpringBoot 静态资源访问(图片/JS/CSS)配置详解
java·javascript·css·spring boot·后端
oh LAN19 小时前
RuoYi-Vue-master:Spring Boot 4.x (JDK 17+) (环境搭建)
java·vue.js·spring boot