PTA
文章平均质量分 58
修炼室
这个作者很懒,什么都没留下…
展开
-
解密双指针法:如何用双指针找到最大容器装水问题的优雅解法
在改题中,我们要找出在给定垂直线数组中,两条垂直线所构成的容器可以容纳的最大水量。这个问题可以使用双指针法来高效解决。原创 2023-08-08 09:23:01 · 136 阅读 · 0 评论 -
找出字典序最小的好划分方案【贪心算法、总结】
我们希望找到字典序最小的划分方案,因此我们可以尽量使得划分的数字从小到大排列。此时,我们只需要输出n - sum + i,这样的划分方案就是字典序最小的方案。如果sum + i大于或等于n,那么添加数字i后,划分方案的数字总和已经大于等于n了,3.每次添加数字i时,将sum加上i,并判断sum是否大于等于n - i。1.定义一个变量sum,用于记录当前划分方案中数字的和。2.从1开始遍历到n,依次将数字添加到划分方案中。题目要求我们找出给定整数n的所有好的划分中,4.继续循环,直到遍历完1到n的所有数字。原创 2023-06-16 21:42:33 · 569 阅读 · 0 评论 -
单链表【数据结构、数组模拟】
一般情况下,都是直接使用下面的代码进行模拟的然后当我们需要进行创建一个新的节点时,都需要使用new Node()数据规模一般都是10w~100w+的数据,这样时间花费下来,就已经很久了所以,在做题时,我们一般不采用动态链表方式!原创 2023-06-09 08:08:45 · 398 阅读 · 0 评论 -
尝试使用遍历代替删除操作 + 排序时机选择【算法思想】
尝试使用遍历代替删除操作 + 排序时机选择原创 2023-05-14 00:50:41 · 508 阅读 · 0 评论 -
巧妙的取余算法【算法思想、学习总结】
当前有这样的题目题目其实很简单,就是进行取余,然后再找到没有访问过的数字放入vector中。原创 2023-05-14 16:07:26 · 498 阅读 · 0 评论 -
区间合并【pair、sort】
将(包括端点)的区间进行合并例如,现在有这样一个数据最终合并的结果就是得到。原创 2023-05-18 22:22:26 · 402 阅读 · 0 评论 -
位运算【巧妙思路、两种常见题型】
x在计算机中是以补码存放的,也就是说。原创 2023-04-26 20:51:05 · 409 阅读 · 0 评论 -
双指针【算法推导、背模板】——最长连续不重复子序列
通常情况双指针就是需要将O(N^2^),利用某些实现O(N)check判断是否构成。原创 2023-04-20 22:16:23 · 395 阅读 · 0 评论 -
二维差分【算法推导,图文讲解清晰】
798. 差分矩阵 - AcWing题库二维差分相对一维差分会复杂一点,而且还要结合二维前缀和的一些细节处理在差分思想中,构造并不是那么重要,而是其中A、B数组的角色。我们假想存在一个数组B,输入的A数组是B数组的前缀和——差分思想核心所以,这样就很巧妙的将 需要循环处理的,转化成了对B数组的某一个的处理(好好理解这句话!!!看懂这个你就看懂了差分的核心思想)因为A数组是B数组的前缀和,所以当我们对B[i][j]加上某一个常数c后,A数组从后面都加上了c具体来说,当时加上一个常数时,后面(红色框起来的)都加原创 2023-04-16 21:09:50 · 949 阅读 · 0 评论 -
一维差分思想【算法推导、深刻思考】
差分本质上就是。原创 2023-04-15 01:33:49 · 215 阅读 · 0 评论 -
前缀和算法【一维、二维】
首先这种算法适合于求从 x 到 y 的和。原创 2023-04-11 23:12:03 · 482 阅读 · 0 评论 -
大数除法【分治、算法推导】
其实我们这里就是直接进行相除运算的,首先对第一位1进行运算,直接 ÷ 11 后放入答案。然后执行下一步 1 * 10 + 2 = 12,用新的12 ÷ 11 = 1…因为大部分的高精读运算是将其相互混合在一起的,所以为了方便这里直接整合在一起了。虽然这里是从最高位开始相除的,但是我们还是延续之前的高精读算法,从最后开始存。继续执行 1 * 10 + 3 = 13 ,用13 ÷ 11 = 1 …所以最后的结果就是 123 ÷ 11 = 11…首先执行第一位1 ÷ 11 = 0…可以得到一下核心代码。原创 2023-04-07 20:49:54 · 569 阅读 · 0 评论 -
大数乘法【极简思路、代码模板】
因为根据我们上面对乘法的分析,t 就是我们这里的前一位的进位。思路不太一样,对于大数乘法我们可以有更加简单的思路。当前我们有一个数A2A1A0 和 小b相乘,我们首先。所以这里我们其实可以简化的是——只需要将大数中的。首先我们可以用一种抽象的眼光观看乘法的计算过程。,然后再将每一位放入vector后输出即可。大数乘法可能和前面我们提到的。这里提到的大数乘法,是针对与。同样的,我们将每一位拆开。而不是两个超大整数相乘。现在我们针对一个实例。原创 2023-04-04 20:55:19 · 467 阅读 · 2 评论 -
大数减法【算法推导,代码模板】
然后进行编程实现我们发现首先我们需要进行运算。原创 2023-03-29 21:02:13 · 354 阅读 · 0 评论 -
大数加法【算法解析、代码模板、思路简单清晰】
但是一般来说大数都是1000位起步的,所以我们不能简单的使用long long进行处理,而是将其放在一个数组内,然后通过将每一位拆分出来,进行相加。,这里需要明白的一点就是,若是数字的位数不对(如199 + 1),那么将不会遍历内容为1的数组B。因为我们是使用数组存储的,若将相加的结果放在前面的话,那么。如果对于一个真正很大的数字来说,可能long long都不支持(最多支持。其实本质上就是一个数组,但是它比较方便的是可以直接通过。因为在前面我们是倒序输入的,这里我们。添加数字进入数组的。原创 2023-03-26 22:20:39 · 902 阅读 · 0 评论 -
小数二分【基于整数二分思想】
小数二分的思想其实比较简单,与整数二分差别基本上只在left和right的取值范围例如,在这个题中所以我们就直接将。原创 2023-03-25 16:52:07 · 715 阅读 · 0 评论 -
整数二分查找【含左边界查询 + 右边界查询】
二分查找看起来是很简单的一个算法,但是其中涉及到比较多的细节问题。一不小心就死循环了……一般情况下,二分查找通常适用于一个的序列中(一般为。原创 2023-03-24 20:47:03 · 268 阅读 · 0 评论 -
逆序对数量【归并排序】
在前面我们有对归并排序进行讲解,现在我们结合一个其中的典型例题讲解。原创 2023-03-20 20:50:58 · 329 阅读 · 0 评论 -
归并排序【算法解析,代码模板】
前面我们有对快速排序和快速选择进行讲解,他们的为O(nlogn)当然,也存在一个最坏的情况最好的情况就是所以,其实快速排序的时间复杂度可能会根据你输入的数据而变化,并不那么存在一种算法能稳定的有O(nlogn)吗?当然有,这就是我们要讲的归并排序。原创 2023-03-18 21:47:35 · 418 阅读 · 0 评论 -
快速选择【算法解析,代码模板】
快速选择算法主要针对的是 求第几小的数原创 2023-03-16 20:55:00 · 56 阅读 · 0 评论 -
快速排序【算法解析,代码模板】
快排的思想是基于思想的一种排序方法,核心思路分为以下几步:① 确定 左右边界 l 和 r② 设置x,值可以是q[l] , q[r] 或者q[(l + r) / 2]③ 递归排序左右区间我们可能并不清楚x到底在待排数组的哪个位置,但是我们基于一种的思想。我不管x在哪里,我就分成两块。原创 2023-03-15 19:28:16 · 352 阅读 · 0 评论 -
高精读整数加法【循环总结】
我们需要对两个字符串循环处理,但是若是两个循环貌似就将多余了,之前有些想不明白应该怎么做其实很简单,因为* 两个条件都是需要满足* 同时执行所以,只需要**在循环中用两个条件用 `或`相连即可**```cppwhile(n >= 0 || m >= 0)```这样就可以同时访问两个字符串,并且会在长度最长的字符串时终止循环原创 2022-09-07 14:26:36 · 127 阅读 · 0 评论 -
称砝码【set】
而且真正需要用到的就只有一个vector的变量,num只需要在input 函数中作为局部变量即可。当前有n个砝码,给你每个砝码的重量和数量,计算出这些砝码可以称哪些重量(,当时看到这个代码的时候愣住了,真正明白自己写出来的时候,惊为天人!中间最难的一个点就是,我们要怎么样才能把各个和加起来,并且还不出现重复。第二步,我们拿到第二个vector中的数字——1,去遍历set中的数据。,在输入的过程中就将所有真实的数据放入同一个位置,便于后续操作。复现下来,我们发现我们去寻找的时候的操作如下。...原创 2022-08-10 15:55:32 · 170 阅读 · 0 评论 -
一种优雅遍历vector的方法【迭代器、c++】
对,你没看错,只有这么简短的一行代码,就能实现之前的for循环,不再需要去控制对应的size。尽管本质上都是for循环,但是若加上迭代器的遍历,或许就会不一样了。,当vector无对应的数据时,则会自动终止循环。进行遍历时,通常会使用普通的for循环去做。这样写的代码,总觉得没有真正用上。自身默认带的属性——迭代器,通过。避免可能出现for循环的简单错误。通常我们使用c++中的。去遍历你所需要遍历的。...原创 2022-07-28 21:20:28 · 1023 阅读 · 0 评论 -
set删除最后一个字符【c++,迭代器】
当前我需要对set删除最后一个字符,但是普通的index直接。然后再获取对应你需要删除元素的最后一个,一般都直接。类似,拿到的将会超过当前的一个宽度,因此需要先。首先定义一个对应的迭代器。这里需要注意的是记得加上。因为这里我需要删除的是。,因此对应的迭代器就是。...原创 2022-07-28 21:10:20 · 1779 阅读 · 1 评论 -
C++实现split【流,getline】
在使用C++写算法题时,通常我们需要对字符串进行切割,但是string的默认头文件中,却并没有像其他语言一样提供。因为这里我的字符串都是int类型的,所以就直接在内部进行转换了。这里是因为,我需要对字符进行去重处理,所以就使用了。通过while不断循环,一直获取通过。函数,因此需要我们自己实现一个。将欲切割的字符串转换成流。切割出来的token。...原创 2022-07-28 20:55:27 · 668 阅读 · 0 评论 -
正则替换【JS,正则表达式】
表示数字_牛客题霸_牛客网 (nowcoder.com) 题目要求将所有的数字替换成原本这道题我准备就常规使用c++去写的,但是写的过程中突然意识到所有数字替换,不就是找到所有数字后替换吗?那不就可以使用了带着这个想法,我去寻找对应的正则表达式没错,就两句话……提交答案成功的那一刻我也有一点点震惊……其实开始我拿到这个题目的时候,我当时已经知道了通过正则可以替换了,但是就是差那么一个点,让我能解决这道题于是发现可以使原创 2022-07-04 14:44:26 · 835 阅读 · 0 评论 -
删除字符串中出现次数最少的字符【JS,Map排序,正则】
删除字符串中出现次数最少的字符_牛客题霸_牛客网 (nowcoder.com)题目几个重点刷题总结1.初始化各个字符个数直接通过while循环遍历value原始字符串,,因为value对应位置i不存在是会以存在,while中会自动转换成boolean类型的值,对应的undefined的就是falsy(假值)2.map排序map排序大致思想:通过转换成数组,调用数组的sort,并重写sort默认排序规则重写数组排序规则按value排序——降序按key排序3.replace替换所有——正原创 2022-07-03 15:15:30 · 1058 阅读 · 0 评论 -
整形数组合并【JS】
题目链接-牛客将两个整型数组按照升序合并,并且过滤掉重复数组元素。输出时相邻两数之间没有空格。输入说明,按下列顺序输入:输出合并之后的数组输入:输出:解决的JS代码代码解释看见这个题目的第一眼就想到了JS中的数组去重,所以就选择使用js去写题目了首先这个题目其实思路很简单,就是输入后,升序,去重,然后输出我通过函数读取输入的字符,开始我想当然的以为这就是一个数组,结果处理的时候一直报错,不能使用原型链中的方法于是使用分割字符串,变为数组处理后,变成一个二维数组,于是就像通过方法直接扁平化,原创 2022-07-01 15:07:44 · 581 阅读 · 0 评论 -
在牛客中使用JS编程题【split】
今天做题的时候发现句子逆序这个题目特别适合使用js做,于是记录一次JS做题其实开始的时候,我不太知道这个如何JS读写,然后搜了一下直接读取即可值得注意的几个点JS输入问题首先就是JS输入问题。因为在牛客里面,所以的一切都是需要自己从0到1 直接写的,但是JS好像也没有c++和C那样的输入和东西,开始以为就直接就是一个函数没想到最后就是就可以解决问题了,不愧是弱类型语言,脚本语言啊处理逻辑因为单词是通过空格分开的,所以直接使用JS中String的分割函数即可...原创 2022-06-27 14:41:29 · 473 阅读 · 0 评论 -
C++ 一次性输入一行【有空格】
现在我需要处理一行具有空格字符的,如果直接使用则会遇到空格后直接停止输入原创 2022-06-12 13:49:33 · 350 阅读 · 0 评论 -
表达式求值【栈和递归的使用】
牛客题目链接题目中给出一个字符串来表达一个表达式,使用程序去计算出所得的值AC代码代码解释输入首先进行输入。为便于后续修改输入格式和检查输入,特地封装成函数处理表达式在输入完成后,需要进行处理表达式首先在函数内定义变量定义完变量后,执行主要逻辑首先----处理运算首先需要处理的就是的运算,直接递归调用自身处理数判断position是否合法,且当前是数字则进行数字的运算也就是将所有符号前的数字算出来处理四则运算表达式判断对应的符号处理完成后,将temp_num置为0,运算符号更新返回值由原创 2022-06-03 13:57:40 · 203 阅读 · 0 评论 -
棋盘问题【DFS、深度优先搜索】
题目描述在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别。要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子的所有可行的摆放方案CInput输入含有多组测试数据。每组数据的第一行是两个正整数,n k,用一个空格隔开,表示了将在一个n*n的矩阵内描述棋盘,以及摆放棋子的数目。 n <= 8 , k <= n当为-1 -1时表示输入结束。随后的n行描述了棋盘的形状:每行有n个字符,其中 # 表示棋盘区域, . 表原创 2022-05-13 19:09:02 · 142 阅读 · 0 评论 -
N皇后问题【递归、搜索】
题目描述在N*N的方格棋盘放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一列,也不允许处在与棋盘边框成45角的斜线上。你的任务是,对于给定的N,求出有多少种合法的放置方法。Input共有若干行,每行一个正整数N≤10,表示棋盘和皇后的数量;如果N=0,表示结束。Output共有若干行,每行一个正整数,表示对应输入行的皇后的不同放置数量。输入样例1850输出样例19210AC代码#include <iostream>#includ原创 2022-05-10 20:21:52 · 313 阅读 · 0 评论 -
最短路径【A-最短路】
在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shirt。但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的!所以现在他们想要寻找最短的从商店到赛场的路线,你可以帮助他们吗?Input输入包括多组数据。每组数据第一行是两个整数N、M(N<=100,M<=10000),N表示成都的大街上有几个路口,标号为1的路口是商店所在地,标号为N的路口是赛场所在地,M则表示在成都有几条路。N=M=0表示输入结束。接下来M行,每行包括3个整数A,B,C(1<=A,B&原创 2022-04-27 14:11:47 · 114 阅读 · 0 评论 -
Max Sum【最大子序列和、前缀和、DP(动态规划)】
题目描述Given a sequence a[1],a[2],a[3]…a[n], your job is to calculate the max sum of a sub-sequence. Forexample, given (6,-1,5,4,-7), the max sum in this sequence is 6 + (-1) + 5 + 4 = 14.输入The first line of the input contains an integer T(1<=T<=20)原创 2022-04-18 18:58:28 · 277 阅读 · 0 评论 -
前缀和【P5638 【CSGRound2】光骓者的荣耀】
题目大意鉴于篇幅原因,就不展示原始题目了,需要的可去P5638 【CSGRound2】光骓者的荣耀 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)题目大致意思为需要找到最短的那个点前往目标城市,中途可使用一次传送门(对i-k和i+k都可满足)AC代码#include <iostream>#include<algorithm>#include<vector>using namespace std;long long temp_an原创 2022-04-16 21:58:07 · 460 阅读 · 0 评论 -
开关灯【逗号输出、倍数下标改变】
## 题目描述假设有 N 盏灯(N 为不大于 5000 的正整数),从 1 到 N 按顺序依次编号,初始时全部处于开启状态;有 M 个人(M 为不大于 N 的正整数)也从 1 到 M 依次编号。第一个人(1 号)将灯全部关闭,第二个人(2 号)将编号为 2 的倍数的灯打开,第三个人(3 号)将编号为 3 的倍数的灯做相反处理(即,将打开的灯关闭,将关闭的灯打开)。依照编号递增顺序,以后的人都和 3 号一样,将凡是自己编号倍数的灯做相反处理。请问:当第 M 个人操作之后,哪几盏灯是关闭的,按从小到原创 2022-04-12 14:03:50 · 115 阅读 · 0 评论 -
Map的应用【A Let the Ballon Rise】
题目内容Contest time again! How excited it is to see balloons floating around. But to tell you a secret, the judges’ favorite time is guessing the most popular problem. When the contest is over, they will count the balloons of each color and find the result.原创 2022-04-10 14:23:52 · 857 阅读 · 0 评论 -
map的使用【学生成绩查找系统、C++】
题目描述学生成绩查找系统是一个根据姓名查找学生成绩的系统。系统可以录入是学生的姓名和成绩,录完之后可以输入查找条件,即学生的姓名,查找该生的成绩,如果存在该生的信息,则输出该生成绩,否则给出查无此人的提示信息。输入题目输入包括录入学生信息和输入查找条件以及输入结束标志。insert语句表示录入学生信息,格式为字符insert+空格+字符串+空格+数字+换行符 ,例如 insert xiaohua 99 ,表示录入姓名为xiaohua的学生,其成绩为99 。 find语句表示查找某学生的信息,格式为字符原创 2022-04-06 14:14:40 · 439 阅读 · 0 评论