语言与基础
选型、语法与伪代码。
数据结构与算法概览
这一课你将能做到
- 说清楚数据结构与算法在编程中的位置和作用
- 理解在线判题系统的基本流程:提交 → 编译 → 运行 → 比对结果
- 写出第一个能 AC(Accepted)的 Java 程序
为什么要学
数据结构与算法是程序员的内功。你写的每一行业务代码——从数据库查询到缓存设计——底层都是它们在支撑。不会数据结构,遇到性能问题只能干瞪眼;不会算法,面试连第一轮都过不去。
人话:数据结构是「怎么存数据」,算法是「怎么处理数据」。就像做菜,数据结构决定你用碗、盘还是锅装食材,算法决定你是炒、煮还是蒸。
先建立图像
在线判题系统的工作流程:
你的代码 ──→ 判题服务器 ──→ 编译 ──→ 运行测试用例 ──→ 比对输出
↑ ↓
时间限制 2s 内存限制 256MB
一个最简单的 A+B 问题:
输入: 1 2
输出: 3
跟着做
步骤 1:认识判题输入输出
本站判题使用标准输入输出(stdin/stdout)。Java 中读取输入用 Scanner 或 BufferedReader,输出用 System.out.println。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
int b = sc.nextInt();
System.out.println(a + b);
}
}
步骤 2:处理多组测试数据
很多题目有多组输入,读到文件末尾为止:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNextInt()) {
int a = sc.nextInt();
int b = sc.nextInt();
System.out.println(a + b);
}
}
}
步骤 3:高性能输入输出
数据量大时(10^5 以上),必须用 BufferedReader 和 StringBuilder:
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
String line;
while ((line = br.readLine()) != null && !line.isEmpty()) {
StringTokenizer st = new StringTokenizer(line);
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
sb.append(a + b).append("\n");
}
System.out.print(sb);
}
}
BufferedReader 每次读一行,StringTokenizer 按空格分割,比 Scanner 快 5-10 倍。