一个算法笨蛋的3月leetCode刷题日记

类似文章

一个算法笨蛋的2021年11月leetCode刷题日记

一个算法笨蛋的2021年12月leetCode刷题日记

一个算法笨蛋的2022年1月leetCode刷题日记

一个算法笨蛋的2022年2月leetCode刷题日记

一个算法笨蛋的2022年3月leetCode刷题日记

时间情况
2022年3月4日
【343】整数拆分(思路:这题做出来了,耗时30多分钟,medium题。这题又印证了我之前的理论:如果看题目感觉完全没思路,脑子乱成一团。那就先套框架,可以有效帮助我们解答。第一步,确认数组含义,也就是确认dp table的含义;第二步初始化,也就是base case;第三步两个for循环;第四步脑子里疯狂想如何由dp[0],dp[1],dp[2]…dp[i-1]推导出dp[i]。根据这套理论,我就是在看完题目后完全没思路的情况下,一步步写出来了,非常amazing。不过这题需要注意的就是2,3需要提前处理,因为dp[1],dp[2],dp[3]用来计算是不能直接根据状态转移方程来的,具体无法说清楚,我之所以可以找到这种特殊,大概是神来之笔?)
2022年3月5日
2022年3月6日
2022年3月7日
【357】计算各个位数不同的数字个数(思路:没做出来,没找出dp[i]和dp[i-1]的关联,我发现对动态规划的题做熟练后,就是个数学归纳题,找规律。对于初始化,找状态,定义数组都是信手捏来。但是状态转移方程还得看能不能找到规律才行。有点难受,这规律有点难找到啊,dp[i] = dp[i - 1] + f;其中f初始化为9,m也初始化为9,f=f*m; m–;这属实不是正常人能找到的规律 )

【10】正则表达式匹配(思路:不出意外,没做出来,毕竟是hard题,需要考虑的东西挺多的。但是有一说一,我的状态定义和dp数组的定义是正确的。dp[i][j]代表字符串s的前i个字符,和正则字符串p的前j个字符能否匹配。除此以外,我都错了,包括初始化,状态转移方程。有点烦,为啥初始化是直接定义dp[0][0] = true;按照我的理解,不应该是dp[i][0],dp[0][j]都得初始化为false吗?还有就是状态转移方程也是啰啰嗦嗦,能看懂代码,但是怎么想到这种代码的,还是不理解)
2022年3月8日
【42】接雨水(思路:我做出来了,hard题,有史以来第一次,我自己都没想到,没有看过任何解法,没有看过任何思路文章,纯纯的第一次接触这题,我只听过接雨水是动态规划的经典题。完全凭借自己琢磨,自己揣摩题意,然后一步一步的写出来了,在写完后,运行测试用例,也只是稍微改了一下数组的宽度,一两个字符的改动。然后就直接一次通过了,在运行多个测试用例后,提交也是一次通过。耗时击败76%,内存击败31.28。我实在是太强了,太强了,太强了,太强了)
补充一下,冷静下来后,发现有种方法比我这种好多了,无论是代码量,耗时,还是理解难度都更胜一筹。也就是双指针法,除了内存使用的比我的方法多一点,基本没啥缺点,非常巧妙,学到了。
2022年3月9日【32】最长有效括号(思路:这题没做出来,也是hard题。想了非常非常非常久,一晚上都过去了,还是没想到,一开始是尝试使用动态规划 ,然后发现没思路,而栈有了点思路。于是就一直在用栈在尝试解答,想的头皮都要炸了,但是代码改了又改,总是有一种或几种测试用例过不去,最后只能放弃,看题解去了。这题动态规划来写挺简单的,但是也要考虑的非常清晰才行。首先只有在当前字符为“)”时,才有可能是最长有效字符串的末尾字符,否则以当前字符串作为最长子串的一部分的话,这个最长子串的长度只会是0。那么我们只需要考虑s[i-dp[i-1]*2 - 1]的字符到底是“(”,还是“)”。如果是“(”,且i-dp[i-1]*2-1的值大于等于0,那么就可以直接+2,否则就是0)
2022年3月10日【45】跳跃游戏 II (思路:这题做出来了,medium题。这题对于身经百战的我,用动态规划的写法,基本上没有难度(虽然还是有非常多的medium题我还是做不出来,尴尬)。虽然分分钟做出来了,但是效率不高,第一次提交的耗时击败5%,内存击败20%。这我也理解,毕竟我的时间复杂度都快有O(n^2)了。遂优化,优化也没办法改变需要两个for循环的事实。最后看题目最大值为1000,所以加了个条件,内循环最多循环1000次,勉强减少了一半的耗时,但是还是差。看题解发现没有一个题解能够用动态规划写出好的复杂度。都是用的贪心。老实说,贪心我不熟,后面还得去学啊!!!!)
2022年3月11日以下为2022年10月26日开始的刷题记录,断更了7个月,在此续上一会,不会刷太久
2022年10月26日【105】从前序与中序遍历序列构造二叉树(思路:这题做出来了,说实话不难,考的大部分是耐心和观察力,需要通过列出两个较长的例子,从而找出规律,并通过递归的方式表达出来,准确的说我其实取巧了,是通过一篇文章看到了这题,虽然没看解法,但是看到了文章中的函数签名;但是我还是觉得我挺强,嘿嘿。核心算法就是通过前序遍历找根节点,通过中序遍历找左右子树。重复如此最后返回构造的root,root.left = dfs(左子树函数签名),root.right = dfs(右子树的函数签名))
2022年3月13日
2022年3月14日
2022年3月15日
2022年3月16日
2022年3月17日
2022年3月18日
2022年3月19日
2022年3月20日
2022年3月21日
2022年3月22日
2022年3月23日
2022年3月24日
2022年3月25日
2022年3月26日
2022年3月27日
2022年3月28日
2022年3月29日
2022年3月30日
2022年3月31日
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

三七有脾气

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值