自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 day54_60

核心思想考虑单个列能接多少水,单个列接水数量取决于两边最高左柱子和最高右柱子。

2024-06-04 12:18:59 255 1

原创 day53

【代码】day53。

2024-05-28 17:14:51 145

原创 day52

【代码】day52。

2024-05-27 16:02:00 175

原创 day50

注意base case都是由状态转移方程推出来的,转移方程改变后 base case 也要做出对应改变。相对于2,简单修改了状态转移方程 和 增加了base case2(根据最基础的状态转移方程推出来)每次买完之后要等一天才能继续交易。

2024-05-25 19:01:57 407

原创 day49

实际情况是k有可能出现内存超限的错误,因为传入的测试中k可能很大2,dp数组太大,那么设想一下,dp数组最多有多大呢?每次交易买入卖出最少需要两天,所以说有效的k应该不超过 n/2,如果超过了,k限制也没有意义了,相当于2题。最多只能买卖两次股票。

2024-05-24 20:07:16 318

原创 day13买卖股票系列

如果是只买卖一次,那么是 dp(i)[1] = Math.max(dp(i-1)[1], - prices[i]);2和1的区别是 dp(i)[1] = Math.max(dp(i-1)[1], dp(i-1)[0] - prices[i]);实际情况是k有可能出现内存超限的错误,因为传入的测试中k可能很大2,dp数组太大,那么设想一下,dp数组最多有多大呢?每次交易买入卖出最少需要两天,所以说有效的k应该不超过 n/2,如果超过了,k限制也没有意义了,相当于2题。每次买完之后要等一天才能继续交易。

2024-05-23 16:45:24 425

原创 day48

如果是只买卖一次,那么是 dp(i)[1] = Math.max(dp(i-1)[1], - prices[i]);这样的话,状态为1也就是持有股票的值不可能是 -prices[i],因为取的是最大数;变成人话就是,如果你买了股票,那么你就不能再买当前的股票了,只能卖出。2和1的区别是 dp(i)[1] = Math.max(dp(i-1)[1], dp(i-1)[0] - prices[i]);最多只能买卖两次股票。

2024-05-23 16:44:35 251

原创 day47

【代码】day47。

2024-05-22 22:05:28 186

原创 day8二叉树&单调栈1

如果可以,写出这个递归函数的定义,并充分利用这个函数的返回值,这叫「分解问题」的思维模式。如果单独抽出一个二叉树节点,它需要做什么事情?需要在什么时候(前/中/后序位置)做?其他的节点不用你操心,递归函数会帮你在所有节点上执行相同的操作。

2024-05-21 19:41:45 810

原创 算法训练营day46

【代码】算法训练营day46。

2024-05-21 08:53:58 384

原创 day45

【代码】day45。

2024-05-20 19:27:21 110

原创 算法训练营day43

牢牢记住。

2024-05-18 21:07:56 126

原创 day42

i >= stone;i--) {

2024-05-17 23:00:25 106

原创 day7_动态规划2

dp[i] [w] 的定义;对于前i个物品,当前背包的容量为W,这种情况下可以装的最大价值比如 dp[3] [5] = 6 表示若只对前三个物品进行选择,当背包容量为5时,最多可以装下的价值是6base case 是 dp[0] […] = dp[…] [0] = 0,没有物品或者背包没有空间的时候,能装的最大价值就是0。

2024-05-16 21:13:07 670

原创 算法训练营day41

现在让你用这个背包装物品,每个物品只能用一次,在不超过被包容量的前提下,最多能装的价值是多少?dp(i)(w):对应前i个物品,当前容量为w,这种情况下能装的最大价值是dp(i)(w)物品不能分割,要么装进包里,要么不装,不能切成两半,这是0-1背包的来历。个物品,每个物品有重量和价值两个属性。0-1背包状态有两个,背包的容量和可选择的物品。题目描述:给你一个可装载重量为。明确base case。翻译代码,处理边界情况。明确两点,状态和选择。

2024-05-16 09:57:44 262

原创 day4_prefixSum2

参考链接。

2024-05-15 11:22:35 667

原创 算法训练营day40

动态规划 -> 如何找状态转移方程,推算几个简单的例子进行数学归纳来书写代码。二叉搜索树:根节点的左子树都比根节点小,右子树都比根节点大。构建出所有有效的BST。

2024-05-15 10:25:34 187

原创 day5_array

1.空间复杂度O(n)版本。2.空间复杂度常数版本。

2024-05-14 21:47:41 416

原创 算法训练营day39

【代码】算法训练营day39。

2024-05-14 09:56:56 413

原创 day6_动态规划1

穷举所有可能性。算法设计无非就是先思考“如何穷举”,然后再追求“如何聪明地穷举”。列出状态转移方程,就是在解决“如何穷举”的问题。之所以说它难,一是因为很多穷举需要递归实现,二是因为有的问题本身的解空间复杂,不那么容易穷举完整。备忘录、DP table 就是在追求“如何聪明地穷举”。用空间换时间的思路,是降低时间复杂度的不二法门,除此之外,试问,还能玩出啥花活?

2024-05-13 21:32:39 2020

原创 算法训练营day37

1.使用数组存储子问题结果2.使用变量(优化)存储子问题结果。

2024-05-13 10:03:49 165

原创 day3_prefixSum

如果可以,写出这个递归函数的定义,并充分利用这个函数的返回值,这叫「分解问题」的思维模式。如果单独抽出一个二叉树节点,它需要做什么事情?需要在什么时候(前/中/后序位置)做?其他的节点不用你操心,递归函数会帮你在所有节点上执行相同的操作。

2024-05-11 21:54:04 1024

原创 算法训练营day36

从前向后遍历的话,遇到strNum[i - 1] > strNum[i]的情况,让strNum[i - 1]减一,但此时如果strNum[i - 1]减一了,可能又小于strNum[i - 2]。例如:98,一旦出现strNum[i - 1] > strNum[i]的情况(非单调递增),首先想让strNum[i - 1]–,然后strNum[i]给为9,这样这个整数就是89,即小于98的最大的单调递增整数。定状态,不在监控范围为uncover(0),在监控范围cover(1),该节点装了摄像头set(2)

2024-05-11 21:47:17 397

原创 day2_greedy&Intervals&LRU/LFU

因为同时维护map的双端链表,需要抽象出来几个方法在对元素操作时同时操作map和DoubleList,防止漏掉操作,比如说删除某个。使用哈希双端链表(Java中对应的是LinkedHashMap)说的有点玄幻,实际上很简单,就是尽量让 ==LRU 的主方法。使得我们可以在 O(1) 时间访问链表的任意元素。get逻辑比较简单,这里阐述一下put的逻辑。1288删除被覆盖区间,返回剩余区间的数量。LRU 算法的核心数据结构是使用哈希链表。使得链表元素维持插入顺序,同时借助。哈希映射的快速访问能力。

2024-05-10 20:01:38 848

原创 算法训练营day35

【代码】算法训练营day35。

2024-05-10 15:26:36 123

原创 day1_slidingWindow

1、什么时候应该移动right扩大窗口?窗口加入字符时,应该更新哪些数据?2、什么时候窗口应该暂停扩大(满足了条件),开始移动left缩小窗口?从窗口移出字符时,应该更新哪些数据?3、我们要的结果应该在扩大窗口时还是缩小窗口时进行更新?如果一个字符进入窗口,应该增加window计数器;如果一个字符将移出窗口的时候,应该减少window计数器;当valid满足need时应该收缩窗口;应该在收缩窗口的时候更新最终结果。

2024-05-09 20:58:32 755

原创 算法训练营day34

变量来记录当前箭的位置,初始值为第一个气球的结束位置。然后,我们依次遍历每个气球,如果当前气球的起始位置大于。,说明这个气球无法被当前箭射破,我们需要更新箭的位置为当前气球的结束位置,并将箭的数量增加1。代码的思路是首先对气球的结束位置进行排序,然后从左到右遍历气球数组。逻辑比较好理解,找钱时先用最大的面额,再使用小的面额,因为小的面额更灵活。在Java中,比较器的。

2024-05-09 19:42:20 315

原创 算法训练营day33

理解代码并不难,左规则能理解,现在开始深入剖析右规则,分情况讨论实现右规则时是否会对左规则产生影响。

2024-05-08 22:14:40 441

原创 算法训练营day32

计算每天相对于上一天利润是上升还是下降,将所有上升的利润叠加,下降的不交易。相对于跳跃游戏增加了遇到跳跃到末尾就记录 到当前节点需要的步数。

2024-05-07 22:11:43 628

原创 算法训练营day31

这个题在一定条件下可以使用贪心,但是全部情况的还是要用动态规划,做这个题体验动态规划和贪心算法的区别。在问题的每个决策阶段,都选择当前看起来最优的选择,即贪心地做出局部最优的决策,以期获得全局最优解。的过程中,我们通过比较当前数字和前一个数字的大小关系,来确定当前位置是上升摆动还是下降摆动。ps,这里的上升和下降其实针对的是序列的尾部两个元素来说的,之前的元素一定都是摆动的序列。,我们可以找到整个数字序列中的最长摆动子序列的长度。中的最大值,即为最长摆动子序列的长度。动态规划和贪心的区别。

2024-05-06 20:25:29 503 1

原创 算法训练营day30

中 String.repeat是jdk11的方法。

2024-05-05 21:52:59 329 1

原创 算法训练营day29

原因:因为往下层递归的话,一直再往下层走,dfs还未return,也就是说used还没有被回溯为未选择状态,所以同一条分支上,nums[i-1] 的used状态一定是被选择的。B 为什么" nums[i-1] 的used状态是被选择的,那么说明当前的nums[i] 是 nums[i-1]的下一层路径。为什么“ 如果 nums[i-1] 的状态是没被选择的,那么说明当前 的nums[i] 是nums[i-1] 同层路径。使用存在重复数字的数组来生成新的全排列数组,要求去重。

2024-05-04 14:04:14 476

原创 算法训练营day28

代码参考liweiwei。

2024-04-30 22:53:46 278

原创 算法训练营day27

因为i是由 begin赋值的,那么当这层遍历 执行 path.addLast(candidates[i])时 选不到小于 begin索引 的值。什么时候使用 used 数组,什么时候使用 begin 变量?

2024-04-29 22:44:00 506

原创 算法训练营day25

在搜索过程中,**我们“剪掉”乐不满足约束条件的搜索分支,**避免许多无意义的尝试,从而提高了搜索效率。当算法在搜索过程中遇到某个状态无法继续前进或无法得到满足条件的解时,它会撤销上一步的选择,退回到之前的状态,并尝试其他可能的选择。回溯算法的本质是深度优先搜索算法,它尝试所有可能的解决方案直到找到满足条件的解。例题2:在二叉树中搜索所有值为 7 的节点,请返回根节点到这些节点的路径,能够找到所有可能的解决方案,并且在合理的剪枝操作下,具有很高的效率。:这类问题的目标是找到满足所有约束条件的解。

2024-04-27 22:24:25 683

原创 算法训练营day24

回溯是递归的副产品,只要有递归就会有回溯。

2024-04-26 23:06:18 423

原创 给2026年6月份的你一封信

不知道你是否已经在心仪的公司工作,但是我相信你会全力以赴,至少无愧于心。目标固然重要,但是最重要的,记得奥,最重要的,铁铁,好好睡觉,好好吃饭,好好健身,学会想学的东西,诶,还有一件事,平时有没有拍视频记录日常啊,一定要记得记录啊,整活也好,拍风景也好,耍帅也好,都是回忆,哈哈,到时候看到这些是否会觉得很好笑,肯定会觉得很好笑,因为你一直在路上啊,铁铁。

2024-04-26 08:52:24 120

原创 算法训练营day23

则该函数可以被编译器或解释器优化,使其在空间效率上与迭代相当。这种情况被称为尾递归(tail recursion)。

2024-04-25 21:43:33 990

原创 算法训练营day22

所以说,二叉搜索树的深度是非常影响查找/插入性能的,所以说并不常用,广泛使用的是平衡搜索树。常见的平衡搜索树有 红黑树,B- 树,B+ 树(还有 ACM/OI 大佬们爱的 treap,splay,SBT)等。比如 Java 里的 TreeMap,TreeSet 和 HashMap 中链表的树化都是用红黑树实现的,又比如 InnoDB 的索引存储就是 B+ 树实现的。迭代写法的空间复杂度是 O(1),递归写法由于递归调用时会使用方法栈,而方法栈的深度就是二叉搜索树的深度,所以最坏空间复杂度是 O(n)。

2024-04-24 21:57:14 291 1

原创 算法训练营day21

接下来,根据计数count与最大计数maxCount的比较,更新众数的结果数组resList和最大计数maxCount。如果count大于maxCount,则清空resList并将当前节点值添加进去,并更新maxCount为count;接着,根据resList中的众数,创建一个整型数组res,并将其返回作为结果。然后,通过与前一个节点的值进行比较,判断当前节点值出现的次数。如果当前节点与前一个节点的值不同,说明出现了一个新的值,将计数count重置为1;,计算相邻两个元素的差值,并将较小的差值更新到。

2024-04-23 22:44:16 436

空空如也

空空如也

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

TA关注的人

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