- 博客(50)
- 收藏
- 关注
原创 03.怎么构建游戏世界
如何描述GO:属性(property)+行为(behavior)游戏对象(Game Object):动态物、静态物、环境等。使用组件化的思想多于继承。
2023-06-12 13:37:03
593
原创 02.引擎架构分类
1.工具层2.功能层:绘制、渲染、让世界里面的东西能看见、动起来3.资源层:负责加载大量的数据和文件4.核心层:游戏引擎的瑞士军刀,各种功能处理的内核5.平台层:用于适配游戏不同的发行平台第三方中间插件。
2023-06-09 20:21:23
1171
原创 代码随想录Day59 | 503.下一个更大元素II 、42. 接雨水
方法一:直接拼一个原数组在后面,模拟成环的过程方法二:取模i%nums.size(), 循环到两倍数组长度\
2023-06-04 08:09:14
227
原创 代码随想录Day 58 | 单调栈 739. 每日温度、496.下一个更大元素 I
单调栈适合解什么类型的题目:找到右边或左边第一个比它大的元素是什么。
2023-06-01 19:49:21
131
原创 代码随想录Day57 | 647. 回文子串、516.最长回文子序列 动态规划完结!
dp含义:布尔类型的dp[i][j]:表示区间范围[i,j] (注意是左闭右闭)的子串是否是回文子串,如果是dp[i][j]为true,否则为false初始化:dp[i][j]为false遍历顺序:从上到下,从左到右。
2023-05-31 20:26:39
175
原创 代码随想录Day56 | 583. 两个字符串的删除操作 、72. 编辑距离
dp含义:dp[i][j]:以i-1为结尾的字符串word1,和以j-1位结尾的字符串word2,想要达到相等,所需要删除元素的最少次数。递推公式:考虑两种情况遍历顺序:从上到下,从左到右方法二:求出两个字符串的最长公共子序列长度,用两个字符串的总长度减去两个最长公共子序列的长度就是删除的最少步数。
2023-05-30 20:56:09
182
原创 代码随想录Day55 | 392.判断子序列 、115.不同的子序列
dp含义:dp[i][j] 以i-1为结尾的s中有以j-1为结尾的t的个数初始化:第一行第一列初始化遍历顺序:从上到下 从左到右。
2023-05-29 11:12:26
143
原创 代码随想录Day53 | 1143.最长公共子序列 、1035.不相交的线 、53. 最大子序和 动态规划
dp含义:dp[i][j] 以[0,i-1]nums1和[0,j-1]nums2的最长公共子序列的长递推公式:dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]);初始化:dp[i][0]=0,dp[0][j]=0遍历顺序:i,j从1开始。
2023-05-29 10:15:53
325
原创 代码随想录Day52 子序列问题
dp含义:以下标i - 1为结尾的A,和以下标j - 1为结尾的B,最长重复子数组长度为dp[i][j]递推公式:nums[i]>nums[i-1] dp[i]=dp[i-1]+1。递推公式:dp[i][j] = dp[i - 1][j - 1] + 1。递推公式:dp[i]=max(dp[i]+1,dp[i])dp含义:以下标i为结尾的连续递增的子序列长度为dp[i]初始化:dp[i][0] 和dp[0][j]初始化为0。dp含义:以nums[i]为尾的最长连续子序列的长度。初始化:dp[i]=1。
2023-05-26 20:02:21
618
原创 代码随想录Day49 50 51 股票问题
121. 买卖股票的最佳时机dp含义:dp[i][0]持有股最大金额,dp[i][1]不持有最大金额初始化:dp[0][1]:0遍历顺序:从前往后122.买卖股票的最佳时机II与上一题的唯一不同点在于递推公式,可以买卖多次123.买卖股票的最佳时机IIIdp含义:dp[i][0]不操作dp[i][1]第一次持有dp[i][2]第一次不持有dp[i][3]第二次持有dp[i][4]第二次不持有递推公式:初始化:dp[0][0]=0dp[0][2]=0dp[0][4]=0。
2023-05-25 17:07:39
391
原创 代码随想录Day48 | 198.打家劫舍 、213.打家劫舍II 、337.打家劫舍III
dp含义:考虑下标i(包含),能偷得的最大金币数为dp[i]递推公式:dp[i]=max(dp[i-2]+nums[i],dp[i-1])初始化:dp[0]=nums[0];遍历顺序:从小到大。
2023-05-22 20:29:44
108
原创 代码随想录Day46 | 139.单词拆分
dp含义:字符串长度为i,dp[i]为true(true表示可以拆分成一个或者多个在字典里出现的词)遍历顺序:先遍历背包后遍历物品。初始化:dp[0]=true。
2023-05-20 10:36:10
202
原创 代码随想录Day44 | 完全背包、518. 零钱兑换 II 、377. 组合总和 Ⅳ
每个物品可以装无数次,求放在背包里的最大价值01背包物品正序,背包倒序完全背包物品正序,背包也正序,两层for循环可以颠倒。
2023-05-18 16:40:51
160
原创 代码随想录Day43 | 1049. 最后一块石头的重量 II 、 494. 目标和 、474.一和零
dp含义:容量为j的背包,最多可以背最大重量为dp[i]递推公式:dp[j] = max(dp[j], dp[j - stones[i]] + stones[i])初始化:dp[j]=0遍历顺序:先物品后背包,先顺序后倒序。
2023-05-17 19:55:03
194
原创 代码随想录Day42 | 416. 分割等和子集
0-1背包问题:有n种物品,每种物品只有一个完全背包问题:有n种物品,每种物品有无限个n重背包:有n种物品,每种物品个数各不相同。
2023-05-16 21:06:09
76
原创 代码随想录Day41 | 343. 整数拆分 、96.不同的二叉搜索树
尽可能拆成相同的数dp数组含义:拆得最大积为dp[i]递推公式:dp[i] = max(dp[i], max((i - j) * j, dp[i - j] * j));初始化:dp[2]=1遍历顺序:从前往后遍历。
2023-05-15 20:27:00
221
原创 代码随想录Day39 | 62.不同路径 、 63. 不同路径 II
dp含义:走到dp[i][j]有多少种不同的路径递推公式:dp[i][j]=dp[i-1][j]+dp[i][j-1]初始化:i<m;i<n;遍历顺序:从左往右,从上往下打印。
2023-05-13 12:01:36
80
原创 代码随想录Day38 | 509. 斐波那契数 、70. 爬楼梯 、 746. 使用最小花费爬楼梯
1.动归基础问题2.背包问题3.打家劫舍4.股票问题5.子序列问题。
2023-05-13 11:08:05
144
原创 代码随想录Day36 | 435. 无重叠区间 、763.划分字母区间 、56. 合并区间
1.先对左边界进行排序2.再去看第i个左边界和第i-1个右边界有没有重叠(i从1开始),如果重叠,更新第i个区间的有边界为min{nums[i],nums[i-1]}
2023-05-10 20:43:21
53
原创 代码随想录Day35 | 860.柠檬水找零 、406.根据身高重建队列 、452. 用最少数量的箭引爆气球
一共就三种情况:1.给你一张5块 收下就行。五块+12.给你一张10块,此时如果没有5块 return false,有则5块-13.给你一张20块,此时可以选择给一张10块和一张5块或者给三张5块。应该优先给一张10块和一张5块(贪心的体现)因为5块更为通用。如果都满足不了return false。
2023-05-09 21:03:21
123
原创 代码随想录Day34 | 1005.K次取反后最大化的数组和 、134. 加油站、135. 分发糖果
使用两次贪心的策略:先找负数对其取反,是数组里的值全为正数。再对最小的正数值取反,消耗掉剩下的取反次数。
2023-05-08 21:13:53
59
原创 代码随想录Day29 | 491.递增子序列、46.全排列、47.全排列 II
unordered_set是局部变量,每一次递归都重新定义一个set,用来判断当前树层有没有重复的元素。这里的unodered_set可以换成数组。
2023-05-05 16:19:33
50
原创 代码随想录Day25 | 216.组合总和III、17.电话号码的字母组合
注意本题中有两个剪枝操作,还有回溯的过程也不要忘记。树的深度由输入数字的个数决定。宽度由数组中的元素个数控制。17.电话号码的字母组合。216.组合总和III。有一个隐藏回溯需要注意。
2023-04-30 10:14:40
245
原创 代码随想录Day23 | 77. 组合
回溯算法:一种纯暴力搜索方法,能解决以下几种问题(或者说解决for循环解决不了的问题)一般来说回溯法都是没有返回值的(void)回溯法可以抽象成一个树形结构(n叉树)剪枝操作,修改中间for循环的范围。4.排列问题(强调元素顺序)
2023-04-28 17:51:31
53
原创 代码随想录Day23 | 669. 修剪二叉搜索树、108.将有序数组转换为二叉搜索树、538.把二叉搜索树转换为累加树
根节点小于low,就往右子节点去找合适的值,返回在区间内的节点。根节点大于high,就往左子节点找合适的值,返回在区间内的节点。
2023-04-27 21:16:19
70
原创 代码随想录Day22 | 235. 二叉搜索树的最近公共祖先、701.二叉搜索树中的插入操作、 450.删除二叉搜索树中的节点
以右子树继承为例:让其父节点指向删除节点的右子树,然后把删除节点的左子树移到原右子树的左节点。以左子树继承为例:让其父节点指向删除节点的左子树,然后把删除节点的右子树移到原左子树的右节点。和找二叉树的最近公共祖先类似,更简单,可以利用二叉树的特性。2.左不空右为空:让其父节点直接指向左孩子。3.左为空右不空:让其父节点直接指向右孩子。4.左不空右也不空:左右孩子都可以继位。1.左为空右为空(叶子结点)插入到叶子结点比较简单。(1)没找到删除的点。
2023-04-26 15:54:08
69
原创 代码随想录算法Day21 | 530.二叉搜索树的最小绝对差、501.二叉搜索树中的众数 、236. 二叉树的最近公共祖先
另外一种是使用双指针法,定义一个cur和一个pre指针遍历真个二叉树,先令cur=pre,再移动cur。有两种方法,一种是中序遍历后存入数组,然后再遍历整个数组找到相邻两个差值最小的元素。有p和q在同一条链上的可能,但是代码逻辑已经包含了这种情况。边遍历边统计,只用一边遍历就行,也是使用了双指针的思想。二叉搜索树用中序遍历后可以得到一个有序数组。
2023-04-26 11:36:09
49
原创 代码随想录Day20 | 654.最大二叉树 、 617.合并二叉树 、 700.二叉搜索树中的搜索 、98.验证二叉搜索树
构造树一般采用的是前序遍历,因为先构造中间节点,然后递归构造左子树和右子树。
2023-04-24 22:00:03
75
原创 代码随想录Day 18 | 513.找树左下角的值、 112. 路径总和 113.路径总和ii、 106.从中序与后序遍历序列构造二叉树 105.从前序与中序遍历序列构造二叉树
递归法,注意回溯的细节。
2023-04-23 15:33:32
52
原创 代码随想录算法Day17 | 110.平衡二叉树 、257. 二叉树的所有路径 、404.左叶子之和
复习一下递归三部曲:1.确定递归函数的参数和返回值2.确认终止条件3.确认单层递归的逻辑此题为比较高度,使用左右中后序遍历。
2023-04-21 17:26:09
63
原创 代码随想录Day16 | 104.二叉树的最大深度 、111.二叉树的最小深度、222.完全二叉树的节点个数
104.二叉树的最大深度二叉树深度是从上往下数(前序遍历),高度是从下往上数(后序遍历),所以这道题是使用后序遍历。111.二叉树的最小深度叶子节点,左右孩子都为空的节点才是叶子节点也是使用后序遍历,注意避开陷阱,root结点的左孩子或右孩子为空的情况222.完全二叉树的节点个数。
2023-04-20 21:49:03
133
原创 代码随想录Day15 | 层序遍历 、226.翻转二叉树 、101.对称二叉树 2
遍历每一层都用一个数组去装结点值,所以定义一个二维数组去装这些数组。队列先进先出,符合一层一层的逻辑,而用栈先进后出适合模拟深度优先遍历也就是的逻辑。
2023-04-19 21:57:49
51
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人