- 博客(159)
- 收藏
- 关注
原创 刷代随有感(135):下一个更大元素II
本题解法精妙点:将遍历循环数组转变为等价的二次遍历数组=>将遍历结束条件改为两倍数组size以及用巧妙的 i % nums.size() 表示当前遍历到的元素下标。
2024-10-30 08:39:01
185
原创 刷代随有感(134):单调栈——下一个更大元素I(难点涉及哈希表与单调栈的结合)
哈希表的思想:在数组2里找元素而在数组1里面确定,涉及映射关系考虑哈希map。以及单调栈处理的是下标。
2024-10-29 13:35:18
208
原创 刷代码随想录有感(133):单调栈——每日温度--右边第一个更大的数出现在几天后
通常是一维数组,要寻找任一个元素的右边或者左边第一个比自己大或者小的元素的位置,此时我们就要想到可以用单调栈了。如果求一个元素右边第一个更大元素,单调栈就是递增的,如果求一个元素右边第一个更小元素,单调栈就是递减的。
2024-07-12 23:44:36
212
原创 刷代码随想录有感(132):动态规划——最长回文子序列
如果s[i]与s[j]不相同,说明s[i]和s[j]的同时加入 并不能增加[i,j]区间回文子序列的长度,那么分别加入s[i]、s[j]看看哪一个可以组成最长的回文子序列。首先要考虑当i 和j 相同的情况,从递推公式:dp[i][j] = dp[i + 1][j - 1] + 2;2.递推公式:如果s[i]与s[j]相同,那么dp[i][j] = dp[i + 1][j - 1] + 2;所以需要手动初始化一下,当i与j相同,那么dp[i][j]一定是等于1的,即:一个字符的回文子序列长度就是1。
2024-07-11 22:11:05
241
原创 刷代码随想录有感(131):动态规划——回文子串
我们在判断字符串S是否是回文,那么如果我们知道 s[1],s[2],s[3] 这个子串是回文的,那么只需要比较 s[0]和s[4]这两个元素是否相同,如果相同的话,这个字符串s 就是回文串。
2024-07-10 20:11:40
358
原创 刷代码随想录有感(129):动态规划——两个字符串的删除操作
思路:将两个字符串除公共最长子序列以外的所有字符删除,所以问题便转换成了找出公共最长子序列,删除操作的步数即为两个字符串长度总和减去2 * 最长公共子序列长度。
2024-07-08 17:40:35
158
原创 刷代码随想录有感(128):动态规划——不同的子序列
一部分是用s[i - 1]来匹配,那么个数为dp[i - 1][j - 1]。即不需要考虑当前s子串和t子串的最后一位字母,所以只需要 dp[i-1][j-1]。一部分是不用s[i - 1]来匹配,个数为dp[i - 1][j]。
2024-07-07 19:56:01
341
原创 刷代码随想录有感(125):动态规划——最长公共子序列
递推公式:如果相同,则后一个为前一个长度加一;如果不相同(如图c不等于e),情况一:考虑c不考虑e,则变成abc与ac的最长公共子序列,此时为dp[i][j-1]; 情况二:考虑e不考虑c,则变成ace与ab的最长公共子序列,此时为dp[i-1][j]。综上最后dp[i][j]取他们当中最大的一个。
2024-07-04 18:05:32
248
原创 刷代码随想录有感(124):动态规划——最长重复子数组
定义:dp[i][j] :以下标i - 1为结尾的A,和以下标j - 1为结尾的B,最长重复子数组长度为dp[i][j]
2024-07-03 13:39:27
250
原创 刷代码随想录有感(123):动态规划——最长连续递增子序列
dp[i]定义为以i结尾的最长连续子序列,如果nums[i] > nums[i - 1]则说明递增,dp[i]一定是dp[i - 1] + 1,最后把最长的那个输出即可(不同结尾长度不同,不一定是最后一个最长)。
2024-07-02 13:06:16
261
原创 刷代码随想录有感(122):动态规划——最长子序列
dp[i]表示i之前包括i的以nums[i]结尾的最长递增子序列的长度不是要dp[i] 与 dp[j] + 1进行比较,而是我们要取dp[j] + 1的最大值,即:dp[i]为dp[j]+1的最大值,递推体现在由dp[j]+1推出dp[i]。
2024-07-01 17:36:25
166
原创 UE5(c++)开发日志(2):向日志和屏幕输出信息/将C++类变为蓝图类
通过UE_LOG()向日志输出通过GEngine->AddOnScreenDebugMessage()向窗口输出
2024-06-30 14:37:57
1232
原创 刷代码随想录有感(121):贪心算法——买卖股票的最佳时机III
更新buy2为当前价格减去sell1和之前的buy2中的较小值,表示在当前价格下第二次买入股票时的最低花费, 通过不断更新,我们可以确保在第二次买入时不会支付比第一次卖出后更高的价格,从而避免亏损
2024-06-30 13:09:54
225
原创 UE5(c++)demo开发日志(1):Actor类添加
工具---新建c++类---选用Actor,创造出头文件(.h,用于声明变量、函数、重写父类函数等)和源文件(.cpp,涉及到具体功能实现),客户端界面成功显示出来新建类
2024-06-29 23:01:49
415
原创 刷代码随想录有感(120):贪心算法——买卖股票的最佳时机
贪心思路:在左边找一个最小值,通过遍历价格列表,不断更新遇到的最低价格,并计算当前价格与最低价格的差值,如果这个差值大于之前记录的最大利润,则更新最大利润。
2024-06-29 20:22:47
157
原创 刷代码随想录有感(119):动态规划——打家劫舍III(树形dp)
使用一个长度为2的数组,记录当前节点偷与不偷所得到的的最大金钱。递归顺序采用后序,即左-右-中,从下往上推。
2024-06-27 20:08:45
184
原创 刷代码随想录有感(118):动态规划——打家劫舍II
现在连成环导致首尾都要考虑了,考虑第一个则不考虑最后一个,考虑最后一个则不考虑第一个。所以要限制起始位置和终止位置,其余的都是之前的模板。
2024-06-26 11:12:13
275
原创 刷代码随想录有感(117):动态规划——打家劫舍(你需要...“考虑”一下?)
思路:当前房屋偷与不偷取决于 前一个房屋和隔两个房屋的那个是否被偷了。发现当前状态和前面状态会有一种依赖关系,那么这种依赖关系都是动规的递推公式。
2024-06-25 22:03:16
324
原创 刷代码随想录有感(116):动态规划——单词拆分
很奇怪,这次遍历物品竟然没有到头,而是限制在j长度以内。而且递推公式也不是常规:if(set.find(tmp) != set.end() && dp[i] == true)dp[j]=true
2024-06-24 22:38:04
343
原创 刷代码随想录有感(114):动态规划——最少数量的零钱换整
既然求最小的,那初始值为INT_MAX;递推公式疑虑:①dp[j] = max(dp[j], dp[j - weight[i]] + value[i])求的是容量为j的背包所装最大价值;②dp[j] = min(dp[j], dp[j-weight[i]] + 1)求的是装满所需最小量;③dp[j] += dp[j - weight[i]]表示满足条件的数量
2024-06-23 17:05:38
194
原创 刷代码随想录有感(112):动态规划——组合总和IV
这题跟零钱凑整有很大不同!!!零钱凑整是组合,这题是排序!题干明确说了“顺序不同的序列视为不同的组合”。所以这题的遍历顺序要变,得先背包再物品, 所以j只能初始化为0了,>=weight[i]只能放到if里面了。
2024-06-22 10:57:33
292
原创 无引擎游戏开发(3):数据结构设计|功能函数完善
现在回到“读取操作”部分,通过msg的x与y字段来获取鼠标点击的位置,但是现在需要将鼠标点击的位置映射到数组的索引中,一开始将数组初始化为600*600,九等分后每个格子都是200*200,单看水平方向的二维数组索引便是鼠标点击位置除以200的整数部分,竖直方向一样。这里使用了_stprintf_s这个字符串格式化函数,并且定义了TCHAR的字符数组作为格式化的缓冲区,这与printf和sprintf很像,只不过是为了在更通用的编码环境下使用。为了简单起见,我们将棋盘的二维数组定义为全局变量。
2024-06-20 14:04:19
712
原创 刷代码随想录有感(109):动态规划——01背包问题|一和零
将m, n视为背包的属性,故问题转化为了将m,n容量的背包转满最多能装多少个,而每样物品只能装一次,问题转化成了01背包问题。实际上是三维数组,只不过背包有两个属性而已,用类似是一维数组方法写。
2024-06-20 09:44:35
233
原创 无引擎游戏开发(2):最简游戏框架 | EasyX制作井字棋小游戏I
定义DrawPiece函数绘制棋子。小球在"画布“上移动的过程就是我们在调用绘图函数,这个”画布“就是渲染缓冲区,先绘制的内容可能被后面绘制的内容覆盖掉,所以调用cleardevice()函数,相当于用当前背景颜色覆盖画布实现”清屏“。小球”闪烁“的原因在于,绘制过程并不是一瞬间,而是”逐渐“发生的,先前绘制的小球被不断清除,而人眼同时观察到”绘制“与”清除“,所以有种”闪烁“的感觉。“,在主循环中不断读取玩家鼠标操作并将这些操作翻译成对数据的处理逻辑,最后再根据现有的逻辑将画面内容绘制出来。
2024-06-19 23:55:56
1800
原创 刷代码随想录有感(107):动态规划——01背包/最后一块石头的重量II
思路转化:题干就是要留下来的石头最小,那么就是让石头尽可能分成重量相同的两堆相撞然后什么都不剩,那就转化成了求容量为sum/2的背包最多装多少重量了。
2024-06-18 10:14:45
162
原创 刷代码随想录有感(106):动态规划——分割等和子集(01背包问题)
j初始是sum / 2,j >= nums[i](能放选择不放和压根放不了是两码事)。递推公式:dp[j] = max(dp[j], dp[j - nums[i]] + nums[i](weight[i] == value[i] == nums[i])定义dp[j]:容量为j的背包所能装下的最大价值,本题则是将容量为sum / 2的背包装满。如果题目给的价值都是正整数那么非0下标都初始化为0就可以了,如果题目给的价值有负数,那么非0下标就要初始化为负无穷。从dp[j]的定义来看,首先dp[0]一定是0。
2024-06-17 08:53:35
208
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人