Leetcode Hot 100:入门ACM模式
ACM模式
ACM模式是一种需要自行处理输入输出的做题模式。
1、如何处理输入输出?

1.1、固定式输入分析

1)第一行输入三个数 x, y, z
longlong x, y, z; cin >> x >> y >> z;2)前两行分别是整数 x, y
longlong x, y; cin >> x; cin >> y;// 或 cin >> x >> y; 也可以(cin 会自动跳过换行)3)第一行一个整数 n,第二行输入 n 个整数
int n; cin >> n; vector<int>arr(n);for(int i =0; i < n; i++) cin >> arr[i];1.2 不定式输入分析



while(getline(cin, line))getline 会从输入里读一整行(直到换行符 \n)。
读成功返回 true;读到文件结束 EOF 返回 false → 循环结束。
所以每循环一次,就处理一行。
stringstream ss(line);把这一整行字符串line变成一个“可像cin一样读”的流 ss。
之后就可以用ss >> num来解析行内的数字(自动按空格分隔)
while(ss >> num)ss >> num的意思是:从ss这个输入流里读取一个整数到变量num。它的行为和 cin >> num很像,只不过数据来源不是键盘/标准输入,而是stringstream ss(line) 里那一行字符串。
2、输出分析

注意末尾,保证末尾没有空格或其他字符,否则可能出错。

3、OJ常见错误

4、面试中的ACM模式考察

记得把样例写出来,面试官就看你样例的输出的。
核心代码与输入输出分离,结构要清晰。
5、万能头文件
#include <bits/stdc++.h> 是GCC(GNU 编译器套件)中一个非标准的头文件,通常被称为“万能头文件”。它包含了C++标准库中几乎所有的头文件,比如 <iostream>、<vector>、<algorithm>、<string> 等等。只要包含了这一个文件,你就可以使用大部分 C++ 标准库的功能,而无需逐个去写许多 #include 语句。
塔子哥hot100入门必刷
1、数组的读入
题目内容:
给定一个整数数组 nums,求解数组的和。
输入共两行。
第一行为一个整数n,代表数组nums的长度。
第二行为n个整数,即数组的元素。
输出数组的和。
#include<bits/stdc++.h>usingnamespace std;intsummary(const vector<int>& nums){int sum=0;for(int i=0;i<nums.size();i++){ sum+=nums[i];}return sum;}intmain(){int n; cin>>n; vector<int>nums(n);for(int i=0;i<n;i++) cin>>nums[i]; cout<<summary(nums)<<endl;return0;}2、链表的读入
给定一个整数数组nums,要求先构建一个链表,然后遍历链表并输出所有元素。

在一些涉及链表的面试题(如翻转、合并、排序链表)时,本题的基础代码可以作为模板。
#include<bits/stdc++.h>usingnamespace std;// 定义链表节点结构structListNode{int val; ListNode* next;ListNode(int x):val(x),next(nullptr){}};// 创建链表并返回头结点 ListNode*createLinkedList(const vector<int>& nums){if(nums.empty())returnnullptr; ListNode* head =newListNode(nums[0]); ListNode* cur = head;//size_t 是无符号类型,其取值范围至少为[0, SIZE_MAX],通常足够表示任何对象的大小for(size_t i =1; i < nums.size(); i++){ cur->next =newListNode(nums[i]); cur = cur->next;}return head;}// 遍历链表并输出voidprintLinkedList(ListNode* head){ ListNode* cur = head;while(cur){ cout << cur->val << endl; cur = cur->next;}}intmain(){int n; cin >> n;// 读取数组长度 vector<int>nums(n);for(int i =0; i < n; i++){ cin >> nums[i];// 读取数组元素} ListNode* head =createLinkedList(nums);// 创建链表printLinkedList(head);// 遍历链表并输出return0;}3、二叉树的读入与构建

structTreeNode{int val; TreeNode* left; TreeNode* right;TreeNode(int x):val(x),left(nullptr),right(nullptr){}};未完待续