首页
首页
沸点
课程
直播
活动
竞赛
商城
APP
插件
搜索历史
清空
创作者中心
写文章
发沸点
写笔记
写代码
草稿箱
创作灵感
查看更多
会员
登录
注册
代码重构
若信
创建于2021-05-13
订阅专栏
主要用来重新书写之前写过的leetcode题目,对代码进行重构
暂无订阅
共28篇文章
创建于2021-05-13
订阅专栏
默认顺序
默认顺序
最早发布
最新发布
代码重构:leetcode 29.两数相除
29.两数相除 本质可以二分,但二分两种。下面展示两种。 同时这题要注意的,也同样是我们大量问题的缩影,如何处理边界问题。如果归纳到我们的解题框架,也就是解题建模: 如何确定我们的答案空间。本题有问题
代码重构:leetcode 28. 实现 strStr()
28. 实现 strStr() 这可以是一个暴力匹配的简单题。但如果这样写,就显得毫无意义。 于是,可以写KMP算法。 这题的重点是理解KMP算法中的next求解方式,按照之前我们所努力的,给我们的求
代码重构:leetcode 25. K 个一组翻转链表
25. K 个一组翻转链表 题目的实际上就是一个模拟,但就如我们之前所描述的,模拟和把算法表达出来是一个意思。 要把算法表达和写出来,需要我们建模:在我们证明正确的模型下进行各种定义,然后需要保证在求
代码重构: leetcode 24. 两两交换链表中的节点
24. 两两交换链表中的节点 很符合逻辑的写法,就是记录要交换两个节点之前的那个节点。 需要注意的点就是链表常见的空的问题,这题使用短路方式来判断,pre节点之后必须有两个节点才交换 做个谨慎的人,在
代码重构: leetcode 23. 合并K个升序链表
23. 合并K个升序链表 我们可以模仿合并两个链表的那样,扩展到多维,但为了快速比较哪个小,使用优先队列来判断。 使用归并,两两合并,再最终合并 但需要考虑的点是:如何像合并两个链表那样知道指针移动方
代码重构:leetcode 22. 括号生成
22. 括号生成 看到题目,我们就立即可知,这是一个递归搜索的问题。 但关于同一种思路的建模,有两种: 递归中,保证右括号总是小于等于左括号,于是返回条件就是右括号数量等于n 递归中,不控制左右括号关
代码重构: leetcode 21. 合并两个有序链表
21. 合并两个有序链表 同样是一道简单题,逻辑思路简单清晰。我原本是不愿意记录的。但是写着写着发现了新的东西,于是就记录了一下。 平时在写这题的时候,最后情况下会这样做: 但今天写着写着,这实际上完
代码重构: leetcode 20. 有效的括号
20. 有效的括号 其实题目很简单,就是一个栈的匹配问题,也不能玩出什么花来,但让我注意的是有之前[12、整数转罗马数字一样],存在少量重复结构,对于题目而言,我们只写leetcode,求速度和过,是
代码重构:leetcode 19. 删除链表的倒数第 N 个结点
19. 删除链表的倒数第 N 个结点 题目很简单,实际上就是双指针,两个指针间隔一定距离,使得在快指针指向空的时候,慢指针要指向倒数低n+1个元素,于是就得到其实是要寻找第倒数n+1个元素。 但题目的
代码重构: leetcode 18. 四数之和
18. 四数之和 和第17题,一样的策略,证明思路也是类似的。 操作的话,就是先确定好最小两个数字,然后按照【有序数组里面两数之和】的方式来求解,去重也是类似,不能在同一个位置,取两次相同的数字。
代码重构: leetcode 17. 电话号码的字母组合
17. 电话号码的字母组合 本质上就是一个dfs,然后在过程中使用stringbuilder而不是string,减少空间的消耗 同时注意对空的处理
代码重构: leetcode 16. 最接近的三数之和
16. 最接近的三数之和 题目和第十五题是类似的,解题方式也是一样:先排序,固定一个最小数字,然后再按照寻找target的方式来。 但这题的难点在于,如何证明或者说理解解答方式的正确性。 下面做一个简
代码重构: leetcode 15. 三数之和
15. 三数之和 我们知道这题思路是固定一个数字,然后按两数之和来求,但有一点需要注意的是如何求去重的。 显然,如果想去重,可以直接把答案放入set,然后写compare函数就可以解决,但这样太慢,有
代码重构: leetcode 14、最长公共前缀
14、最长公共前缀 很简单和自然的模拟。 在模拟时候,采用横向模拟,因为横向无法确定什么时候跳出,所以用while来做主循环。
代码重构: leetcode 13. 罗马数字转整数
13. 罗马数字转整数 题目意思也很明确,就是一个简单模拟,需要注意的点是: 当I、X、C出现时候,多一个判断,如果后面比之前大,那么是减,否则是加 如何把代码写好看了,尽量把预处理函数提到函数外,这
代码重构:leetcode 12. 整数转罗马数字
12. 整数转罗马数字 就是一个模拟,每次处理完的结果都要是比之前的值小,比如处理完1000后,必须比1000小。 但这个程序实际上带来了两个问题: 如果追求代码的可读性和可扩展性,就会导致空间和时间
代码重构:leetcode 11. 盛最多水的容器
11. 盛最多水的容器 这种问题我们是需要考虑的。 这是一种典型的,目标值是一个乘积,两维的乘积,于是如果我们大海捞针,就需要完全遍历,但一般的二维,我们都可以考虑以下方式: 把一个维度先排序,然后在
代码重构:leetcode 10. 正则表达式匹配
10. 正则表达式匹配 首先定义: 设s为原串,p为匹配符串 dp[i] [j] 代表,s串的1到i个字符是否与p串的1到j个字符匹配 于是我们在回到定义: 若 s[i] == p[j] || p[j
代码重构:leetcode 9.回文数
9.回文数 简单我们即使模拟走一遍,存储每个数字走一遍也问题不大,因为比较只是int形。 但这题提供了一个回文的思路,还是不错的。 利用前后的大小来看对称与否。
代码重构: leetcode 8. 字符串转换整数 (atoi)
8. 字符串转换整数 (atoi) 其实就是模拟一下。 但值得注意的是,我们在判断溢出时候,以及在判断是否符合情况,如何做到逻辑的简化和代码的书写。 我们的逻辑规划: 判断第一个是否是符号,然后标记正
下一页