代码随想录35期
文章平均质量分 50
JAVA_水滴石穿
wugong_true
不求无过,但求无功
展开
-
day54_60
核心思想考虑单个列能接多少水,单个列接水数量取决于两边最高左柱子和最高右柱子。原创 2024-06-04 12:18:59 · 261 阅读 · 1 评论 -
day53
【代码】day53。原创 2024-05-28 17:14:51 · 153 阅读 · 0 评论 -
day52
【代码】day52。原创 2024-05-27 16:02:00 · 180 阅读 · 0 评论 -
day50
注意base case都是由状态转移方程推出来的,转移方程改变后 base case 也要做出对应改变。相对于2,简单修改了状态转移方程 和 增加了base case2(根据最基础的状态转移方程推出来)每次买完之后要等一天才能继续交易。原创 2024-05-25 19:01:57 · 414 阅读 · 0 评论 -
day49
实际情况是k有可能出现内存超限的错误,因为传入的测试中k可能很大2,dp数组太大,那么设想一下,dp数组最多有多大呢?每次交易买入卖出最少需要两天,所以说有效的k应该不超过 n/2,如果超过了,k限制也没有意义了,相当于2题。最多只能买卖两次股票。原创 2024-05-24 20:07:16 · 321 阅读 · 0 评论 -
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 · 252 阅读 · 0 评论 -
day47
【代码】day47。原创 2024-05-22 22:05:28 · 188 阅读 · 0 评论 -
day45
【代码】day45。原创 2024-05-20 19:27:21 · 112 阅读 · 0 评论 -
算法训练营day43
牢牢记住。原创 2024-05-18 21:07:56 · 128 阅读 · 0 评论 -
day42
i >= stone;i--) {原创 2024-05-17 23:00:25 · 107 阅读 · 0 评论 -
算法训练营day41
现在让你用这个背包装物品,每个物品只能用一次,在不超过被包容量的前提下,最多能装的价值是多少?dp(i)(w):对应前i个物品,当前容量为w,这种情况下能装的最大价值是dp(i)(w)物品不能分割,要么装进包里,要么不装,不能切成两半,这是0-1背包的来历。个物品,每个物品有重量和价值两个属性。0-1背包状态有两个,背包的容量和可选择的物品。题目描述:给你一个可装载重量为。明确base case。翻译代码,处理边界情况。明确两点,状态和选择。原创 2024-05-16 09:57:44 · 266 阅读 · 0 评论 -
算法训练营day40
动态规划 -> 如何找状态转移方程,推算几个简单的例子进行数学归纳来书写代码。二叉搜索树:根节点的左子树都比根节点小,右子树都比根节点大。构建出所有有效的BST。原创 2024-05-15 10:25:34 · 192 阅读 · 0 评论 -
算法训练营day39
【代码】算法训练营day39。原创 2024-05-14 09:56:56 · 418 阅读 · 0 评论 -
算法训练营day37
1.使用数组存储子问题结果2.使用变量(优化)存储子问题结果。原创 2024-05-13 10:03:49 · 168 阅读 · 0 评论 -
算法训练营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 · 398 阅读 · 0 评论 -
算法训练营day35
【代码】算法训练营day35。原创 2024-05-10 15:26:36 · 124 阅读 · 0 评论 -
算法训练营day34
变量来记录当前箭的位置,初始值为第一个气球的结束位置。然后,我们依次遍历每个气球,如果当前气球的起始位置大于。,说明这个气球无法被当前箭射破,我们需要更新箭的位置为当前气球的结束位置,并将箭的数量增加1。代码的思路是首先对气球的结束位置进行排序,然后从左到右遍历气球数组。逻辑比较好理解,找钱时先用最大的面额,再使用小的面额,因为小的面额更灵活。在Java中,比较器的。原创 2024-05-09 19:42:20 · 317 阅读 · 0 评论 -
算法训练营day33
理解代码并不难,左规则能理解,现在开始深入剖析右规则,分情况讨论实现右规则时是否会对左规则产生影响。原创 2024-05-08 22:14:40 · 444 阅读 · 0 评论 -
算法训练营day32
计算每天相对于上一天利润是上升还是下降,将所有上升的利润叠加,下降的不交易。相对于跳跃游戏增加了遇到跳跃到末尾就记录 到当前节点需要的步数。原创 2024-05-07 22:11:43 · 631 阅读 · 0 评论 -
算法训练营day31
这个题在一定条件下可以使用贪心,但是全部情况的还是要用动态规划,做这个题体验动态规划和贪心算法的区别。在问题的每个决策阶段,都选择当前看起来最优的选择,即贪心地做出局部最优的决策,以期获得全局最优解。的过程中,我们通过比较当前数字和前一个数字的大小关系,来确定当前位置是上升摆动还是下降摆动。ps,这里的上升和下降其实针对的是序列的尾部两个元素来说的,之前的元素一定都是摆动的序列。,我们可以找到整个数字序列中的最长摆动子序列的长度。中的最大值,即为最长摆动子序列的长度。动态规划和贪心的区别。原创 2024-05-06 20:25:29 · 504 阅读 · 1 评论 -
算法训练营day30
中 String.repeat是jdk11的方法。原创 2024-05-05 21:52:59 · 334 阅读 · 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 阅读 · 0 评论 -
算法训练营day1
通过快慢指针来获得“删除”val对应的数组长度。学习了数组的基础知识。原创 2024-04-03 11:46:20 · 270 阅读 · 1 评论 -
算法训练营day2
确定平方后哪的值是最大或最小的?显然,找平方后最大值比较方便,使用双指针从数组两侧遍历,向结果数组中从后向前遍历赋值(从大到小)这里的代码简化 result[k–]值得学习。这里下侧 和右侧从上到下变化。,上下左右的边进行遍历时停止的条件要相同,要么左闭右开,要么左开右闭。这里的处理规则是拐角处的总是让一个空格给下一条边画。时间复杂度O(n),空间复杂度O(n)结合昨天学的二分法中的。原创 2024-04-04 19:23:28 · 306 阅读 · 0 评论 -
算法训练营day3
因为dummy永远指向头结点,而head随着遍历不断向后移动,pre也不断向后移动。但是要注意,要是删除最后一个节点,需要从头节点查找到倒数第第二个结点通过next指针进行删除操作,查找的时间复杂度是O(n)。通过设置虚拟节点来使删除所有节点的逻辑相同,pre.next = cur.next;结合上一个问题,使用虚拟前驱结点来使 处理所有节点的逻辑相同,更容易复现代码。链表的增添和删除都是O(1)操作,也不会影响到其他节点。每个节点包括数据域(data)和指针域(next)原创 2024-04-05 16:17:03 · 271 阅读 · 1 评论 -
算法训练营day4
两种解法都很值得学习,第二种解法可以增强对dummy节点的理解。原创 2024-04-06 21:19:40 · 422 阅读 · 1 评论 -
day05_Trapping_Rain_Water
参考链接 https://leetcode.com/problems/trapping-rain-water/solutions/1374608/c-java-python-maxleft-maxright-so-far-with-picture-o-1-space-clean-concise/若 maxLeft > height[left],则当前列蓄水 maxLeft - height[left],当时我就比较纠结右侧最高与当前列(height[left]) 之间的柱子难道不会影响该列的结果吗?原创 2024-04-08 21:00:35 · 433 阅读 · 0 评论 -
算法训练营day6
有些许类似之前环形链表二那道题,这里用的是“隐形环”,当计算过程中同一个数字出现两次时,由于每一次数字迭代的计算逻辑相同,那么这个数是不会达到 “1”,也就不是快乐数。进行for循环,如果map中存在 target - num[i],则返回当前索引和target - num[i]对应索引。计算快乐数逻辑,每次提取出个位,然后总体除以 10 去除 个位,不断遍历计算。两个集合 Set1,Set2,遍历其中一个数组加入到set1中。再以set大小创建一个新数组,遍历set加入到数组中返回即可。原创 2024-04-08 20:14:59 · 933 阅读 · 0 评论 -
算法训练营day7
该题解好的点是讲清楚为什么采用两两分组,而不是一三或则三一分组来计算结果。例如,五数之和,复制到ide可运行看结果。原创 2024-04-09 18:40:57 · 630 阅读 · 0 评论 -
算法训练营day8
大家第一步想到的都是转换成字符数组,但是字符数组进行更改起来就比较麻烦。利用双指针和 一个临时变量解决(因为左右指针无法直接交换)这里推荐StringBuilder,一个可变的字符串对象。通过遍历来字符数组对应情况对应添加number还是原字符。需要解决的问题:两侧空格,单词之间多个空格,反转单词。基于反转字符一,这里叙述一下i的含义。原创 2024-04-10 21:55:00 · 321 阅读 · 1 评论 -
算法训练营day9_kmp
KMP算法以及Boyer-Moore算法原创 2024-04-11 20:35:32 · 1065 阅读 · 1 评论 -
算法训练营day10
参考链接。原创 2024-04-12 21:23:04 · 363 阅读 · 1 评论 -
算法训练营day11
因为出现了对应关系,就联想想到了HashMap,但运算符作为value,代码用map.get()放到两个计算数字中间无法编译成功,就只能存储两个数字之间计算关系,又要引入函数式编程,下面代码简单看看了解一下就行。考虑到这只是三种括号的情况,如果是更多种情况匹配,代码维护非常麻烦,而这种代码在添加多种情况时只需在HashMap中添加对应key-value即可,拓展性比较强。涉及到字符串频繁变化时,要联想到 StringBuilder || StringBuffer。使用 + 号进行字符串拼接。原创 2024-04-13 18:20:59 · 1920 阅读 · 0 评论 -
算法训练营day13
鄙人想到了开辟空间来保存最小值,使用的HashMap;K神用的是栈+逻辑优化。从使用角度来看,我们可以将“优先队列”和“堆”看作等价的数据结构。简单写一下堆的知识,便于理解优先队列,已经了解的朋友转到逻辑部分。堆:是一种满足特定条件的完全二叉树,主要可分为两种类型。堆作为完全二叉树的一个特例,具有以下特性。做完最小栈的题能更好的理解这道题。原创 2024-04-15 20:23:56 · 1887 阅读 · 1 评论 -
算法训练营day14
【代码】算法训练营day14。原创 2024-04-16 21:42:03 · 347 阅读 · 2 评论 -
算法训练营day15
像这种较为固定思路的算法(层序遍历),理解之后建议背诵复现。层序遍历本质上属于广度优先遍历,也称广度优先搜索,这题乍一看挺唬人,节点数量越多越难处理。原创 2024-04-17 22:19:41 · 391 阅读 · 1 评论 -
算法训练营day16
>求出高度/深度如果满二叉树的层数为h,则总节点数为:2^h - 1.那么我们来。原创 2024-04-18 22:25:10 · 367 阅读 · 1 评论 -
算法训练营day17
【代码】算法训练营day17。原创 2024-04-19 21:22:13 · 265 阅读 · 0 评论 -
算法训练营day18
存储中序遍历的值与索引的映射,查找操作的时间复杂度为 O(1)。二叉树的最深最左侧的节点的值,涉及到最深 -> 联想到 层序遍历。注,本文方法只适用于“无重复节点值”的二叉树。为了提升效率,本文使用哈希表。先序遍历 + 路径记录。原创 2024-04-20 21:56:33 · 395 阅读 · 0 评论 -
算法训练营day20
任选一棵树t1,将另外一棵树t2合并到t1上,会出现几种情况。注意递归的时传入函数为两个树对应的节点。原创 2024-04-22 22:06:48 · 500 阅读 · 0 评论