------Acwing算法笔试面试辅导课 ------
文章平均质量分 57
主要记录刷Acwing算法笔试面试辅导课的题目
奋斗吧!骚年!
一名爱健身的软件工程本科生
展开
-
第四讲:圆桌座位
因为旋转过后相等也视为同一种方案,所以我们固定第一个为1。如果两个方案只有旋转角度不同,则我们将其视为一种方案。现在要给他们安排座位,要求所有相邻的人不能是朋友。最后我们使用DFS进行搜索即可,记得回溯一下。首先看到N的范围很小,所以一般会使用暴力搜索。N个人围坐一圈,有M对朋友关系。第i对朋友关系是指,编号是a。接下来M行,每行包含一对a。第一行包含两个整数N,M。输出一个数,表示总方案数。...原创 2022-07-16 17:46:48 · 140 阅读 · 0 评论 -
第四讲:最长上升子串
给出一个长度为n的由正整数构成的序列,你需要从中删除一个正整数,很显然你有很多种删除方式,你需要对删除这个正整数以后的序列求其最长上升子串,请问在所有删除方案中,最长的上升子串长度是多少。假设删除i点,如果i点前面的最长上升子串的最大值小于右边最长上升子串的最小值,则就可以将它们相加。所以根据这个方法我们可以先预处理出以i为结束的最大上升子串的所有值,和以i为开始的最大上升子串的所有值。,则称这连续的若干个整数构成的子串为上升子串,在所有的上升子串中,长度最长的称为最长上升子串。...原创 2022-07-15 17:50:43 · 407 阅读 · 0 评论 -
第三讲:spfa求最短路
请你求出1号点到n号点的最短距离,如果无法从1号点走到n号点,则输出impossible。接下来m行每行包含三个整数x,y,z,表示存在一条从点x到点y的有向边,边长为z。给定一个n个点m条边的有向图,图中可能存在重边和自环,边权可能为负数。输出一个整数,表示1号点到n号点的最短距离。如果路径不存在,则输出impossible。图中涉及边长绝对值均不超过10000。第一行包含整数n和m。数据保证不存在负权回路。...原创 2022-07-15 16:57:41 · 52 阅读 · 0 评论 -
第三讲:翻转单词顺序
例如输入字符串"Iamastudent.“,则输出"student.aamI”。我们可以很容易将整个字符串进行翻转,当翻转过后,我们再对每个单词进行翻转就可以得到结果。输入一个英文句子,单词之间用一个空格隔开,且句首和句尾没有多余空格。遍历一遍数组,如果找到一个单词就是用前插法插入结果数组,比较麻烦。开辟一个额外空间(时间O(n),空间O(n))翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。两次翻转(时间O(n),空间O(1))...原创 2022-07-15 11:50:57 · 459 阅读 · 0 评论 -
第三讲:田忌赛马
其实胜利的方法非常简单,他用下马对战国王的上马,上马对战国王的中马,中马对战国王的下马,这样虽然第一回合输了,但是后两回合都胜了,最终两胜一负,取得了比赛胜利。如果田忌最大的马等于国王最大的马,那么我们就让田忌最小的马对国王最大的马,(根据贪心来的,因为这样会得到最优解)在一侧画田忌的马,在另一侧画国王的马,只要田忌的一匹马能够击败国王的一匹马,我们就在这两匹马之间画一条边。如果田忌最大的马小于国王最大的马,那么我们就让田忌最小的马对国王最大的马。如果田忌的马等于国王的马,那么我们就看田忌和国王最大的马。.原创 2022-07-14 23:52:00 · 745 阅读 · 0 评论 -
第三讲:最短距离
题目: AcWing 1488. 最短距离 有 N 个村庄,编号 1 到 N。村庄之间有 M 条无向道路,第 i 条道路连接村庄 ai 和村庄 bi,长度是 ci。所有村庄都是连通的。共有 K 个村庄有商店,第 j 个有商店的村庄编号是 xj。然后给出 Q 个询问,第 k 个询问给出一个村庄的编号 yk,问该村庄距离最近的商店有多远?输入格式第一行包含两个整数 N,M。接下来 M 行,每行包含三个整数 ai,bi,ci,表示第 i 条道路连接村庄 ai 和村庄 bi,长度是 ci。再一行包含整数 K。接原创 2022-07-13 17:07:37 · 366 阅读 · 0 评论 -
第三讲:取硬币
题目: AcWing 1487. 取硬币现在有 n1+n2 种面值的硬币,其中前 n1 种为普通币,可以取任意枚,后 n2 种为纪念币,每种最多只能取 1 枚,每种硬币有一个面值,问能用多少种方法拼出 m 的面值?输入格式第一行包含三个整数 n1,n2,m,分别表示普通币种类数,纪念币种类数和目标面值;第二行 n1 个整数,第 i 种普通币的面值 a[i]。保证 a[i] 为严格升序;第三行 n2 个整数,第 i 种纪念币的面试 b[i]。保证 b[i] 为严格升序。输出格式共一行,包含一个整数 x,原创 2022-07-13 16:23:01 · 92 阅读 · 0 评论 -
第三讲:股票买卖 III
题目: AcWing 1056. 股票买卖 III给定一个长度为 N 的数组,数组中的第 i 个数字表示一个给定股票在第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你最多可以完成两笔交易。注意: 你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。输入格式第一行包含整数 N,表示数组长度。第二行包含 N 个不大于 109 的正整数,表示完整的数组。输出格式输出一个整数,表示最大利润。数据范围1≤N≤105输入样例1:输出样例1:输入样例2:输出样例2:输入样例3:输出样例3:样原创 2022-07-13 15:36:53 · 245 阅读 · 0 评论 -
第二讲:矩阵距离
题目: AcWing 173. 矩阵距离给定一个 N 行 M 列的 01 矩阵 A,A[i][j] 与 A[k][l] 之间的曼哈顿距离定义为:输出一个 N 行 M 列的整数矩阵 B,其中:输入格式第一行两个整数 N,M。接下来一个 N 行 M 列的 01 矩阵,数字之间没有空格。输出格式一个 N 行 M 列的矩阵 B,相邻两个整数之间用一个空格隔开。数据范围1≤N,M≤1000输入样例:输出样例:题目分析:这是一个多源搜索的问题,但是我们可以简化为普通的广度优先搜索。根据示例我们可以知道,点原创 2022-07-12 23:39:40 · 832 阅读 · 0 评论 -
第二讲:差分
题目: AcWing 797. 差分输入一个长度为 n 的整数序列。接下来输入 m 个操作,每个操作包含三个整数 l,r,c,表示将序列中 [l,r] 之间的每个数加上 c。请你输出进行完所有操作后的序列。输入格式第一行包含两个整数 n 和 m。第二行包含 n 个整数,表示整数序列。接下来 m 行,每行包含三个整数 l,r,c,表示一个操作。输出格式共一行,包含 n 个整数,表示最终序列。数据范围1≤n,m≤100000,1≤l≤r≤n,−1000≤c≤1000,−1000≤整数序列中元素的值≤原创 2022-07-12 16:47:42 · 75 阅读 · 0 评论 -
第二讲:招聘
题目: AcWing 1455. 招聘 某公司招聘,有 n 个人入围,HR在黑板上依次写下 m 个正整数 A1,A2,…Am,然后这 n 个人围成一个圈,并按照顺时针顺序为他们编号 0,1,2,…n−1。录取规则是:第一轮从 0 号的人开始,取用黑板上的第 1 个数字,也就是 A1。黑板上的数字按次序循环使用,即如果某轮用了第 k 个,如果 k...原创 2022-07-12 16:29:57 · 82 阅读 · 0 评论 -
第二讲:异或和是质数的子集数
题目: AcWing 1454. 异或和是质数的子集数给出 n 个互不相同的正整数。问存在多少个子集,使得子集中所有数的异或和是质数。由于答案可能很大,请你输出对 109+7 取模后的结果。输入格式第一行包含整数 n。第二行包含 n 个正整数。输出格式输出一个整数,表示满足条件的子集数量对 109+7 取模后的结果。数据范围1≤n≤5000,1≤ 给定正整数 ≤5000。输入样例:输出样例:题目分析:首先因为范围是5000,所以我们可以知道最大的异或和就是213-1=8192(就是每位二进制取1原创 2022-07-12 15:43:41 · 154 阅读 · 0 评论 -
第二讲:移掉K位数字
题目: AcWing 1453. 移掉K位数字给定一个以字符串表示的非负整数 num,移除这个数中的 k 位数字,使得剩下的数字最小。注意:空字符串被视为0。如果结果中包含前导零,则需要将前导零删除,最后删除的前导零不用包含在移除的 k 个数字中。输入格式第一行输入一个字符串,用来表示非负整数 num。第二行输入一个整数,表示 k。输出格式输出一个字符串,表示移除 k 位数字后所能得到的最小数字。数据范围0≤k≤ 字符串长度 ≤100000,num 中不包含任何前导 0。输入样例1:输出样例1原创 2022-07-12 10:31:52 · 321 阅读 · 0 评论 -
第二讲:反转链表
题目:AcWing 35. 反转链表定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点。思考题:链表长度 [0,30]。样例方法一: 迭代版本1.使用 指针pre和next分别保存head的前节点和后节点2.将head当前节点的next指向pre节点,将head指向next后节点3.循环返回pre节点即可(因为最后有空节点)方法二: 递归版本因为先会递归到最后节点,然后慢慢返回假设在3节点时,会返回5->4->NULL1.当前节点的next节点是指向末尾节点2.只需要原创 2022-07-11 17:52:29 · 223 阅读 · 0 评论 -
第一讲:链表中环的入口结点
题目: 链表中环的入口结点给定一个链表,若其中包含环,则输出环的入口节点。若其中不包含环,则输出null。数据范围节点 val 值取值范围 [1,1000]。链表长度 [0,500]。样例题目解析:方法一:哈希表我们可以使用unordered_set,来保存节点指针,如果发现有相同的指针(set的大小不变),则表示是入口节点方法二:快慢指针原理:快指针每次走两步,慢指针每次走一步,如果有环则一定会相遇如图,假设慢指针从a走到b最后与快指针相遇于c,如果慢指针返回到b点,则快指针会返回到d点(原创 2022-07-07 15:34:25 · 256 阅读 · 0 评论 -
第一讲:包含min函数的栈
题目: AcWing 41. 包含min函数的栈设计一个支持push,pop,top等操作并且可以在O(1)时间内检索出最小元素的堆栈。push(x)–将元素x插入栈中pop()–移除栈顶元素top()–得到栈顶元素getMin()–得到栈中最小元素数据范围操作命令总数 [0,100]。样例题目分析:这道题如果没有返回最小值那么我们可以直接使用栈,那么如果需要返回最小值呢?我们可以使用辅助栈辅组栈只保存比栈顶元素小的元素,那么辅助栈的栈顶就是当前栈的最小值。根据观看下图我们可以很直观感受原创 2022-07-06 17:25:59 · 104 阅读 · 0 评论 -
第一讲:鸡蛋的硬度
题目: AcWing 1048. 鸡蛋的硬度 最近XX公司举办了一个奇怪的比赛:鸡蛋硬度之王争霸赛。参赛者是来自世界各地的母鸡,比赛的内容是看谁下的蛋最硬,更奇怪的是XX公司并不使用什么精密仪器来测量蛋的硬度,他们采用了一种最老土的办法–从高度扔鸡蛋–来测试鸡蛋的硬度,如果一次母鸡下的蛋从高楼的第a层摔下来没摔破,但是从a+1层摔下来时摔破了,那么就说这只母鸡的鸡蛋的硬度是a。你当然可以找出各种理由说明这种方法不科学,比如同一只母鸡下的蛋硬度可能不一样等等,但是这不影响XX公司的争霸赛,因为他们只是为了原创 2022-07-06 16:40:18 · 197 阅读 · 0 评论 -
第一讲:寻找矩阵的极小值
题目: AcWing 1452. 寻找矩阵的极小值给定一个 n×n 的矩阵,矩阵中包含 n×n 个 互不相同 的整数。定义极小值:如果一个数的值比与它相邻的所有数字的值都小,则这个数值就被称为极小值。一个数的相邻数字是指其上下左右四个方向相邻的四个数字,另外注意,处于边界或角落的数的相邻数字可能少于四个。要求在 O(nlogn) 的时间复杂度之内找出任意一个极小值的位置,并输出它在第几行第几列。本题中矩阵是隐藏的,你可以通过我们预设的 int 函数 query 来获得矩阵中某个位置的数值是多少。例如,qu原创 2022-07-06 15:50:11 · 647 阅读 · 0 评论 -
第一讲:单链表快速排序
题目: AcWing 1451. 单链表快速排序给定一个单链表,请使用快速排序算法对其排序。要求:期望平均时间复杂度为 O(nlogn),期望额外空间复杂度为 O(logn)。思考题: 如果只能改变链表结构,不能修改每个节点的val值该如何做呢?数据范围链表中的所有数大小均在 int 范围内,链表长度在 [0,10000]。输入样例:输出样例:题目分析:快速排序的思路1.首先找到基准值,链表找第一个就可以了2.然后将整条链表分段,链表可以分成三段,小于,等于,大于3.最后递归然后将三段进行拼接即原创 2022-07-05 16:45:47 · 353 阅读 · 0 评论 -
第一讲:蛇形矩阵
题目: AcWing 756. 蛇形矩阵 输入两个整数 n 和 m,输出一个 n 行 m 列的矩阵,将数字 1 到 n×m 按照回字蛇形填充至矩阵中。具体矩阵形式可参考样例。输入格式输入共一行,包含两个整数 n 和 m。输出格式输出满足要求的矩阵。矩阵占 n 行,每行包含 m 个空格隔开的整数。数据范围1≤n,m≤100输入样例:输出样例:题目分析:这道题主要使用x、y的偏移量比如(x,y)如果想往下走那么就是(x+1,y+0),其它方向同理如果换方向?使用数组保存四个方向的偏移量,如果原创 2022-07-05 15:15:10 · 353 阅读 · 1 评论