- 博客(36)
- 收藏
- 关注
原创 Coding Practice,48天强训(34)
比较简单的模拟题,基本是按图索骥,注意几个处理细节就行了,包括结果==10时是X,要跳过‘-’遍历,遍历时不要把最后一位也算进去了,要加个<= 9的限制条件。迷宫啊,图论问题,看是BFS还是DFS吧,看了一下,求最短路径应该是BFS。BFS的算法思路都很熟悉了,主要是实现,要多注意细节,多写几遍。BFS和DFS主要还是要多写,思路不难,难的是实现。DFS + 记忆化搜索来解决。
2025-05-19 09:37:36
137
原创 Coding Practice,48天强训(33)
那么我们可以看到,方法数其实就是2的指数幂,最后要得到的n就等于2^(n-1),所以最终版本,我们可以用位运算的左移来进行快速幂计算。这种写法把++ -- 判断藏在了if条件里,看起来很炫,其实易读性更差,拆出来写也很好,重剑无锋,大巧不功,质朴才是最高境界。和经典的跳台阶问题不同的是,这只青蛙劲比较大,一次能跳n个台阶,用dp也能解决,两层for循环,就是效率可能会差一些。表示“青蛙在地面时有一种方法”,即“不需要跳”也是一种“方法”,这样才符合实际情况也符合递推公式,那么代码是这样的。
2025-05-16 09:18:30
450
原创 Coding Practice,48天强训(32)
比较简单,先开始还准备用小根堆做,后来发现不用,模拟一下就行了。更贴近应用层,考察一些基础知识点,当复习很不错。把轮子的底层贴出来,方便复习。网易的困难题,多做几遍。
2025-05-08 15:16:26
327
原创 Coding Practice,48天强训(31)
那么回到我们的题目,我们现在有一堆数位,从这些数位里面抽一些数出来,能不能满足恰好满足一个目标,在这题里面是总数的一半,把目标数看作背包重量,每个数自身的值是每个数各自的重量,那么这不就是一个0 or 1的问题吗?第一天用6,6变成了12,但是没有丢,第二天用8,8变成了16,第三天还是可以用第一个口罩(此时变成了12的那个)这题主要难点在于最后边界情况的考虑,当租2人船时,剩下1人有可能通过退1二人船加1三人船的方式来获取最小化费,三人船也是同样有两种边界情况需要考虑。问:你能不能恰好把背包装满?
2025-05-08 11:38:12
887
原创 Coding Practice,48天强训(30)
修正后,看看素数性质,如果ab乘积是个素数,那么ab必有一方为1,另一方是要判断的那个素数本身,所以额外加个判断就能减小样本量了;在强训25的第一题我总结过关于素数的几种判断方式,如果忘了可以回去看。动规经典题目,同LeetCode:1143.最长公共子序列。60的通过率,超时,证明处理大数很乏力。蛮简单一题,多审审题,滑动窗口秒了。第一次写我是这样写的。
2025-05-06 22:06:38
364
原创 Coding Practice,48天强训(29)
这几天好不容易想到五一假期能够有时间多赶下学习进度,结果婚礼的一堆事儿又忙的焦头烂额,计划总是赶不上变化,一步一步慢慢来吧。
2025-05-06 15:43:38
513
原创 Coding Practice,48天强训(28)
比较简单的一个题,因为前两天写了快速幂算法,一直想着用进位 &1之类的处理偶数,其实就正常用string装数字遍历%2就行了。完整版贴出来,如果要自写main版本有个参照。这题做的还不是特别懂,之后有时间得复习。稍微推理一下决策树,确定好剪枝条件。DFS递归 + 一点树形dp的思路。DFS递归+剪枝解决。
2025-05-03 09:18:31
348
原创 Coding Practice,48天强训(27)
自己写一个快速幂算法,快速幂算法是什么意思——比如算 3^13,正常来乘的话需要13次,如果3^100,那得100次,意味着复杂度是O(n)级别,但是如果我们把3^13 拆成3^8 * 3^4 * 3^1,只用乘3次,方数越大,优化效果越明显,而这种方式刚好能和二进制对应起来,比如13的二进制——1101,每一位刚好对应十进制:8 4 0 1,那么返回来看看代码。搜索算法的整体思路都比较简单,难点在于代码的实现,要反复多写写,多练习,注意各种细节,考试面试的时候才能不怯。但是更正统更底层应该是这样写。
2025-04-30 11:11:20
727
原创 Coding Practice,48天强训(26)
手搓一下lower_bound 和 upper_bound,复习二分。再改改来个终极版,滑动窗口,首先理清楚一个条件——2p。暴力一下,超时,改进一下,用二分处理。这个简洁度,理解,看着就舒服。打家劫舍变体,老生常谈。
2025-04-28 15:15:35
224
原创 Coding Practice,48天强训(25)
所以dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - weight[i]] + value[i])就可以理解成,最后的i我不选,因为我之前i-1时,背包容量j已经凑够了,所以是dp[i - 1][j]。最后的i我选,意味着j还没凑够,所以j此时就是j - weight[i],刚好还能容纳最后那个i,此时再加上它的价值就是dp[i - 1][j - weight[i]] + value[i]:只需判断到平方根,因为如果n有因数,一定会被分解成<=根号n的两个因数。
2025-04-27 22:38:08
663
原创 Coding Practice,48天强训(24)
dp中任意元素位置的值都是由它的上、左和左上三个位置的值决定的,由上图可以得知,其实是个面积的计算过程、绿色+蓝色-红色的面积,就是我们要计算的点(黄色)之前所有的面积,把其中的元素的和都相加,最后再加上黄色部分的值,就得出我们需要计算的面积中所有的值——dp[i][j]也是相同的思路,矩形的面积,用最大的绿色-红色-蓝色,此时多减了一个黄色,再加回来,最后就得到右下这块绿色阴影部分的面积了,再把该面积的所有值相加,就得到的答案。能听懂再写,不代表能自己独立解决,要反复复习,要吃透。
2025-04-27 11:05:10
680
原创 Coding Practice,48天强训(23)
登录—专业IT笔试面试备考平台_牛客网这题主要的难点在于勇士打完最后一只毛球的边界计算,如intx = 8 / 2,看似勇士能够打4只毛球,但当打完第4只时勇士的血量已经归0,也就意味着最后被计算的那只毛球勇士是没办法打死的,在完成整个击杀动作后,勇士的血量必须严格>0,才能合法的计入击杀数,所以(8 - 1) / 2 = 3,最后一次攻击的过程由于向下取整的特性被垫掉了(勇士在过程中已经死亡,无法完成击杀动作),最后只能打3只,这才是合理的;字符串分类_牛客笔试题_牛客网我们说两个字符串是“字母异位
2025-04-25 15:27:17
473
原创 Coding Practice,48天强训(22)
在拥有无限*2操作权限的某一个时刻,这个2可以视作一个8,将两数不断/2,直到某个时刻,没办法再整除为止,也就是奇数时,比如8 2两个数不断/2,最后都被还原成1,对于这个1而言,只有后面跟着*2的次数不同,所以这两个数符合条件;只允许头尾插入,也就是说只需要找到A在B中最匹配的位置,头尾插入的其实不用管,可以视作插和B一样的字符即可,所以找到A在B中最匹配的位置就等于找到了最少的不相等位数;再比如两个数6,8,不断/2直至不能整除,6还原成3,3不能整除2,停止;简单题简单做,没啥难度。
2025-04-25 14:58:52
368
原创 Coding Practice,48天强训(21)
不同于常规的dp题目,很多遍历顺序都是从上到下,从左到右,这一题的dp如果转化成平面图如上,所求的结果是储存在右上角的,也就是i为0,j为str.size() - 1时,也就是说填表的顺序是由下至上,由左至右,这样才能保证推导的逻辑正确,红线左下的部分表示i > j,而这显然不合法,故保持为0即可,[i,i]的部分表示i和j重叠指向一个字符,一个字符被视作单独1个回文串,故初始化为1即可;所以针对上述例子,去除[i,i]和无效的红叉(初始化设置为0,不影响计算结果)的部分,实际推导的填表顺序是。
2025-04-17 12:16:40
332
原创 Coding Practice,48天强训(20)
不好判断,代码也不好写,效率也差,所以需要从“非回文串”的部分来入手,那么我们要找到一个最长的非回文串,首先根据最长锁定到以整个回文串为目标,然后回文串的特性注定了它是沿中轴对称的,那么如果这一整个字符串是回文串,那我把它最后一个字母拿走,破坏了它的中轴平衡,此时它就不是一个回文串了,那如果这一整个字符串不是回文串,那就更简单了,直接返回即可;某些题目中会要求将负数or 0,以0输出,可以稍稍修改成,当当前子数组的和小于0时,将con重置为0即可,灵活应变反正核心思想是不变的。
2025-04-16 13:59:46
322
原创 Coding Practice,48天强训(16)
这竟然是个中等难度,很难想象;简单题简单做,把&& A[i + 1] == 's'条件删掉还能快1ms,能进排行榜,但是不健壮,显然这个题目的测试用例不是很全,我要整个%x %i %o之类的你不炸了嘛。
2025-04-14 22:07:57
147
原创 Coding Practice,48天强训(15)
引入的一种新语法,用于将结构或 pair/unordered_map 等容器的元素“拆包”成多个变量。拓扑排序比较简单,但是确实很实用,特别是能判断图是否带环。以上是暴力枚举的方法,我们还能采用二分法来优化效率。纯考察拓扑排序的一个题目,用BFS解决。
2025-04-10 11:05:24
257
原创 Coding Practice,48天强训(14)
三数取一,取每组的中间数相加,最后得到一个最大的结果,那么让所有组局部最优,最后构成全局最优,由于是取中间数,所以每组的局部最优是(最小,次大,最大)这样的结构,用指针来表示就是在一个升序序列中,最小指针指向最左元素,最大指针指向最右元素,次大指向右数第二个元素,像这样不断往中间遍历构成小组,即可实现局部分数最优,最后相加形成全局最优。,如果我们不收取6位置的价值,也就是选择可以收取5位置价值的那条路线,我们会考虑要不要收取5位置的价值,也就是dp[i - 1],所以最终。,在之后的比较中隐式类型转换了。
2025-04-09 16:58:40
492
原创 Coding Practice,48天强训(13)
比较简单,但是可以复习一下一些输入输出的细节,某些测试或者考试环境比较老,输入输出流都需要手动写,所以一定要有处理老式环境的能力。#include <bits/stdc++.h>// 万能头文件 GCC/G++编译器的扩展,只需写一行即可使用大部分STL功能。//关闭C++和C的I/O同步,加速 cin/cout。贪心做一做,有几个贪心策略——优先处理最多的字符,优先批量处理,间隔1来放置,可以最大化利用格子,避免相邻,和。cin.tie(0);//解除 cin 和 cout 的绑定,减少不必要的刷新。
2025-04-09 08:31:13
143
原创 Coding Practice,48天强训(12)
用双指针法,让PA从A头开始走,走完就从B的头继续走,PB从B头走,走完就从A的头继续走,此时,如果两个单链表有公共节点,因为路程速度一样,那么PA走的总距离可以写作:PA = x + z + y + z,同理,PB = y + z + x + z;把前面三个xyz约掉,最后一定会在公共节点相遇,所以在循环中,我们比较两个指针的地址是否相同,如果相同,那么该节点就是公共节点,而两个指针如果走到结尾,为空,都没有发现相同的地址,那就证明没有公共节点。本身没有什么难度,暴力解法的思路也很容易想出。
2025-04-08 07:48:29
377
原创 Coding Practice,48天强训(11)
这题刚开始做的时候还想用贪心,看ab哪个价值高就尽量多选,做半天做不出来,因为实际是只考虑了极端情况,举个例子,当有2个苹果,100个桃子,苹果礼包3块,桃子礼包2块;此时按贪心策略应该先选苹果礼包,就只能做1个,总价值3块,但选桃子礼包就能做2个,总价值4块;这一题还有动态规划的解法,是较为通用的,可以解决股票买卖这一系列的算法问题,最近太忙了先不写了,之后跟着代码随想录二刷补上。收集所有的红色涨停段的收益,即可获取最终收益,这是贪心的思路,恭喜你炒股大师!这题的解法在(一)里已经分析过了,拿出来用用。
2025-04-08 07:45:56
211
原创 Coding Practice,48天强训(10)
但是现在限制我们只能交易1次,那么我们不需要关注所有获利交易,只需要按照时间轴,从左往右找获利交易中的最小值,固定最小值,然后让后续的价格与之相减,拿到最大价值,若发现新最小值,则更新最小值,并重复计算,不断更新最大价值,最后留下来的就是全局所能得到的最大价值,即可求出该区间中买卖的最好时机,这是贪心的思路。图中红色部分表示在对应两天中,所作交易产生的利润,绿色为如果在此间交易,会承担的亏损,如果不限交易次数,那么我们收集所有的红色交易部分,即可获取11天交易的最大利润。
2025-03-28 18:37:25
279
原创 Coding Practice,48天强训(9)
然后确定递推公式,每次只能走1 or 2 步长,那么达到dp[n]就可以由dp[n - 1]和dp[n - 2]推出 ,也只和这前两阶有关,可以画个图看看。由于步长的关系(1or2步),每一阶的关系也只和前两阶有关,从1阶开始,1阶之前只有地面,所以只有1种方式到1阶,走1步(绿色);3阶则是能从1阶和2阶到达(蓝色),也就是1(到1阶有1种方式)+ 2 (到2阶有2种方式)= 3种;2阶可以从1阶上,也能从地面上(红色),所以是1(到1阶有1种方式)+ 1 = 2种;更直观,其实就是斐波那契的写法了。
2025-03-27 17:18:49
266
原创 Coding Practice,48天强训(8)
经典的动态规划问题,路径类DP问题,最大化收集路面上散落的星星,这种路径问题一般都是根据矩阵中某一个终点来计算路径,返回的是个路径信息,本题主要是求最大分数,那就更简单了,已知我们从左上角出发,每次只能下or右,也就意味着没有回头路,那么无论怎么走,最终的终点肯定是右下,它的分数也必然是最高的。第一排遍历完填进去的最大分数就是这么个情况,因为当前格子所能获得的最大分数来源无非就是上一格的分数or左一格的分数和本格分数相加,第一排只有起点有个一分,所以如果从左到右一横条走完,也就最多1分,继续往下画一画。
2025-03-27 14:06:34
389
原创 Coding Practice,48天强训(7)
这几天没注意看邮箱,强训前天就恢复了,虽然没这两天题目没参加,还是翻出来好好做一做,保持博客不断更。
2025-03-26 12:19:16
363
原创 Coding Practice,48天强训(6)
这几天做算法做的腰酸背疼的,每张卷子连学带复习带做都是6h起步,做题同时还得不断复习原来的知识结构,由思路转换为工程能力的过程真的是异常痛苦啊,但是继续加油吧,还是教员的那一句话——坚持数年,方有成效,什么事儿都怕持之以恒。
2025-03-19 16:18:44
175
原创 Coding Practice,48天强训(5)
我们就得知道dp[i]和dp[i-1]之间的关系,根据这个关系反推dp[i-2] dp[i-3] dp[i-4] ....dp[2] dp[1],而像dp[2] dp[1] 这种我们是能直接算出来的,所以根据算的结果加个循环反推回去就获得dp[i]了。好好好,找到关系了,快接近正确答案了,那么dp[i - 1] = dp[i - 2] + m 再推一推 dp[i - 2] = dp[i - 3] + m,到这里有点不对劲了,我们把推的公式带回dp[i]里,那么。
2025-03-15 12:23:45
523
原创 Coding Practice,48天强训(4)
还有一种方法是修改原始数组的值,譬如把已经走过的A改成一个星或者点 * . ,这样就避免重复走路,但是要注意在部分场景下是不让改的,要搞清楚条件,当然,修改后也能恢复,但是很麻烦,所以还是推荐第一种,用个bool数组来判断,更方便。还是比较简单的,生成离n最近的斐波那契数列,如果生成到>n了就终止,<=n的斐波数都会放在容器里,此时多生成一次,因为n有可能靠近比它小的那个斐数 也有可能靠近比它大的那个斐数,所以要多生成一个最后相减来比小。那么基于此,我们设计DFS函数,它的参数是这样的。
2025-03-13 16:25:22
695
原创 Coding Practice,48天强训(3)
但是初步完成的代码显示内存超了,显然用vector<vector<int>>来储存全部的结果太重了,想复杂了,所以的考虑做一下优化,在遍历过程中就把最小的比出来,最后只记录最小的结果就行了。和209的区别就是,输出上面需要给出LR,还得是L较小的那个,那么其余基本相同,只不过需要额外增加一个容器去储存最小的LR区间,最后比较L的值就好了。这个题目的知识点——熟悉priority_queue的用法和性质,明白它的底层是一个堆,默认大堆;这题和leetcode 209是一个系列,顺手给209也解了先。
2025-03-12 16:42:54
162
原创 Coding Practice,48天强训(2)
C++最近进入进阶尾声,做一些算法题来锻炼动手能力,之前的随堂练习代码严格来说是要做成博客的。但是个人感觉随堂的笔记已经做的很多了,没必要再copy放到博客上来水一次装的看似很努力了,博客上应该放一些更有价值的,譬如前沿或者实用技术分享之类的,譬如之前在做项目时候遇到的关于音响系统如何完成小而美的设计,如何用有限的音频资源,通过pitch和volume的随机轮盘来实现不同的听感,相类似的命题作为博客来说才是比较有价值的,之后有时间我会从程序而非策划的角度来记录这个命题。
2025-03-11 11:21:34
324
原创 C#初阶练习,类魔塔小游戏-勇者救公主
最近干到C#部分了,跟着唐老狮的课做一个小小的实验性游戏,通过控制台来完成一个类魔塔游戏.并且进步一填充一些内容。
2025-02-07 14:39:09
731
原创 小白的解决方案:错误码Lnk 1168——无法打开XXX进行写入
3.用taskkill /f /pid XXXX这个指令来杀进程,假设是 smss.exe这个文件命报了错,那么输入对应PID码,taskkill /f /pid 660,命令行里出现”程序终止成功“类似的字样,就在后台终止了,再回编译器里去正常运行就好啦,你就成功了。2.输入tasklist,会出来一个长列表,在里面找到你VS里面报错的那个.exe的名称,记住对应的PID码,其实有更简单的方法去用cmd直接搜索,但小白用这个方式更快,集中注意力好好找,找到了把PID码记下来。
2024-04-15 10:00:14
1555
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人