leetcode
hellopbc
追求代码世界的白话(转战UEFI)
展开
-
42. 接雨水[动态规划+双指针]
的味道,即当前位置的蓄水量,依靠两个max,而max依靠上一个位置的max和上一个位置比较得到。位置可以放多少水(具体说就是,两个max的较小值【短板】能决定装水量)。left的maxLeft和right的maxRight,先简单来看,我们关注某个位置i的地方的蓄水量。,就总可以向中间移动其中的一个来推进求解。和height[i]就可以,取最大值。基于阶段一,我们知道,这个问题有点。假设我们从左到右遍历,那么。是可以确定的,只要比较旧的。我做了更好的理解与改进。融合起来,我们发现,原创 2022-11-24 11:44:06 · 220 阅读 · 0 评论 -
15. 三数之和
按照三数之和大于、小于、等于0做第二步判断,对应要移动i和j。固定k,然后移动i和j,移动过程中,记得去重。大于、小于、等于0做第一步判断。固定k后,如何移动i和j。原创 2022-11-01 11:11:36 · 78 阅读 · 0 评论 -
5. 最长回文子串
内存消耗:44.4 MB, 在所有 Java 提交中击败了27.48%的用户。执行用时:70 ms, 在所有 Java 提交中击败了51.78%的用户。通过测试用例:140 / 140。原创 2022-10-31 17:10:24 · 118 阅读 · 0 评论 -
剑指 Offer 16. 数值的整数次方
内存消耗:40.7MB ,在所有Java提交中击败了44.53%的用户。执行用时:0 ms ,在所有Java提交中击败了100.00%的用户。尤其是,最小值**-2147483648**,转正数时会报错。一个小时,动态规划超内存,实际上并没有二分,相当于遍历一轮。很关键,可以解决指数在整型范围的最大值和最小值问题,虽然采用了动态规划,每次按对半相乘,但是还是。主要用到了这个思路,这个很牛逼。二分相乘,时间复杂度O(log n)【效果和答案很接近,时间也是接近0】,因此时间复杂度是O(n)原创 2022-09-28 21:11:56 · 199 阅读 · 0 评论 -
痛定思痛学DP,动态规划的一般性应用流程的总结
关于动态规划(dynamic programming,DP)算法的应用场景和使用总结原创 2022-09-25 22:21:19 · 236 阅读 · 1 评论 -
剑指 Offer 14- I. 剪绳子
做法二,采用了动态规划,每次动作就是切一刀,这一刀下去,两边都最大,想到了这里就基本差不多了。切(最后)一刀,假设这一刀下去,两边都最大(结果最优),两边都是最大乘积,求两边最大值相乘。执行用时:0 ms ,在所有Java提交中击败了100.00%的用户。执行用时:0ms ,在所有Java提交中击败了 100.00%的用户。然后分的段数是有限的,根据切不同段数得到不同的结果,取最大值。对比来看,差不多,但是方法一代码写的快,方法二这个点不好切入。做法一,通过了44/50,因此属于偷懒了。原创 2022-09-15 22:04:04 · 220 阅读 · 0 评论 -
剑指 Offer 12. 矩阵中的路径
如果没索引越界、和word的对应下标的字符匹配、这个字符事先没有使用过,就递归找下一个。每次从可能的起点开始时,都需要重置那个等size的用来标记是否访问过的二维数组。内存消耗:39.4 MB,在所有Java提交中击败了84.15%的用户。写思路一的递归大概花了40分钟,大部分时间用来调试后面的访问标记问题。执行用时:54 ms ,在所有Java提交中击败了63.77%的用户。整体跨度一天,难了就不喜欢做,一直拖。思路二:见代码思路二,不完善,没实现。见代码思路二,不完善,没实现。执行结果:通过显示详情〉原创 2022-09-15 19:08:51 · 175 阅读 · 0 评论 -
剑指 Offer 11. 旋转数组的最小数字
内存消耗:41.1 MB,在所有Java提交中击败了77.24%的用户。执行用时: 0ms,在所有Java提交中击败了100.00%的用户。通过测试用例:192/ 192。直接暴力遍历,不用管旋转。执行结果:通过显示详情〉原创 2022-09-14 21:29:16 · 85 阅读 · 0 评论 -
剑指 Offer 10- II. 青蛙跳台阶问题
跨了一整天,主要集中在,数学方法上的“(m+n)个球放(m+n)个位置上有多少种组合”和约分操作(没成功)上。每次只会跳一阶或者二阶,因此,可以看成前面组合再加上在倒数第一阶跳一阶台阶和在倒数第二阶跳二阶的情况。F(n-1) + “跳一阶”:F(n-1)是确定的,再跳一阶,跳的排列数不会变。模的问题:(a∗b)%c=((a%c)∗(b%c))%c,也转换为(m+n)个球放(m+n)个位置上有多少种组合。m + 2n = N, 因此有m个1和n个2;设F(n)为蛤蟆跳n阶台阶的跳法,故。原创 2022-09-14 21:14:39 · 229 阅读 · 0 评论 -
剑指 Offer 10- I. 斐波那契数列
这里比较麻烦的是对答案取模这里,主要没读清楚,不然就算使用long也会溢出导致答案出错。这是因为在计算时,会有很多重复计算的地方。比如计算F(44)时,就会计算很多次F(5)内存消耗:38.2 MB ,在所有Java提交中击败了69.56%的用户。执行用时:0 ms ,在所有Java提交中击败了100.00%的用户。思路二:按照手算的方式,一次叠加计算,每次都保留最新的两个元素即可。认为是最后答案取模,没想到是每一步的答案取模。思路一:做递归就可以了,但是这样会超时。通过测试用例:51/51。原创 2022-09-13 16:14:57 · 155 阅读 · 0 评论 -
剑指 Offer 09. 用两个栈实现队列
也就是,当栈2的元素都弹出了(这样不会被后来的元素把最先入栈的元素覆盖),再一次性把栈1的元素逆序拿过来(遍历栈1,栈1pop然后栈2add),以此类推。再一个就是,多次连续出入队的问题,这时要考虑什么时候把栈1的元素都pop然后放到栈2。也就是说,要将第一次入栈的数,都逆序一下,正好出栈再入栈到另一个栈可以实现。执行用时:60 ms ,在所有Java提交中击败了28.74%的用户。内存消耗:49.6 MB,在所有Java提交中击败了5.09%的用户。栈的特点是先进后出,队列的特点的先进先出。原创 2022-09-13 15:04:08 · 149 阅读 · 0 评论 -
longest-substring-without-repeating-characters.py
结果:⋆⋆⋆\star\star\star⋆⋆⋆ 代码: 思路遍历序列sss的每个字符strstrstr初始化子序列sub_ssub\_ssub_s,如果在sub_ssub\_ssub_s中能找到strstrstr,则说明该阶段的子序列查找完毕以strstrstr为标志分割sub_ssub\_ssub_s,取后面的取代sub_ssub\_ssub_skey: 这里截取后的sub_ssub\_ssub_s要加上strstrstr,不然会漏掉这个字符遍历完sss结束程序...原创 2022-06-12 16:01:35 · 78 阅读 · 0 评论 -
median-of-two-sorted-arrays
结果:⋆⋆\star\star⋆⋆ 代码: 思路:同时遍历两个num list,按顺序大小存入新数组,算到一半长,奇数个取最后一个,偶数个取最后两个的平均值,结束运行难处:各种边界的判断*题目规定了时间复杂度,因此应该是二分查找,没做出来,该改进......原创 2022-06-13 15:48:03 · 97 阅读 · 0 评论 -
剑指 Offer 07. 重建二叉树
多余实现了树的先序排列(用于检查自己构建的二叉树是否正确),以及实现了二叉树的层级遍历,以及做了最后因为包含填充null的原因,所以还有去除null的操作。就是按照手算的顺序,一步一步根据根节点划分左右子树,并递归,递归的时候根据根节点索引位置判断是否有左右子树。内存消耗:72.9 MB ,在所有Java提交中击败了8.90%的用户。执行用时:8 ms ,在所有Java提交中击败了13.35%的用户。二叉树的三种顺序遍历:指三节点中的中间根节点在相邻两个节点中的位置。通i过测]试用例:203/ 203。原创 2022-09-13 00:52:33 · 125 阅读 · 0 评论 -
剑指 Offer 06. 从尾到头打印链表
内存消耗:41.8 MB ,在所有Java提交中击败了74.21%的用户。内存消耗:42.3MB,在所有Java提交中击败了12.17%的用户。执行用时:0 ms ,在所有Java提交中击败了100.00%的用户。执行用时: 3 ms,在所有Java提交中击败了6.33%的用户。每次都在最开始插入链接元素的值。再遍历链表得到value,倒序填充链表。通过测试用例: 24/ 24。通过测试用例:24/ 24。执行结果:通过显示详情>执行结果:通过显示详情。先遍历链表得到size。擅长增删的特点,使用。原创 2022-09-12 15:43:47 · 141 阅读 · 0 评论 -
剑指 Offer 05. 替换空格
内存消耗:39.3 MB ,在所有Java提交中击败了58.59%的用户。执行用时:0 ms ,在所有Java提交中击败了100.00%的用户。通i过测]试用例:27 / 27。执行结果:通过显示详情>,拼接字符串时,使用。原创 2022-09-12 14:03:28 · 71 阅读 · 0 评论 -
剑指 Offer II 001. 整数除法
,即[-2147483648, 2147483647],负数比正数多一个,负转正时会出问题,因此都转为负数来处理。从除数出发,一直叠加,每次在上一次的基础上叠加,并使用一个数组(栈)来记录。加到顶以后,又从栈的最高层慢慢减下来,并折算次数,这个次数和栈的下标有关。实现难处:各种边界,相互牵扯的映射关系使得调试很久。一种是蠢办法,一直减那个除数,会超时。花费了一天时间解决。原创 2022-09-09 19:22:01 · 126 阅读 · 0 评论