PTA
文章平均质量分 60
修炼室
这个作者很懒,什么都没留下…
展开
-
使用双指针法解决最大容积问题:移动较短的线以优化面积【双指针】
通过双指针法,我们能够在 O(n) 时间复杂度内解决这个问题。该方法利用双指针逐步缩小搜索范围,并不断计算和比较面积,最终找到最大的容积。移动较短的线是解决问题的关键,因为较短的线限制了容积,我们希望通过移动它来找到更高的线,从而可能增加面积。这种方法既高效又易于理解,适用于大多数需要计算最大值或最小值的问题。原创 2024-07-25 18:03:40 · 483 阅读 · 0 评论 -
C++ 实现字符数组压缩:一个简单高效的方法【字符串压缩、双指针】
在本文中,我们将讨论如何在C++中压缩字符数组,使每组连续重复字符在数组中只保留一个字符,并记录其重复次数。这是一个经典的算法问题,常常出现在面试中。我们将通过逐步分析解决思路和代码实现,帮助大家理解这一问题的解决方法。原创 2024-07-22 11:05:53 · 259 阅读 · 0 评论 -
C++实现数组中是否存在递增三元组的巧妙方法【奇思妙想】
通过双变量法,我们可以在 O(n) 的时间复杂度和 O(1) 的空间复杂度内解决判断递增三元组的问题。这种方法通过维护两个变量,巧妙地减少了不必要的遍历,提高了算法效率,适合处理大规模数据。原创 2024-07-21 18:18:24 · 1012 阅读 · 0 评论 -
C++ 实现字符串处理和反转操作的巧妙方法【字符串、istringstream】
通过上述方法,我们可以高效地处理字符串,去除空格、拆分单词并翻转单词顺序。使用和等标准库,可以简化代码实现,提高可读性和维护性。原创 2024-07-19 11:52:38 · 474 阅读 · 0 评论 -
C++实现字符串元音字母反转的巧妙方法【数据结构、双指针】
在处理字符串元音反转的问题时,利用数据结构和双指针法都是有效的解决方案。数据结构方法通过存储元音的位置和字符来实现反转,而双指针法通过两端同时向中间移动指针来找到需要交换的字符。这两种方法各有优劣,具体选择取决于问题的规模和对空间复杂度的要求。原创 2024-07-18 12:10:44 · 601 阅读 · 0 评论 -
探讨C++中巧妙的边界条件处理:以花坛种花问题为例【巧妙思想、边界条件】
通过上述代码和分析,我们可以看到,巧妙的边界条件处理不仅让代码更简洁明了,而且减少了潜在的错误。希望这篇文章能帮助我们更好地理解边界条件的处理方法,并将这种技巧应用到其他算法问题中。原创 2024-07-17 11:39:53 · 451 阅读 · 0 评论 -
深入解析std::string的设计哲学【C++、STL库】
在C++中,`std::string`类的`size()`和`length()`方法是成员函数而不是常量,这主要是为了 ==遵循面向对象编程== 的原则,提供封装性和数据抽象,同时也有助于提高性能和维护代码的灵活性。通过成员函数访问数据,可以在不改变类的接口的情况下优化内部实现,提高代码的可维护性和可扩展性。原创 2024-07-13 21:53:54 · 254 阅读 · 0 评论 -
解密双指针法:如何用双指针找到最大容器装水问题的优雅解法
在改题中,我们要找出在给定垂直线数组中,两条垂直线所构成的容器可以容纳的最大水量。这个问题可以使用双指针法来高效解决。原创 2023-08-08 09:23:01 · 141 阅读 · 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 · 621 阅读 · 0 评论 -
单链表【数据结构、数组模拟】
一般情况下,都是直接使用下面的代码进行模拟的然后当我们需要进行创建一个新的节点时,都需要使用new Node()数据规模一般都是10w~100w+的数据,这样时间花费下来,就已经很久了所以,在做题时,我们一般不采用动态链表方式!原创 2023-06-09 08:08:45 · 403 阅读 · 0 评论 -
尝试使用遍历代替删除操作 + 排序时机选择【算法思想】
尝试使用遍历代替删除操作 + 排序时机选择原创 2023-05-14 00:50:41 · 511 阅读 · 0 评论 -
巧妙的取余算法【算法思想、学习总结】
当前有这样的题目题目其实很简单,就是进行取余,然后再找到没有访问过的数字放入vector中。原创 2023-05-14 16:07:26 · 515 阅读 · 0 评论 -
区间合并【pair、sort】
将(包括端点)的区间进行合并例如,现在有这样一个数据最终合并的结果就是得到。原创 2023-05-18 22:22:26 · 420 阅读 · 0 评论 -
位运算【巧妙思路、两种常见题型】
x在计算机中是以补码存放的,也就是说。原创 2023-04-26 20:51:05 · 419 阅读 · 0 评论 -
双指针【算法推导、背模板】——最长连续不重复子序列
通常情况双指针就是需要将O(N^2^),利用某些实现O(N)check判断是否构成。原创 2023-04-20 22:16:23 · 426 阅读 · 0 评论 -
二维差分【算法推导,图文讲解清晰】
798. 差分矩阵 - AcWing题库二维差分相对一维差分会复杂一点,而且还要结合二维前缀和的一些细节处理在差分思想中,构造并不是那么重要,而是其中A、B数组的角色。我们假想存在一个数组B,输入的A数组是B数组的前缀和——差分思想核心所以,这样就很巧妙的将 需要循环处理的,转化成了对B数组的某一个的处理(好好理解这句话!!!看懂这个你就看懂了差分的核心思想)因为A数组是B数组的前缀和,所以当我们对B[i][j]加上某一个常数c后,A数组从后面都加上了c具体来说,当时加上一个常数时,后面(红色框起来的)都加原创 2023-04-16 21:09:50 · 1091 阅读 · 0 评论 -
一维差分思想【算法推导、深刻思考】
差分本质上就是。原创 2023-04-15 01:33:49 · 225 阅读 · 0 评论 -
前缀和算法【一维、二维】
首先这种算法适合于求从 x 到 y 的和。原创 2023-04-11 23:12:03 · 491 阅读 · 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 · 608 阅读 · 0 评论 -
大数乘法【极简思路、代码模板】
因为根据我们上面对乘法的分析,t 就是我们这里的前一位的进位。思路不太一样,对于大数乘法我们可以有更加简单的思路。当前我们有一个数A2A1A0 和 小b相乘,我们首先。所以这里我们其实可以简化的是——只需要将大数中的。首先我们可以用一种抽象的眼光观看乘法的计算过程。,然后再将每一位放入vector后输出即可。大数乘法可能和前面我们提到的。这里提到的大数乘法,是针对与。同样的,我们将每一位拆开。而不是两个超大整数相乘。现在我们针对一个实例。原创 2023-04-04 20:55:19 · 476 阅读 · 2 评论 -
大数减法【算法推导,代码模板】
然后进行编程实现我们发现首先我们需要进行运算。原创 2023-03-29 21:02:13 · 370 阅读 · 0 评论 -
大数加法【算法解析、代码模板、思路简单清晰】
但是一般来说大数都是1000位起步的,所以我们不能简单的使用long long进行处理,而是将其放在一个数组内,然后通过将每一位拆分出来,进行相加。,这里需要明白的一点就是,若是数字的位数不对(如199 + 1),那么将不会遍历内容为1的数组B。因为我们是使用数组存储的,若将相加的结果放在前面的话,那么。如果对于一个真正很大的数字来说,可能long long都不支持(最多支持。其实本质上就是一个数组,但是它比较方便的是可以直接通过。因为在前面我们是倒序输入的,这里我们。添加数字进入数组的。原创 2023-03-26 22:20:39 · 913 阅读 · 0 评论 -
小数二分【基于整数二分思想】
小数二分的思想其实比较简单,与整数二分差别基本上只在left和right的取值范围例如,在这个题中所以我们就直接将。原创 2023-03-25 16:52:07 · 741 阅读 · 0 评论 -
整数二分查找【含左边界查询 + 右边界查询】
二分查找看起来是很简单的一个算法,但是其中涉及到比较多的细节问题。一不小心就死循环了……一般情况下,二分查找通常适用于一个的序列中(一般为。原创 2023-03-24 20:47:03 · 284 阅读 · 0 评论 -
逆序对数量【归并排序】
在前面我们有对归并排序进行讲解,现在我们结合一个其中的典型例题讲解。原创 2023-03-20 20:50:58 · 340 阅读 · 0 评论 -
归并排序【算法解析,代码模板】
前面我们有对快速排序和快速选择进行讲解,他们的为O(nlogn)当然,也存在一个最坏的情况最好的情况就是所以,其实快速排序的时间复杂度可能会根据你输入的数据而变化,并不那么存在一种算法能稳定的有O(nlogn)吗?当然有,这就是我们要讲的归并排序。原创 2023-03-18 21:47:35 · 424 阅读 · 0 评论 -
快速选择【算法解析,代码模板】
快速选择算法主要针对的是 求第几小的数原创 2023-03-16 20:55:00 · 59 阅读 · 0 评论 -
快速排序【算法解析,代码模板】
快排的思想是基于思想的一种排序方法,核心思路分为以下几步:① 确定 左右边界 l 和 r② 设置x,值可以是q[l] , q[r] 或者q[(l + r) / 2]③ 递归排序左右区间我们可能并不清楚x到底在待排数组的哪个位置,但是我们基于一种的思想。我不管x在哪里,我就分成两块。原创 2023-03-15 19:28:16 · 373 阅读 · 0 评论 -
高精读整数加法【循环总结】
我们需要对两个字符串循环处理,但是若是两个循环貌似就将多余了,之前有些想不明白应该怎么做其实很简单,因为* 两个条件都是需要满足* 同时执行所以,只需要**在循环中用两个条件用 `或`相连即可**```cppwhile(n >= 0 || m >= 0)```这样就可以同时访问两个字符串,并且会在长度最长的字符串时终止循环原创 2022-09-07 14:26:36 · 131 阅读 · 0 评论 -
称砝码【set】
而且真正需要用到的就只有一个vector的变量,num只需要在input 函数中作为局部变量即可。当前有n个砝码,给你每个砝码的重量和数量,计算出这些砝码可以称哪些重量(,当时看到这个代码的时候愣住了,真正明白自己写出来的时候,惊为天人!中间最难的一个点就是,我们要怎么样才能把各个和加起来,并且还不出现重复。第二步,我们拿到第二个vector中的数字——1,去遍历set中的数据。,在输入的过程中就将所有真实的数据放入同一个位置,便于后续操作。复现下来,我们发现我们去寻找的时候的操作如下。...原创 2022-08-10 15:55:32 · 179 阅读 · 0 评论 -
一种优雅遍历vector的方法【迭代器、c++】
对,你没看错,只有这么简短的一行代码,就能实现之前的for循环,不再需要去控制对应的size。尽管本质上都是for循环,但是若加上迭代器的遍历,或许就会不一样了。,当vector无对应的数据时,则会自动终止循环。进行遍历时,通常会使用普通的for循环去做。这样写的代码,总觉得没有真正用上。自身默认带的属性——迭代器,通过。避免可能出现for循环的简单错误。通常我们使用c++中的。去遍历你所需要遍历的。...原创 2022-07-28 21:20:28 · 1061 阅读 · 0 评论 -
set删除最后一个字符【c++,迭代器】
当前我需要对set删除最后一个字符,但是普通的index直接。然后再获取对应你需要删除元素的最后一个,一般都直接。类似,拿到的将会超过当前的一个宽度,因此需要先。首先定义一个对应的迭代器。这里需要注意的是记得加上。因为这里我需要删除的是。,因此对应的迭代器就是。...原创 2022-07-28 21:10:20 · 1889 阅读 · 1 评论 -
C++实现split【流,getline】
在使用C++写算法题时,通常我们需要对字符串进行切割,但是string的默认头文件中,却并没有像其他语言一样提供。因为这里我的字符串都是int类型的,所以就直接在内部进行转换了。这里是因为,我需要对字符进行去重处理,所以就使用了。通过while不断循环,一直获取通过。函数,因此需要我们自己实现一个。将欲切割的字符串转换成流。切割出来的token。...原创 2022-07-28 20:55:27 · 688 阅读 · 0 评论 -
正则替换【JS,正则表达式】
表示数字_牛客题霸_牛客网 (nowcoder.com) 题目要求将所有的数字替换成原本这道题我准备就常规使用c++去写的,但是写的过程中突然意识到所有数字替换,不就是找到所有数字后替换吗?那不就可以使用了带着这个想法,我去寻找对应的正则表达式没错,就两句话……提交答案成功的那一刻我也有一点点震惊……其实开始我拿到这个题目的时候,我当时已经知道了通过正则可以替换了,但是就是差那么一个点,让我能解决这道题于是发现可以使原创 2022-07-04 14:44:26 · 873 阅读 · 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 · 1101 阅读 · 0 评论 -
整形数组合并【JS】
题目链接-牛客将两个整型数组按照升序合并,并且过滤掉重复数组元素。输出时相邻两数之间没有空格。输入说明,按下列顺序输入:输出合并之后的数组输入:输出:解决的JS代码代码解释看见这个题目的第一眼就想到了JS中的数组去重,所以就选择使用js去写题目了首先这个题目其实思路很简单,就是输入后,升序,去重,然后输出我通过函数读取输入的字符,开始我想当然的以为这就是一个数组,结果处理的时候一直报错,不能使用原型链中的方法于是使用分割字符串,变为数组处理后,变成一个二维数组,于是就像通过方法直接扁平化,原创 2022-07-01 15:07:44 · 595 阅读 · 0 评论 -
在牛客中使用JS编程题【split】
今天做题的时候发现句子逆序这个题目特别适合使用js做,于是记录一次JS做题其实开始的时候,我不太知道这个如何JS读写,然后搜了一下直接读取即可值得注意的几个点JS输入问题首先就是JS输入问题。因为在牛客里面,所以的一切都是需要自己从0到1 直接写的,但是JS好像也没有c++和C那样的输入和东西,开始以为就直接就是一个函数没想到最后就是就可以解决问题了,不愧是弱类型语言,脚本语言啊处理逻辑因为单词是通过空格分开的,所以直接使用JS中String的分割函数即可...原创 2022-06-27 14:41:29 · 484 阅读 · 0 评论 -
C++ 一次性输入一行【有空格】
现在我需要处理一行具有空格字符的,如果直接使用则会遇到空格后直接停止输入原创 2022-06-12 13:49:33 · 372 阅读 · 0 评论 -
表达式求值【栈和递归的使用】
牛客题目链接题目中给出一个字符串来表达一个表达式,使用程序去计算出所得的值AC代码代码解释输入首先进行输入。为便于后续修改输入格式和检查输入,特地封装成函数处理表达式在输入完成后,需要进行处理表达式首先在函数内定义变量定义完变量后,执行主要逻辑首先----处理运算首先需要处理的就是的运算,直接递归调用自身处理数判断position是否合法,且当前是数字则进行数字的运算也就是将所有符号前的数字算出来处理四则运算表达式判断对应的符号处理完成后,将temp_num置为0,运算符号更新返回值由原创 2022-06-03 13:57:40 · 217 阅读 · 0 评论 -
棋盘问题【DFS、深度优先搜索】
题目描述在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别。要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子的所有可行的摆放方案CInput输入含有多组测试数据。每组数据的第一行是两个正整数,n k,用一个空格隔开,表示了将在一个n*n的矩阵内描述棋盘,以及摆放棋子的数目。 n <= 8 , k <= n当为-1 -1时表示输入结束。随后的n行描述了棋盘的形状:每行有n个字符,其中 # 表示棋盘区域, . 表原创 2022-05-13 19:09:02 · 150 阅读 · 0 评论