自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 leetcode 刷题_day45_动态规划05_01背包问题应用(容量能够装满、容量尽量装满、有几种装法、两重容量)

从整体上看,如果尽量让石头分成重量相同的两堆,则这两堆相撞之后剩下的石头最小。前面讲过,如果使用一维 dp,则遍历顺序一定为先正序物品,后倒序背包容量。目标是一半重量(非整数则向下取整),差额的两倍就是最小剩下重量。将数组拆分成两个子集,左子集为加的数集合,右子集为减的数集合。那么凑整dp[5]有多少方法呢,也就是把 所有的。本题,相当于背包里放入数值,那么物品i的重量是。此时问题就转化为,装满容量为 x 的背包,有。是在公式中一切递推结果的起源,如果。例如:dp[j],j 为5,)这么大容量的包,有。

2023-10-22 23:47:02 61

原创 leetcode 刷题_day44_动态规划04_01背包问题

有n件物品和一个最多能背重量为w的背包。第i件物品的重量是weight[i],得到的价值是value[i]。每件物品,求解将哪些物品装入背包里物品价值总和最大。

2023-10-21 02:46:45 171

原创 leetcode 刷题_day43_动态规划03

只需要初始化dp[0]就可以了,推导的基础,都是dp[0]。从定义上来讲,空节点也是一棵二叉树,也是一棵二叉搜索树。的定义,需要对自身就是最大值的数。为节点组成的二叉搜索树的个数。从递推公式上,应当从小到大遍历。所以初始化dp[0] = 1。进行自定义初始化,也即。一定是从前向后遍历,先有。的最大乘积 * 拆解。

2023-10-20 21:29:39 32

原创 leetcode 刷题_day42_动态规划02

一定都是1,因为从(0, 0)的位置到(i, 0)的路径只有一条。都是从其上方和左方推导而来,那么从左到右一层一层遍历就可以了。,只能有两个方向来推导出来,即。一致,区别在于对障碍物的处理。只有这两个方向过来。

2023-10-20 21:27:28 275

原创 leetcode 刷题_day41_动态规划01_熟悉五步曲

dp 数组的定义和下标。递推公式。dp 数组如何初始化,初始化也需要注意。遍历顺序,比较考究,01 先遍历背包,后遍历物品。4.1 排列和组合的遍历顺序是不相同的。4.1.1 排列:背包在外 物品在内。(322)4.1.2 组合:物品在外,背包在内。(518)(出现问题)打印dp数组。(打印dp数组,检查是否有问题,检验1 2 3 4 步骤)

2023-10-17 21:28:38 21

原创 leetcode 刷题_day39_贪心06_局部最优推出全局最优

例如:98,一旦出现strNum[i - 1] > strNum[i]的情况(非单调递增),首先想让strNum[i - 1]–,然后strNum[i]给为9,这样这个整数就是89,即小于98的最大的单调递增整数。从后向前遍历,就可以重复利用上次比较得出的结果了,从后向前遍历332的数值变化为:332 -> 329 -> 299。

2023-10-16 19:58:29 19

原创 leetcode 刷题_day38_贪心05_局部最优推出全局最优

为贪心算法的区间问题。讲述看到这一题的思路。讲述看到这一题的思路。

2023-10-16 19:53:30 18

原创 leetcode 刷题_day37_贪心04_局部最优推出全局最优

因为降序排序后的列表里,其前面的所有元素都大于等于当前元素,所以直接根据 k 往前放置就行。不会出现往后放的情况,因为已经降序排序了,当前元素所在的位置可以视为最靠后。有两个维度要同时考虑的题目,需要将两个维度拆开,一个个去考虑操作。注意:对 int 进行排序时,需要使用。通过合并符合条件的区间,来实现局部最优。讲述看到这一题的思路。

2023-10-12 22:56:35 15

原创 leetcode 刷题_day36_贪心03_局部最优推出全局最优

先按绝对值降序排序,依次从头至尾将负值翻转,如果最后 k 还没用完,则将数组最后一个(值最小)的反复翻转。这样从局部最优推出了全局最优,即:相邻的孩子中,评分高的孩子获得更多的糖果。方法二中,非对象的自定义排序需要转成包装类才能进行,直接拖慢了整体效率。每次选择最小的值进行反转,实现每次最大,那最后整体最大。--> java 的非对象自定义排序有病。基于贪心算法,有两种解法。方法二:贪心解法优化。

2023-10-11 22:04:17 27

原创 leetcode 刷题_day35_贪心02_局部最优推出全局最优

最终利润是可以分解的,比如,计算第 0 天买入,第 3 天卖出的利润,就等于拆开单天理论总和。因此可以用贪心算法,只要每天为正的利润(局部最优),就能获得全局最大利润(全局最优)不一定非要明确一次究竟跳几步,每次取最大的跳跃步数,这个就是可以跳跃的。从覆盖范围出发,不管怎么跳,覆盖范围内一定是可以跳到的,这个范围内,别管是怎么跳的,反正一定可以跳过来。,覆盖范围一旦覆盖了终点,得到的就是最少步数。

2023-10-10 23:24:05 27

原创 leetcode 刷题_day34_贪心01_局部最优推出全局最优

局部最优:当前“连续和”为负数的时候立刻放弃,从下一个元素重新计算“连续和”,因为负数加上下一个元素 “连续和”只会比理论值小。如果 -2 1 在一起,计算起点的时候,一定是从 1 开始计算,因为负数只会拉低总和,这就是贪心贪的地方。局部最优(饼干发出去),推导出全局最优(饼干尺寸升序排序,把小孩胃口升序排序)局部最优的情况下,并记录最大的“连续和”,可以推出全局最优。当遇到“连续和”小于等于0时,重置连续和,也即立即中断。一次遍历,类似双指针计算差值判断符号。全局最优:选取最大“连续和”

2023-10-09 17:44:53 26

原创 leetcode 刷题_day32_回溯06_哈希表优化横向遍历

无论哪种解法,在遍历之前都需要将待遍历对向进行排序才能保证最终的。列表中找到符合条件的组合/排列,因此可以使用回溯来解题。注意:结果是有排序要求的,要求返回从小到大最小的结果。在回溯的横向遍历中,有两种解法。

2023-10-08 21:23:02 21

原创 leetcode 刷题_day31_回溯05_子集基于哈希表去重&排列及去重重点

整体是通过回溯来解决子集问题。

2023-10-07 21:33:05 22

原创 leetcode 刷题_day30_回溯04_分割额外判断和分层控制&子集

使用回溯进行字符串切割,通过startIndex控制切割的位置,但只能递归两层,第三层需要取末尾,在终止条件中判断每个切割的字符串需要进行合法性判断剪枝优化。

2023-10-06 21:30:43 22

原创 leetcode 刷题_day29_回溯03_组合去重的两种维度&分割问题

数字重复输入源的有序性对剪枝优化的差异。

2023-10-06 12:18:35 20

原创 leetcode 刷题_day28_回溯02_组合剪枝&组合变种

和 77 题一样的思路,使用组合模板解题即可。

2023-10-05 20:25:39 25

原创 leetcode 刷题_day27_回溯01_组合&剪枝

使用标准的回溯模板就能解题,回溯总是伴随着递归,回溯总是能图形化为一颗逻辑树模板本题的解题逻辑树。

2023-10-05 16:11:02 16

原创 leetcode 刷题_day23_二叉树09_BST 修剪 & 转换

根据 BST 的特性(有序),对 BST 进行遍历,对每个节点的值与 val 进行判断,最后遇到 null 就是需要插入的地方。

2023-10-02 19:43:52 17

原创 leetcode 刷题_day22_二叉树08_BST 搜索 & 插入 &删除

根据 BST 的特性(有序),对 BST 进行遍历,对每个节点的值与 val 进行判断,最后遇到 null 就是需要插入的地方。前序递归遍历,每次递归返回删除了节点的树/子树根节点。处理当前节点时,分为五种情况。待删除节点为当前节点。

2023-09-28 19:19:11 15

原创 leetcode 刷题_day21_二叉树07_中序遍历(双指针) & 后序遍历(回溯)

遇到在二叉搜索树上求什么最值啊,差值之类的,就把它想成在一个有序数组上求最值,求差值,这样就简单多了也即,在这个有序数组上求最小差值。

2023-09-27 19:36:46 17

原创 leetcode 刷题_day20_二叉树06_构造树 & 遍历多棵树 &BST

构造树一般采用的是,因为先构造中间节点,然后递归构造左子树和右子树数组区间为。

2023-09-26 22:19:12 19

原创 leetcode 刷题_day18_二叉树05_层序遍历 & 递归返回值 & 构建树

用层序遍历可以解决。

2023-09-26 16:01:56 15

原创 leetcode 刷题_day17_二叉树04_高度 & 回溯 & 递归别样操作

通过获取高度来判断 --> 后序遍历。

2023-09-25 22:38:11 11

原创 leetcode 刷题_day16_二叉树03_最大最小深度 & 完全二叉树

前序遍历后序遍历。

2023-09-25 00:57:54 11

原创 leetcode 刷题_day15_二叉树02_层级遍历 & 翻转

借助队列,层级一层循环,层内元素一层循环后续的层级遍历题目,都可以以类似的代码解决。

2023-09-24 20:24:44 17

原创 leetcode 刷题_day14_二叉树01_遍历

看如下中间节点的顺序,就可以发现,中间节点的顺序就是所谓的遍历方式。这里前中后,其实指的就是中间节点的遍历顺序,只要记住。解题时,一定要把握使用递归的三个步骤。

2023-09-20 19:17:44 13

原创 leetcode 刷题_day13_栈和队列03_单调队列&小顶堆

构建一个适用于本题的单调递减非去重队列注意,单调递减队列不能去重,否则会导致移除元素时误将窗口还在的数据被移除出去。

2023-09-19 19:49:51 18

原创 leetcode 刷题_day10_栈和队列02_栈的经典应用

栈的特性适合解决的问题,本题中的括号左右匹配就可以使用栈来辅助解决。

2023-09-17 23:58:33 14

原创 leetcode 刷题_day09_栈和队列_基础

队列是先进先出,栈是先进后出。基于栈的特性,如果倒腾两次,也是先进先出,和队列的特性一致。因此可以用两个栈配合,来实现先进先出的效果。

2023-09-16 21:20:24 17

原创 leetcode 刷题_day08_字符串02_KMP

kmp算法关键在于:在当前对文本串和模式串检索的过程中,若出现了不匹配,如何充分利用已经匹配的部分 --> 前缀表的建立和利用。

2023-09-15 20:35:20 25

原创 leetcode 刷题_day07_字符串01_字符串翻转

通过双指针对向遍历,交换两个指针指向的字符即可翻转字符串注意:通过,可以实现置换操作。

2023-09-14 21:05:50 20

原创 leetcode 刷题_day06_哈希表02_哈希表&N数之和

O(1)

2023-09-13 18:52:43 17

原创 leetcode 刷题_day05_哈希表01_快速查值

判断两个字符串每个字符出现的次数是否都相同 --> 存储这两个字符串各个字母出现的次数并判断 -->

2023-09-11 21:42:44 24

原创 leetcode 刷题_day04_链表02_最小单元交换操作&同向指针删除/比较&快慢指针处理环表

2. 找到两个链表可能的最长相交位置,也即短的链表的头节点。1.如果有相交的部分,则从末端到相交点一定是共用的,也即。3. 从这个节点开始,逐个节点对比。,基于这点,可以使用双指针法。同向双指针 & 快慢指针。

2023-09-10 19:11:05 76

原创 leetcode 刷题_day03_链表01_查找&删除&插入&双指针处理单链表

链表的删除操作和数组不同,数组是通过覆盖的方式实现(因为连续存储),而链表是通过指针重指的方式来删除(因为不连续存储)

2023-09-08 21:12:27 184

原创 leetcode 刷题_day02_数组02_滑动窗口&对向双指针&循环不变量

题目的核心是要获取一个符合条件的子数组,因此通过两个指针构建一个可以移动的,长度动态的窗口(滑动窗口),即可将问题拆解成。1 .数组循环问题中,必须在循环中对处理的数组设置区间不变量,也即:每次处理的数组区间应当是一致的。2. 在这个问题中,每次循环需要处理四条边,那每条边的区间应当设置成一样, 这里是设置成。每个元素最多被处理两遍,也即2n,因此时间复杂度为。双指针法遍历 + 尾插法构建新数组。

2023-09-07 22:18:17 239

原创 leetcode 刷题_day01_数组01_二分查找&同向快慢指针

给定的数组有序且不重复,因此可以使用二分法解题。

2023-09-06 18:00:13 412

空空如也

空空如也

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

TA关注的人

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