sword
文章平均质量分 56
玛丽莲茼蒿
把热爱的工作做精、做尖才是最酷的
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
剑指 Offer 47. 礼物的最大价值
最开始只想到用递归(深度优先),虽然我知道递归一定会超时,而且貌似也没有办法去剪枝。但是我只想到了这一个方法。:把所有的路都走一遍,用一个全局变量maxValue去记录最大值。:DFS的时间复杂度是?:递归用到一个栈,空间复杂度应该是O(n)原创 2023-06-26 21:19:27 · 57 阅读 · 0 评论 -
剑指 Offer 63. 股票的最大利润
注意由于这里与上一题的唯一区别在于允许多次股票买卖,因此递推公式与上面的四种情况基本相同,唯一一点在于由于我们可以进行多次买卖,所以在某次购买股票之前的未持有股票的收益不一定是 0 了(我们可能在这次操作之前已经通过几次操作收获了一些利润)。:第i天不持有股票的最大利润=继续第i-1天不持有股票的最大利润与今天卖出的最大值。:第i天持有股票的最大利润=继续持有第i-1天股票的最大利润与今天买入的最大值。dp[i][1]: 不持有股票时的最大利润。dp[i][0]:持有股票时的最大利润。原创 2023-03-21 09:38:03 · 146 阅读 · 0 评论 -
剑指 Offer 21. 调整数组顺序使奇数位于偶数前面
自己手动画一下就明白了。维护两个指针i和j,i去遍历nums,j记录从左到右第一个偶数出现的位置(注意,仔细分析会发现j到i之间的必然都是偶数)和快排一样,一个low指针从左往右找第一个偶数,一个high指针从右往左找第一个奇数,直到low指针>high指针。新建另一个vector result就能简化问题,增加空间复杂度来简化问题,这我最常用的思路。扫描一遍nums,把奇数都装进result里。然后再扫描一遍,把偶数装进来。原创 2023-03-15 11:43:00 · 52 阅读 · 0 评论 -
剑指 Offer 20. 表示数值的字符串
但是里面有重复的代码,我把他们抽出来作为一个函数。穷极我能考虑到的情况,写出如下代码。原创 2023-02-22 10:06:57 · 37 阅读 · 0 评论 -
offer 正则表达式
根据测试用例调整:如果指着j在while(s[j]==p[i])这个循环里就就达到了s.length(),直接退出大循环,此时i应该自增却没有自增,所以要加一句。如果不考虑特殊的测试用例,核心代码如下,通过率。原创 2023-02-13 23:27:55 · 47 阅读 · 0 评论 -
剑指 Offer 18. 删除链表的节点
如果要删除的结点是尾结点(if pToBeDeleted->next = null),那么就没法用后置结点为其赋值。但是剑指offer上给定的参数是链表的头结点指针和要删除的结点指针,然后要求O(1)的时间复杂度。如果不给定要删除的结点指针的话也没法实现O(1)的时间复杂度。:和上面思路一样,遍历一遍找到前置结点,然后pre->next = 要删除的->next。给定的参数是链表的头结点指针和要删除的结点的值。:把要删除结点的后置结点的值赋值给要删除的结点,然后删除后置结点(好阴险)原创 2023-02-13 22:23:37 · 56 阅读 · 0 评论 -
剑指offer 17.字符串处理大数加法
LeetCode这道题出错了,因为它直接要求返回值是int类型的,所以一开始的写法,直接用int,直接AC这个题的陷阱在于题目并没有告诉你n的范围,用int可能会溢出,那就用long,用long就不会溢出里面,也可能会,因为题目里并没有说明n的范围。所以这是一个大数加法问题,要用字符串/字符数组解决。这里选择用的字符数组。疑问:为什么非要用char数组,用int数组不行吗?原创 2023-02-12 16:31:02 · 62 阅读 · 0 评论 -
剑指offer 16.实现pow(x,n)函数
我猜测是因为乘法的次数太多了。计算2×2×2×2时,CPU做了4次乘法,比4×4用的时间要2倍?如果用循环累乘去计算2^64次方,需要63次乘法,用递归去做只需要6次。所以我们不能用循环的方式一直乘一直乘,那么用递归吧!考虑了边界以后,得到如下通过率301/304的代码。原创 2023-02-11 23:23:50 · 40 阅读 · 0 评论 -
剑指offer 15.二进制中1的个数
在做这个题的时候,我并不知道还可以用位运算。我的思路是这样的:从高位往低位看,原创 2023-01-04 16:44:20 · 58 阅读 · 0 评论 -
剑指offer 12. 矩阵中的路径
之所以出现两种写法,不是因为数据结构是二叉树,而是因为递归本身!之前写二叉树的时候不是总结了4种递归出口吗!通过做这个题发现了一个惊天问题!前两种和后两种的区别其实在于“每一个递归,都有两种写法!原创 2022-12-26 13:04:37 · 40 阅读 · 0 评论 -
快排partition函数的应用——剑指offer 39
思路:首先我们要明确“数组长度的一半”,偶数数组好说,奇数数组比如长度为9的数组,一半是4.5,我们就取4。无脑的方式是排好序+遍历,遍历的其时间复杂度是O(n),而排序算法的时间复杂度最小是O(nlogn),所以采用无脑方式的话整个题的时间复杂度是O(nlogn)。有没有再简单一点的方法呢?题目中的“一半”是思考的切入点。快排的思路就是把数组分成两部分,既然是两部分,必然有一部分长度小于等于一半,另一部分大于等于一半。和快排不同的是,我们无需理会小于等于一半的那一部分,直接在大于等于一半的那部分递归即可,原创 2022-12-22 16:17:44 · 58 阅读 · 0 评论 -
剑指offer 14. 剪绳子I 剪绳子II
这3种组成不是一次就能想到的,所以要进行测试,根据测试的结果反推有没有漏掉的可能。发现dp[5]的答案不对,进而发现漏掉了j*(i-j)这种情况。比如我之前只写了前两种,而漏掉了j*(i-j),在测试的时候。原创 2022-12-22 15:14:19 · 66 阅读 · 0 评论 -
剑指offer 11 旋转数组的最小数字
如果把数组从头到尾遍历一遍,时间复杂度才是O(n),所以我们要选一个复杂度为O(logn)的查找算法。原创 2022-12-22 14:25:11 · 41 阅读 · 0 评论 -
剑指off 10. 斐波那契数列/跳台阶
这两个题主要用来体会用递归解题和动态规划的区别,或者说。这个区别我们之间发现过,【算法】动态规划与递归——感受动态规划是递推!注意,是推!_玛丽莲茼蒿的博客-优快云博客1.打家劫舍**注意:(1)一开始我只想到了隔一家偷一次,这些写出来的代码通过率还可以但是没想到,还有上图这样隔两家才是最好的偷法。(2)动态规划步骤一:定义子问题稍微接触过一点动态规划的朋友都知道动态规划有一个“子问题”的定义。什么是子问题?子问题是和原问题相似,但规模较小的问题。原创 2022-12-22 10:14:07 · 77 阅读 · 0 评论 -
剑指 Offer 05. 替换空格
由此推测,C++中封装的string是底层也是一个char []value数组(所以它才可以通过s[0]的形式访问),只不过它是可变的。经过一次次的测试,我发现输入string的长度太长,就会报出栈溢出的错误。4. java中的string类型是不可变的,因为底层用final char value[]存储,但显然C++中的string类型是可变的,在java中,就不会出现这样“迷惑人”的问题,因为java中比较两个引用(地址)用的是“==”,比较内容用的是equalsTo()方法。1)空格在开头如何处理?原创 2022-10-24 11:20:19 · 62 阅读 · 0 评论 -
剑指 Offer 04. 二维数组中的查找
题目当中说完成一个“高效的函数”,意思是暴力搜索肯定会超时吧。:O(n*m):O(1)但我还是试了一下暴力搜索。本以为会超时,居然。。。不是,这个LeetCode到底准不准啊???原创 2022-10-22 18:06:31 · 53 阅读 · 0 评论
分享