力扣刷题用的是核心代码模式,而部分面试中用的是ACM模式;由于ACM竞赛题目的输入数据和输出数据一般有多组(不定),并且格式多种多样,所以,如何处理题目的输入输出是对大家的一项最基本的要求。这也是困扰初学者的一大问题。
ACM模式(Algorithm Contest Mode)是指在算法竞赛中所使用的评分模式。在ACM模式下,所有参赛选手通过单个命令行交互式的方式,向评测机提交自己编写的程序。ACM模式下,评测机对每个提交的程序进行评测,返回程序的执行结果与用时信息。
什么是acm呢?白话来讲。所谓acm就是需要能直接在idea或其他编程软件上直接运行的,并且可以自由传入参数以及输出,通过代码运行的复杂度以及内容占有等进行评分。我们平时在letcood中练题时,只需要将代码的核心逻辑写出来,最后return即可,但是这样的代码是无法直接平移到编译程序中编译运行的,因为他缺乏最重要的main函数,以及输入和输出的代码,是练习时为了提高效率省略了,但在同学们笔试时,往往部分企业会叫我们使用自己的编程软件编写再复制到笔试中,那么就会出现核心代码写了,却无法运行的情况。(个人理解,欢迎指正)
以下为常见的三种类型的处理(主要为输入处理)
1.String字符串的处理
1.1单行输入
import java.util.Scanner;
Scanner sc = new Scanner (System.in);
String word1 = scanner.nextLine();
//在这里进行对字符串word1的处理
1.2多行输入
Scanner scanner = new Scanner(System.in);
System.out.print("第一个字符串为: ");
String word1 = scanner.nextLine();
System.out.print("第二个字符串为: ");
String word2 = scanner.nextLine();
// ....
System.out.print("第n个字符串为: ");
String wordn = scanner.nextLine();
1.3不定行输入
这里使用了应该boolean类型的continueInput来判断输入台是否还要输入字符串
Scanner scanner = new Scanner(System.in);
String mergedString = "";
boolean continueInput = true;
while (continueInput) {
System.out.print("Enter a word (or 'q' to quit): ");
String input = scanner.nextLine();
if (input.equals("q")) {
continueInput = false;
} else {
//此处为对字符串的处理
}
}
2.array数组的处理
Scanner scanner = new Scanner(System.in);
String[] number = scanner.nextLine().split(" ");
int [] arr = new int[number.length];
for (int i = 0; i < number.length; i++) {
arr[i] = Integer.parseInt(number[i]);
}
//后续可使用arr[]数组做数据处理
3.list 链表的处理
Scanner scanner = new Scanner(System.in);
ListNode dummy1 = new ListNode(-1);
ListNode dummy2 = new ListNode(-1);
ListNode cur1 = dummy1;
ListNode cur2 = dummy2;
String[] params = scanner.nextLine().split(" ");
for (String x : params) {
cur1.next = new ListNode(Integer.parseInt(x));
cur1 = cur1.next;
}
String[] params2 = scanner.nextLine().split(" ");
for (String x : params2) {
cur2.next = new ListNode(Integer.parseInt(x));
cur2 = cur2.next;
}
//后续可使用dummy1、dummy2进行链表的处理