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模板

  • 并查集模板

  • 最短路模板

  • 动态规划模板

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

相关推荐
2501_9339232527 分钟前
Spring Bean作用域揭秘:单例、原型、请求与会话的区别
java·后端·spring·java-ee
学编程就要猛44 分钟前
基于Spring AI 的智能聊天机器人
java·spring ai·chat robot
修炼室1 小时前
Java开发工程师笔试经验贴【高频知识】
java
木井巳1 小时前
【记忆化搜索】最长递增子序列
java·算法·leetcode·深度优先·剪枝·推荐算法
杨杨杨大侠1 小时前
知识库已经有了,Java 程序员还要做什么?Spring AI RAG 实战
java·openai·ai编程
伊信1 小时前
Spring AI 基础学习与应用
java·后端
夜郎king1 小时前
基于 Java + Playwright 实现网站自动访问与数据采集(以腾讯云开发者社区为例)
java·playwright·网页数据获取
Anastasiozzzz1 小时前
重新定义 Agent 基建:Redis 在现代 AI 与智能体系统中的工程实践
java·人工智能·redis·ai
careathers1 小时前
【数据结构】队列
java·数据结构
步行cgn1 小时前
Spring 通过 factory-method 实例化 Bean 详解与常见错误排查
java·后端