自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 力扣每日一题1186. 删除一次得到子数组最大和【动态规划】

dp[i][0]表示以第i个元素结尾且未删除元素的子数组的最大和。dp[i][1]表示以第i个元素结尾且删除了一个元素后的子数组的最大和。

2024-07-21 16:02:44 266

原创 目标和问题:从回溯到动态规划的旅程

定义dp[i][j]表示使用前i个数字,是否可以组成和为j的子集数。状态定义dp[i][j]表示使用前i个数字,是否可以组成和为j的子集数。状态转移方程:通过递推关系,逐步求解子问题,从而解决原问题。从后往前遍历:确保在计算新的dp[j]时,dp[j]和仍然是上一轮循环的结果,避免在当前轮次中使用已更新的值。从前往后遍历:可能会使用当前轮次已经更新的,导致错误的结果。希望这个解释能够帮助你更好地理解为什么在一维动态规划中需要从后往前遍历。如果还有任何问题,请随时告诉我!

2024-07-04 18:02:46 720

原创 力扣每日一题(2024-6-18)2288. 价格减免

本文章是对官方题解的补充说明。

2024-06-18 09:20:03 863

原创 力扣每日一题(2024-06-14)2786. 访问数组中的位置使分数最大

给定一个下标从 0 开始的整数数组 和一个正整数 。你一开始在数组的第 0 个位置,你可以移动到满足 的任意位置 。如果你访问的位置 ,你可以获得分数 。如果从位置 移动到位置 且 和 的奇偶性不同,那么你将失去分数 。请返回你能得到的最大得分之和。我们需要用动态规划来解决这个问题,通过维护一个状态数组来记录在不同奇偶性下的最大得分。具体地:状态定义: 表示当前最后一个元素为偶数时的最大得分。 表示当前最后一个元素为奇数时的最大得分。状态初始化:初始情况下,你在位置 ,所以得分为 。根据 的奇

2024-06-14 10:04:20 317 3

原创 力扣每日一题(2024-06-13)2813. 子序列最大优雅度

基于官方题解,进行补充说明给你一个长度为n的二维整数数组items和一个整数k。,其中profiti和categoryi分别表示第i个项目的利润和类别。现定义items的的可以用计算,其中是子序列中所有项目的利润总和,是所选子序列所含的所有类别中不同类别的数量。你的任务是从items所有长度为k的子序列中,找出。用整数形式表示并返回items中所有长度恰好为k的子序列的最大优雅度。数组的子序列是经由原数组删除一些元素(可能不删除)而产生的新数组,且删除不改变其余元素相对顺序。17。

2024-06-13 15:41:22 898

原创 力扣 437. 路径总和 III

前缀和的使用前缀和表示从根节点到当前节点路径上所有节点值的累加。用记录路径和及其出现的次数,通过这种方式可以在 O(1) 时间内检查某个路径和是否存在。路径不需要从根节点开始通过记录每个节点的路径和,并检查是否在中,可以判断从某个之前的节点到当前节点的路径和是否等于targetSum。路径不需要在叶子节点结束递归遍历每个节点,包括中间节点,通过检查路径和的差值,可以识别路径和为targetSum的路径,不论它是否在叶子节点结束。回溯。

2024-06-12 21:05:05 374 1

原创 代码随想录算法训练营(JAVA)| 第七章 回溯算法part03

切割问题可以抽象为组合问题如何模拟那些切割线切割问题中递归如何终止在递归循环中如何截取子串如何判断回文切割过的地方不能重复切割所以递归函数需要传入i + 1。

2024-03-18 12:39:35 778

原创 代码随想录算法训练营(JAVA)| 第七章 回溯算法part02

​力扣216. 组合总和 III,17. 电话号码的字母组合​

2024-03-15 20:12:52 552

原创 代码随想录算法训练营(JAVA)| 第六章 二叉树part07

​力扣530. 二叉搜索树的最小绝对差,501. 二叉搜索树中的众数​

2024-03-13 18:38:41 536

原创 代码随想录算法训练营(JAVA)| 第六章 二叉树part08

​力扣236. 二叉树的最近公共祖先,235. 二叉搜索树的最近公共祖先,701. 二叉搜索树中的插入操作,450. 删除二叉搜索树中的节点​

2024-03-13 03:41:21 930

原创 代码随想录算法训练营(JAVA)| 第六章 二叉树 part06

​力扣654. 最大二叉树,617. 合并二叉树,700. 二叉搜索树中的搜索,98. 验证二叉搜索树​

2024-03-11 15:00:19 900

原创 代码随想录算法训练营(JAVA)| 第六章 二叉树 part05

​力扣513. 找树左下角的值, 112. 路径总和,113. 路径总和 II,106. 从中序与后序遍历序列构造二叉树​

2024-03-10 18:38:07 573

原创 代码随想录算法训练营(JAVA)| 第六章 二叉树part04

​力扣110. 平衡二叉树, 257. 二叉树的所有路径,404. 左叶子之和​

2024-03-08 23:42:37 530

原创 代码随想录算法训练营(JAVA)| 第六章 二叉树 part02

​力扣102. 二叉树的层序遍历, 226. 翻转二叉树, 101. 对称二叉树​

2024-03-07 15:17:02 561

原创 代码随想录算法训练营(JAVA)| 第六章 二叉树part03

​力扣104. 二叉树的最大深度, 559. N 叉树的最大深度,111. 二叉树的最小深度,222. 完全二叉树的节点个数​

2024-03-07 15:15:27 448

原创 力扣 4. 寻找两个正序数组的中位数

因此,我们可以安全地排除 (A) 中的前 (k/2) 个元素,然后在剩下的元素中寻找第 (k - k/2) 小的元素。由于 (A[k/2 - 1]) 小于 (B[k/2 - 1]),我们可以确定,在 (B) 数组中至少有 (k/2) 个元素是大于 (A[k/2 - 1]) 的。这里的关键点是,如果 (A[k/2 - 1]) 小于 (B[k/2 - 1]),那么 (A[k/2 - 1]) 以及它之前的所有元素(共 (k/2) 个元素)都不可能是第 (k) 小的元素。:根据比较结果,我们排除一部分元素。

2024-03-06 01:33:59 1182

原创 代码随想录算法训练营(JAVA)| 第六章 二叉树part01

​力扣144. 二叉树的前序遍历,94. 二叉树的中序遍历,145. 二叉树的后序遍历​

2024-03-05 12:46:00 681

原创 代码随想录算法训练营(JAVA)| 第五章 栈与队列part03

​力扣239. 滑动窗口最大值、 347. 前 K 个高频元素​

2024-03-04 17:56:40 722

原创 代码随想录算法训练营(JAVA)| 第五章 栈与队列part02

力扣20.有效的括号1047.删除字符串中的所有相邻重复项150.逆波兰表达式求值

2024-03-02 14:50:04 693

原创 代码随想录算法训练营(JAVA) | 第五章 栈与队列part01

​力扣232. 用栈实现队列, 225. 用队列实现栈​

2024-03-01 10:51:34 253

原创 代码随想录算法训练营(JAVA)| 第四章 字符串part02 DAY08

​力扣28. 找出字符串中第一个匹配项的下标, 459. 重复的子字符串​

2024-02-29 10:52:10 218

原创 代码随想录算法训练营(JAVA) |第四章 字符串part01 DAY07

​力扣344. 反转字符串,541. 反转字符串 II,54. 替换数字,151. 反转字符串中的单词,55. 右旋字符串​

2024-02-28 18:53:07 622

原创 代码随想录算法训练营(JAVA) | 第三章 哈希表part02 DAY06

​力扣454. 四数相加 II,383. 赎金信,15. 三数之和,18. 四数之和​

2024-02-27 10:52:27 370

原创 代码随想录算法训练营(JAVA) | 第三章 哈希表part01 DAY05

​力扣242. 有效的字母异位词,349. 两个数组的交集,202. 快乐数,1. 两数之和​

2024-02-26 19:08:23 481

原创 代码随想录算法训练营(JAVA) | 第二章 链表part02 DAY04

​力扣24. 两两交换链表中的节点,707. 设计链表面试题 02.07. 链表相交707. 设计链表,19. 删除链表的倒数第 N 个结点,142. 环形链表 II​

2024-02-26 14:49:19 438

原创 代码随想录算法训练营(JAVA) | 第二章 链表part01 DAY03

​力扣 203. 移除链表元素,707. 设计链表,206. 反转链表

2024-02-25 21:44:06 204

原创 代码随想录算法训练营32期(JAVA)| 第一章 数组 part01 DAY01

力扣704.二分查找,27.移除元素

2024-02-22 11:41:01 361

原创 代码随想录算法训练营(JAVA) | 第一章 数组 part02 DAY02

力扣977.有序数组的平方,209.长度最小的子数组,59.螺旋矩阵II

2024-02-21 15:49:57 444

原创 二分搜索法的探究与心得

left + 1!= right精确的边界控制:通过保持left和right之间的间隔,这种方法减少了边界值的特殊处理,使得代码更加简洁。逻辑一致性:更新left或right变得一致和直观,不再需要额外的if判断来避免包含或排除中点值。减少错误:由于不需要处理mid - 1或mid + 1,此方法减少了由于错误更新索引而导致的无限循环或漏掉正确元素的风险。清晰的搜索意图:代码清晰地表达了搜索意图,特别是在区间分割的策略上,这对于阅读和维护代码的人来说是一个巨大的优势。可扩展性。

2024-02-11 22:10:02 752

原创 状态压缩DP--最短Hamilton路径问题的状态压缩动态规划解法

状态压缩动态规划可以在处理特定类型的组合问题时非常有用,尤其是当问题涉及到需要考虑集合的所有子集时。在这个最短Hamilton路径问题中,我们需要考虑经过每个点恰好一次的所有可能路径。为了做到这一点,我们使用状态压缩DP来枚举所有可能的点的子集,然后计算在这个子集内部,以每个点作为终点的最短路径长度。我们使用一个整数来表示状态(即点的集合)。整数的每一位对应一个点,如果某一位是1,表示该点包含在集合中;如果是0,表示不包含。例如,对于4个点的图,二进制数1011。

2024-02-06 15:12:29 825

原创 动态规划解决棋盘覆盖问题:一步步教你理解

在这个问题中,我们用f[i][j]来表示考虑到第i列时,整个棋盘的前i列形成的状态为j的覆盖方式的总数。这里的j是一个二进制数,用来表示这一列的覆盖情况,每一位代表一行,0表示该行未被覆盖,1表示该行已被覆盖。关于二进制数举个例子:第 i 列 :011000第i+2列:000010在棋盘覆盖这样的问题中,使用二进制数来表示状态是一种非常有效的方法。它可以直观地表示每一列的覆盖状态,其中每一位代表一行是否被覆盖。在你提供的例子中,我们可以将第 i 列和第 i+2 列的覆盖状态表示为二进制数。

2024-02-06 11:26:57 1072

原创 统计数字出现次数的数位动态规划解法-数位统计DP

数位DP是一种用于解决与数字的各个数位相关的问题的动态规划技术。它通常涉及到将问题分解为更小的、更易于管理的子问题,然后使用递归或迭代来解决这些子问题,同时避免重复计算。数位DP问题的关键在于如何定义状态和状态转移方程。在数位统计问题中,一个常见的状态定义包括:当前处理的数位位置(从最低位到最高位)当前数位的取值范围是否受到限制(即是否需要与给定的上限数值相匹配)其他可能影响问题解的额外条件,如前导零的处理、特定数位的取值等状态转移则依赖于当前处理的数位以及之前数位的选择如何影响后续数位的选择。

2024-02-06 01:31:16 1683

原创 动态规划之数位统计DP---整数划分问题

方法四中的状态定义。

2024-02-04 21:52:30 875

原创 最短编辑距离问题与动态规划----LeetCode 72.编辑距离

在这个问题中,我们定义f[i][j]为从word1的前i个字符转换到word2的前j个字符所需的最少操作次数。这个定义本身就隐含了一个最优子结构的性质,即要得到f[i][j]的值,我们可以依赖于f[i-1][j]f[i][j-1]和的值,这些都是更小的子问题。

2024-02-04 15:04:50 926

原创 做了三遍才懂的动态规划之线性DP---LeetCode 300. 最长递增子序列

为了构造尽可能长的上升子序列,我们采取的策略是让子序列的增长尽可能慢,即在相同长度的子序列中,选择末尾数最小的一个。:在所有长度相同的递增子序列中,末尾元素越小,为后续元素提供加入递增子序列的可能性越大,从而可能形成更长的递增子序列。数组中尽可能地使用较小的值,我们为后续的元素留出了更多的上升空间,从而使得整个上升子序列尽可能地长。数组中的所有元素,这意味着我们找到了一个更长的上升子序列,因此我们需要扩展。的上升子序列中末尾元素的最小值。数组中的正确位置,从而可以通过尽可能小的更新来延长上升子序列的长度。

2024-02-04 00:34:29 991

原创 [笔记]事务简介-springboot

同样地,在Spring Boot中,如果在同一个类中,一个没有使用事务的方法调用了一个使用了事务的方法,事务是不会生效的。例如,当一个事务方法被另一个事务方法调用时,是否要加入已存在的事务,或者创建一个新的事务等。注解在配置类上启用事务管理,但在Spring Boot中这通常是不必要的,因为Spring Boot的自动配置已经包含了事务管理的支持。Spring Boot沿用了Spring的事务管理概念,但在配置和使用上更为简化,主要依赖于注解来管理事务。当应用于类上时,该类的所有公共方法将成为事务方法。

2024-01-24 00:08:19 1034

原创 [笔记]Spring AOP

定义了何处应用AOP(比如哪些方法)。

2024-01-24 00:05:47 900

原创 顺时针打印矩阵:偏移量法与边界控制法比较---剑指offer-JZ29 顺时针打印矩阵

矩阵遍历使用的x和y的定义有些特殊。通常,在数学和计算机图形学中,我们习惯于将x轴定义为水平方向,y轴定义为垂直方向。然而,在二维数组或矩阵的上下文中,这些轴的定义通常与传统的笛卡尔坐标系有所不同。在代码中x变量代表的是二维数组的行索引。y变量代表的是二维数组的列索引。然而,当我们说“向上”移动时,实际上是在减少x的值(因为在数组中向上移动意味着向更小的行索引移动)。同样,"向右"移动实际上是增加y的值(在数组中向右移动意味着向更大的列索引移动)。“向下”移动是增加x的值。“向左”移动是减少y。

2024-01-22 20:45:07 1219

原创 位运算实现整数加法解析与实现---剑指offer-JZ65 不用加减乘除做加法

在计算机科学和编程中,位运算是一种高效的运算方式,尤其是在资源受限的环境下。最近,我遇到了一个有趣的问题:如何仅使用位运算实现两个整数的加法?这个问题不仅仅是一个编程练习,更深入地理解了计算机如何在底层处理数据。

2024-01-19 03:55:28 783

原创 深入理解归并排序与逆序对计算---剑指offer-JZ51 数组中的逆序对

当我们合并两个子数组时,如果左侧数组的元素大于右侧数组的元素,那么左侧数组当前元素及其后面的所有元素都将与右侧的这个元素形成逆序对。通过这种方式,函数在合并两个子数组的同时,准确地统计了逆序对的数量。如果左侧元素大于右侧元素,那么左侧的这个元素和它右边的所有元素(因为左侧子数组是有序的)都会与右侧的这个元素形成逆序对。因为左侧数组是有序的,所以如果一个左侧元素大于右侧的元素,那么左侧这个元素及其后面的所有元素都大于这个右侧的元素。函数中的核心,它负责合并两个已排序的子数组,并在这个过程中计算逆序对的数量。

2024-01-18 21:05:33 1418

空空如也

空空如也

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

TA关注的人

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