Posts 2021年第三季度刷题整理
Post
Cancel

2021年第三季度刷题整理

6月一整个月忙东忙西没咋写代码,手又有点生了==

碎碎念一下,还是得保持自律啊TvT

git链接

我的leetcode刷题记录

279.完全平方数

题目链接

1.一个关键问题既是如何减少尝试次数,上来就想到的是,从大的开始试。然后在函数内部写一个递归,同时要维护一个最多尝试次数用于及时剪枝。最后实现效果还是比较好的

2.看了题解,数学法不说了,还有动态规划法。动态规划法值得学一下动态规划的官方题解

3.动态规划法效率远差于暴力加剪枝,实际上,剪枝法避免了大量不必要的尝试,而动态规划法还是遍历了所有的情况

136.只出现一次的数字

题目链接

1.题目要求线性复杂度,最好不使用额外空间。线性复杂度不难,可上集合,如何不使用额外空间思路有点卡住了。

2.看了下题解豁然开朗,全部异或一下解决

142.环形链表2

题目链接

1.不进阶很好实现,见git。借助集合即可

2.空间复杂度o(1)需要借助快慢指针,思考过程复杂一些。官方题解

152.乘积最大子数组

题目链接

1.除了暴力法,没想到清晰的解决方案。思考了动态规划,没想出来怎么应对负负得正的情况。

2.看了题解豁然开朗,同时维护两个值,一个尽可能小一个尽可能大题解

43.字符串相乘

题目链接

1.把每个位数都单独拆出来相乘,结果根据位数位置放进一个列表里,最后再拼回来即可。这样做绝对不会溢出

169.多数元素

题目链接

1.找到非常简单,最简单的是直接用计数的字典。没想到怎么弄成o(1)空间复杂度

2.虽然是个简单题,方法异常的多。随机法,分治法这俩没啥意义,排序法还可以,如果用堆的话。最后的Boyer-Moore 投票算法符合题目最高要求题解

207.课程表

1.先有了简单的思路,按照配对,一顶可以通过先修关系一直向前寻找,可以维护一个set,只要在向前寻找时发现有课已经在set中,那必然出现了循环。思考后,发现这个思路下,必须得按照关系追踪,这在数列中是不方便的。

2.想到了一个改良,生成一个课数目的列表,将对应课位置的值改为它的先修课,之后再验证这种指向是否形成环。但是这种方法没有办法应对a有b,c两个先修课的情况

3.一个笨办法,将关系对按2转化一下,但是相当于是个二级列表指向,然后判断里面有没有循环。但是这样也很麻烦。

4.还是看答案吧,这个涉及了图算法属于知识盲区了。仔细看了下代码,其实就是我3的思路题解

5.题解还有广度优先,思路是把能学的课学掉,之后继续学掉新的可以学的课,最后无课剩余就无环

226.翻转二叉树

题目链接

1.递归解决

238.除自身以外数组的乘积

题目链接

1.先顺序乘,遇到某个数就跳过,然后把值赋值到对应位置,再从后往前乘,还是去掉对应位置的值赋值。

2.耶,直接实现了最优算法。

621.任务调度器

题目链接

1.先用一个字典把所有任务数出来,再用一个集合把所有任务类型数出来,用一个字典表示任务处理器,每次一个新任务到达,对应的任务类型的value+n,每一轮对不是零的任务类型-1模拟冷却。尽可能从数好的任务里取除任务处理器里已经冷却完成的任务

2.更新第二版后对于集合做了些调整,逻辑没问题了但是会超市。

3.没办法上解答,思路对的,实现细节繁琐了。任务调度器

8.字符串转换整数

题目链接

一个有限状态自动机的题,参考了题解的标准的自动机写法

208.实现前缀树

题目链接

看了题解,本身不难,注意细节。

程序员面试金典01.01 判断字符串是否唯一

1.用set或者数组作为额外辅助的办法非常的简单,没有意义,这题关键在于如何实现一个不借助额外的数据结构的方法

118.杨辉三角

1.很简单,但是在写的时候如何写的简洁还是想了一下的。先生成[1]*个数的数列,在第一层和第二层直接加入结果,其他情况再计算

36.有效数独

1.上来想到的就是建立一个27个set的列表,9个对应行9个对应列9个对应9个小区域,用换算的方式找到对应的表,用空间换取冲突检测的正确性,对每个位置最多遍历一次

2,[set()]*27的方式不可取,最终所有set都指向同一个。

50. Pow(x,n)

1.肯定是通过过去的计算减少重复计算,其实就是n次方一定可以拆成2的次方的和,问题就是怎么拆了。

2.首先想到的是不停把x一直平方下去,直到n不够大,再倒回去减。先实现再说。

3.对2的思路反思,不大行,会出现难以预测的重复计算,假设2的16次方,那么在计算的时候,1次方,试除,再2次方,一直下去,会试到8,然后再得返回1.但是明明直接到16也可以的。只能看题解了

4.对于问题3,考虑何时需要额外乘以x是思路的关键点

70.矩阵置零

1.直观的想到的是记录需要置零的行和列,(m,n)的矩阵将使用[m,n]的额外空间,两次遍历。总之先写出来吧

2.只用常数额外空间的话,可以先改成-1,再改成0,要注意不能把别的0改成-1。

3.2中方法行不通,因为-1也会出现,没认真读题。python里虽然可以投机取巧,因为没有数字上限而乱整,但是感觉不是这道题的考察点。

4.题解给了单标记和双标记法。代码的注释里有详细的思路和反思

待续

This post is licensed under CC BY 4.0 by the author.

何为ci_cd

弱智集锦