自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(43)
  • 收藏
  • 关注

原创 53. 最大子序和 392.判断子序列

此题和 1143.最长公共子序列 几乎相同。此题较为简单,注意递推公式即可。

2023-08-04 10:00:17 104

原创 718. 最长重复子数组 1143.最长公共子序列1035.不相交的线

这里不用要求是连续,所以dp【i】【j】 不管是否相等,都要继承前面的,也就有了else中的dp【i】【j】 = max(dp[i][j - 1] , dp[i - 1][j]);第一种(以i-1结尾) if ( nums1[i - 1] == nums2[j - 1] ) dp[i][j] = dp[i - 1][j - 1] + 1;第二种(以i结尾) if ( nums1[i] == nums2[j] ) dp[i][j] = dp[i - 1][j - 1] + 1;注意if 中是 i - 1;

2023-08-03 10:29:22 164

原创 309.最佳买卖股票时机含冷冻期 714.买卖股票的最佳时机含手续费 300.最长递增子序列

dp[i][2] 未持有股票 (可以买股票的状态,即过了冷冻期后的一天和以后)手上还有的钱。

2023-07-30 11:07:47 144

原创 122.买卖股票的最佳时机II 123.买卖股票的最佳时机III 188.买卖股票的最佳时机IV

与 I 差别不大,主要是可以一直买卖,dp【i】【0】的递推就有所变化,变为dp[i - 1][1] - prices[i]初始化时 1,3,5 为持有股票(即买股票)初始化为-prices【0】;//dp[i][2] 第一次不持有股票所获得的钱。//dp[i][4] 第二次不持有股票所获得的钱。//dp[i][1] 第一次持有股票所获得的钱。//dp[i][3] 第二次持有股票所获得的钱。dp[i][1] 未持有股票所获得的钱。dp[i][0] 持有股票所获得的钱。//dp[i][0] 无操作。

2023-07-28 10:35:46 130

原创 337.打家劫舍 III 121. 买卖股票的最佳时机

dp[i][1] 在第i天 手中没有有股票 的利润,由max(前一天没股票的利润,这一天卖股票的利润 即 (前一天手里有股票的利润 + 卖的钱)dp[i][0] 在第i天 手中有股票 的利润,由max(前一天有股票的利润,这一天买股票的利润 即(-prices【i】))树形dp,采用后序遍历,用dp【0】,dp【1】 分别表示不取当前物品,和取当前物品的所获最大利润。

2023-07-27 10:03:46 47

原创 139.单词拆分 198.打家劫舍 213.打家劫舍II

将环形数组,分成 两种单块数组,一种是 包括头 不包括尾 , 另一种包括尾 不包括头。dp[j] 表示从 第0个屋子到第j个屋子所能获得的最大资金为dp[j]

2023-07-26 11:52:38 30

原创 377. 组合总和 Ⅳ 322. 零钱兑换 279.完全平方数

排列 : 先遍历 背包,在遍历 物品,选一个背包,循环一遍 物品,物品要遍历很多遍,实现不同的顺序。组合 : 先遍历 物品,在遍历 背包 ,先选一个物品,之后循环一遍背包,物品就遍历一遍,没有顺序。dp[ j ] 表示组成数 j 所需要的最少完全平方数的个数时dp[ j ]与之前不同在于,此题求得是最少,初始化时要将数值都初始化为最大值。dp[j] 表示组成大小为 j 有dp[j]种方法。由于不同顺序的组合也是不同的,所以相当于是排列。同时题目说了dp[0] = 0。排列和组合的不同在于遍历顺序。

2023-07-25 09:03:18 37

原创 474.一和零 518.零钱兑换II

dp[i][j] i表示0的个数,j表示1的个数,dp[i][j]表示有i个0,j个1的集合有dp[i][j]个元素。与0 1 背包不同的是遍历顺序,完全背包第二层遍历采用 正序遍历,在往后推时也就重复使用了每个物品。dp[j] 组成总金额为j,有dp[j]种组合方法,将dp[0] 初始化为1;两层循环得到每一个元素有 x 个0 , y 个1。

2023-07-24 11:03:39 23

原创 416. 分割等和子集 1049.最后一块石头的重量II 494.目标和

解题关键:找到中间划分点,尽可能将石头分为两组重量近似的,之后相减就是最小值。递推公式 dp[ j ] += dp[ j - nums[ i ] ];将nums分为两组,left和right,代表为正号数和和负号数和。如果sum是奇数,一般就会有小数点,就不可能有正整数组成小数点。dp[ j ] 组成数 j 共有dp[ j ]种方法。dp[j] 容量为j的背包,所装的价值为dp[j]与上一题类似,只是结果处理有些差距。物品重量和价值是相等的。

2023-07-23 10:29:11 24

原创 343. 整数拆分 96.不同的二叉搜索树

可能是拆成多个数((即j*dp[i - j])其中dp[i - j]最少是两个数)dp[0] , dp[1] 都不可拆分 所以不用初始化 , dp[2] 拆分成1 + 1 最大乘积为 1。1. j 是将 i 从 1 * (j - 1) , 2 * ( j - 2)。一直拆分到 i/2*(i - i/2)dp[0](即没有元素的二叉树)也算一种情况,将dp[0]初始化为1;dp[i] 表示 将i拆分所得到的最大乘积为dp[i];dp[i] 表示 有i个节点的二叉搜索树有dp[i]种。采用从前往后遍历就行。

2023-07-20 10:59:57 21

原创 746. 使用最小花费爬楼梯 62.不同路径 63. 不同路径 II

dp[i][j] 表示到达(i,j) 的路径方法和。dp【i】 表示到达第i个台阶所需要的最小费用。将dp【0】 和 dp【1】 初始化为0,0。第五步 判断dp数组是否正确,打印dp数组看看与实际是否一样。第五步 判断dp数组是否正确,打印dp数组看看与实际是否一样。采用从前往后遍历,从上往下遍历。与上一题思路相同,遇到障碍,跳过不去计算它的dp,在初始化时,遇到障碍时,在障碍之后都不能初始化到。第三部 dp数组的初始化。第三部 dp数组的初始化。第四步 确定遍历顺序。第四步 确定遍历顺序。

2023-07-18 10:47:07 23

原创 509. 斐波那契数 70. 爬楼梯

dp【3】 表示登上第3层楼梯有几种方法: 3 种 先登上第一层楼梯 在登上两层楼梯。dp【2】表示登上第2层楼梯有几种方法: 2种 跨两次一步 和 跨两步。dp【i】 表示 登上第i层楼梯 有多少种方法。将dp【0】 和 dp【1】 初始化为0,1。将dp【1】 和 dp【2】 初始化为1,2。注意此题 dp【1】 表示登上第1层楼梯有几种方法 :一种 跨一步。第五步 判断dp数组是否正确,打印dp数组看看与实际是否一样。第五步 判断dp数组是否正确,打印dp数组看看与实际是否一样。

2023-07-18 08:58:53 30

原创 738.单调递增的数字 v 968.监控二叉树

4.如果 遍历到根节点之后,根节点仍然是无覆盖状态,就要在根节点上额外添加上一个摄像头。1. 左右孩子都是有覆盖(即为2),相当于是叶子节点,因为空节点默认为有覆盖(即为2)3. 如果左右孩子中有一个装了摄像头(即为1),则他的父节点一定为有覆盖状态(即为2)2. 左右孩子中有一个为无覆盖状态(即为0),则他的父节点一定要装个摄像头(即为1)用从后往前遍历,找到不符合题目的位置,将位置之后全部变为9;他们的父节点返回 无覆盖(即为0)

2023-07-14 10:40:14 24

原创 452. 用最少数量的箭引爆气球 435. 无重叠区间 763.划分字母区间 56. 合并区间

主要问题是记录字母出现的最后一个位置,采用覆盖计数。输出移除空间的个数,如果区间重叠就结果加一。注意第一个区间一定在结果集里,区间判定问题,主要找重叠区间。

2023-07-13 10:01:08 25

原创 134. 加油站 860.柠檬水找零 406.根据身高重建队列

首先计算 此处加油站所加油 与 下一处所耗油的 差值,将每处都相加,如果和为负,代表无论如何都跑不到,将起始位置 设为i + 1,排完后按照 排的从大到小的顺序 ,一个一个将每个数按照第二个数的位置 插入。先按照第一个数大小排序 ,如果第一个数大小相等 ,就按照第二个数排。为什么可以不用管跑步跑完一圈?此题就是正常的思路,先找钱找大的。题目有解,该答案即为唯一答案。对于所有总和为正 就代表有解。

2023-07-12 09:44:49 19

原创 1005.K次取反后最大化的数组和 135. 分发糖果

按照 绝对值 从大到小顺序排 , 从前往后遍历 ,遇到 负的 改变, 如果到最后还没用完次数 就一直改变 最后一个 (最小的)注意 max 一定要是max 不能 直接 等于 candy【i+1】 + 1。

2023-06-14 16:37:32 36

原创 122.买卖股票的最佳时机 II 55. 跳跃游戏 45.跳跃游戏 II

将每一天的 股票都进行 买卖 , 只讲赚的加一起 ,就是最大利润。相当于 动态调整 cover。

2023-06-11 16:22:51 65

原创 455.分发饼干 376. 摆动序列 53. 最大子序和

先用for遍历 饼干 ,if 遍历胃口 从小到大遍历。

2023-06-11 15:36:35 35

原创 51. N皇后

isvalue 遍历的是 已经填的 有Q的那部分, 不包括 传入的以下部分。

2023-06-11 15:05:16 19

原创 491.递增子序列 46.全排列 47.全排列 II

排列 不能 用 startindex 因为 startindex 取得是 它之后的 元素 , 排列是 所有元素都要 有。unordered_set 不是全局变量, 是每层树 的 变量 , 所以不用 回溯 , 每层都是新的。收结果 时 不能直接return 会缺少 三个数的结果。用 used 记录 取过的元素 如果 取过 就跳过。去重 前 一定 要 排序 , 将相同的数 放到一起。去重和之前一样 用used。

2023-06-07 16:26:50 46

原创 93.复原IP地址 78.子集 90.子集II

和组合不同的是 子集在每个节点取值 ( 在函数头就取值)insert 是 在 指定位置的前面添加。区间是 startindex 到 i。

2023-06-07 16:19:23 15

原创 39. 组合总和 40.组合总和II 131.分割回文串

先给数组排序 将相等的两个数 排在一起, 当现在 所取的数 和 前一个数 一样 且 前一个数没有被用过 就可以 跳过当前一个数( 将树 的 树干 剪掉 一些 ) 如果 前一个数用过, 那是将结果中有相同元素的 结果删掉了。关键时 如何取划分 区间, startindex 不动 , i 从 startindex 往后 遍历,区间 就从 startindex 到 i , 判断 是否为回文数,给的数字有重复的数字 ,关键时去除 重复的 结果。注意 substr(起点 , 长度)

2023-06-06 14:59:08 20

原创 216.组合总和III , 17.电话号码的字母组合

backtracking( digits , index + 1 ) 中的index + 1 是将数组改变到 下一个数组。组合问题 中 每次递归 都会将 数组减一 , 也就和这个一样 相当于 将一个数组变到另一个数组。每次递归 相当于 在 一个数组 中 取一个元素。和组合问题 多了一个。

2023-06-03 16:46:04 35

原创 #第77题. 组合

当path == 0 时 4 - ( 2 - 0 ) + 1 = 3 ,表示 取到 3 时 就是 最大 的 取值 , 之后的 都不行要舍掉。n - ( k - path.size() ) 是对递归的剪枝操作,确保 递归的数组中 要多余 要求的 k 个元素。for循环相当于 上图 第一行, 每一次递归只取 数组中的 一个数。

2023-06-03 16:39:47 20

原创 450.删除二叉搜索树中的节点,669. 修剪二叉搜索树,108.将有序数组转换为二叉搜索树,538.把二叉搜索树转换为累加树

第五种情况:左右孩子节点都不为空,则将删除节点的左子树头结点(左孩子)放到删除节点的右子树的最左面节点的左孩子上,返回删除节点右孩子为新的根节点。第三种情况:删除节点的左孩子为空,右孩子不为空,删除节点,右孩子补位,返回右孩子为根节点。第四种情况:删除节点的右孩子为空,左孩子不为空,删除节点,左孩子补位,返回左孩子为根节点。第二种情况:删除节点的左右孩子都为空,直接删除节点, 返回NULL为根节点。不用重构二叉树, 直接将删除节点后边的元素连到没删除的节点的后边。如果采用 右中左 , 就是。

2023-06-03 16:31:12 22

原创 235. 二叉搜索树的最近公共祖先 , 701.二叉搜索树中的插入操作

由于是二叉搜索树 , 公共祖先 也就是 在p ,q 之间的值。此题并不需要重构,不是平衡二叉搜索树 , 不用重构。如果在往下搜索 , p, q 就会分为两个树。直接找到叶子节点 插入就行。

2023-06-01 09:42:31 23

原创 530.二叉搜索树的最小绝对差 , 501.二叉搜索树中的众数 , 236. 二叉树的最近公共祖先

result 巧妙利用 count 与 ma 的大小关系 ,如果 找到比 ma 大的 就 清空result ,之后添加当期 的 val。二叉搜索树 中序遍历 是 递增的 , 所以最小的差值就在中序遍历中相邻的两个数中间。由于是二叉搜索树, 所以一样的数 只会相邻出现。p,q 只用与寻找 ,和返回判断条件。

2023-06-01 09:34:51 22

原创 654. 最大二叉树,617. 合并二叉树,700. 二叉搜索树中的搜索,98. 验证二叉搜索树

给你一个数组 找到 最大值 作为 根节点 ,以最大值为分界限, 左边 是 左子树 , 右边 是 右子树 ,也按照最大为根节点 构建二叉树注意递归结束条件是 left 》= right 如果没有等于root -> right = creat( num , maxindex + 1 , right )数组操作会 超过界限将两个二叉树合并中序遍历下,输出的二叉搜索树节点的数值是有序序列。

2023-05-30 18:13:28 33

原创 平衡二叉树 , 二叉树的所有路径 , 左叶子之和

如果该节点的左节点不为空,该节点的左节点的左节点为空,该节点的左节点的右节点为空,则找到了一个左叶子。以 -1 作为 结束标志 ,一遇到 -1 就返回 -1 直到 最后。一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。

2023-05-29 09:33:56 17

原创 找树左下角的值, 路径总和 , 从中序与后序遍历序列构造二叉树

给定两个整数数组 inorder 和 postorder ,其中 inorder 是二叉树的中序遍历, postorder 是同一棵树的后序遍历,构造并返回这颗 二叉树。第四步:切割中序数组,切成中序左数组和中序右数组 (顺序别搞反了,一定是先切中序数组)第二步:如果不为空,那么取后序数组最后一个元素作为节点元素。第三步:找到后序数组最后一个元素在中序数组的位置,作为切割点。第五步:切割后序数组,切成后序左数组和后序右数组。第一步:如果数组大小为零的话,说明是空节点了。第六步:递归处理左区间和右区间。

2023-05-29 09:20:10 83

原创 二叉树最大深度,二叉树最小深度,完全二叉树节点个数

深度 是 节点 到 节点头的距离 从头 到 底 计数高度 是 节点 到 叶子节点 的距离 从 底 到 顶 计数a 函数 相当于 max 函数 ,想试试三目运算 就自己写l。

2023-05-27 10:07:21 255

原创 层序遍历,反转二叉树,对称二叉树

注意 队列中 存的是链表的节点 不只是数。判段一个 二叉树 是否关于 中心轴 对称。一层层遍历二叉树 , 是广度优先搜索。相当于 沿着 中间反转 过去。将每个节点的左右孩子进行反转。同时相等 就是 对称二叉树。右边节点 的 右孩子。右边节点 的 左孩子。

2023-05-27 09:39:38 260

原创 二叉树的遍历

注意 一开始 头节点 入栈时 要判断 是否为空。

2023-05-24 18:05:41 396

原创 滑动窗口最大值 和 前 K 个高频元素

给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。返回 滑动窗口中的最大值。示例 1:输入:nums = [1,3,-1,-3,5,3,6,7], k = 3输出:[3,3,5,5,6,7]解释:滑动窗口的位置 最大值pop函数 删除 移动前 的 第一个 元素 ,所以 要看是否 和 myqueue的首元素是否相等。

2023-05-23 22:56:00 507 1

原创 栈与队列 的 相互 实现

请你仅使用两个栈实现先入先出队列。boolean empty() 如果队列为空,返回 true;否则,返回 false。代码使用 一个 队列 , 每次 出队 是 进队 到 队末尾,可以少用一个队列。void push(int x) 将元素 x 推到队列的末尾。int pop() 从队列的开头移除并返回元素。int peek() 返回队列开头的元素。

2023-05-20 21:12:12 568 1

原创 day 11

给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。这题比较简单,只要注意在入栈时 入的是 括号的相反的一个 这样在出栈时直接比较是否相等就行。给出由小写字母组成的字符串 S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。给你一个字符串数组 tokens ,表示一个根据 逆波兰表示法 表示的算术表达式。有效的算符为 '+'、'-'、'*' 和 '/'。输入是一个根据逆波兰表示法表示的算术表达式。每个右括号都有一个对应的相同类型的左括号。

2023-05-20 20:57:41 551 1

原创 字符串 leetcode

比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。i 为句子最后一个字母 的下表 ,j 表示扩充数组后 最后的一个,j 和 i 同时 前进 ,j 记录 i 的元素。space 用来 记录 空格 个数,因为空格本身是可以填充的 ,所以添加的空间 就是 空格个数的2倍,请实现一个函数,把字符串 s 中的每个空格替换成"%20"。

2023-05-18 20:09:32 596 1

原创 四数相加II

这个和 找 同分异构 一样 ,第一次遍历后数组 记录 出现次数, 之后 遍历 删除 出现 元素, 如果最后 记录的个数 有 负数 就不能 构成。用 双指针 解法 ,边界 和去重 是重点 , 最开始的去重 要注意 一开始 就是 所求结果的 情况。所以 是 用 num 与num【 i - 1 】 进行比较 , 其他 去重 与 他后一个比较就行。此题与 三数之和 相同 , 只是多一个 循环 遍历第一个。

2023-05-17 21:45:40 696 1

原创 leetcode

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。targe 与 num 的差 ,如果 有 就返回 俩下标 , 否则 就 将 num 与 下表 记录到 map 的 哈希表 中。将第一个数组 记录到 set 中 ,再遍历第二个 数组 将 重复 元素 添加到 新的set 表中 作为 输出。也可以采用 map 用数组值 为 哈希表的键 ,用 数组下标 为 哈希表的值,在 哈希表 中 查找。

2023-05-15 21:11:47 1142 1

原创 两两交换链表中的节点 , 删除链表的倒数第N个节点 , 环形链表II

先让 快指针 走 n 个 之后 让快慢指针 一起走 直到 快指针的下一个 为空 (这等价与 让快指针 先走 n +1个之后快慢 一起走 直到 快指针为空 ) 当前快指针就为 所要处理 的元素 的 前一个 之后 删除就 行。环的入口 采用 数学方式 推理 可以 得知 当 一个指针 从 头 走 , 一个指针从 两指针相遇的地方 往前 走 , 相遇的 地方 即为 入口。即 (x + y ) * 2 = x + y + n*(y + z ) 化简 的 x = n * ( x + z ) - y。

2023-05-13 16:35:50 36 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除