leetcode热题HOT-100道题

leetcode刷题记录

题目

LeetCode 热题 HOT 100 关于树的题目

652 寻找重复的子树
序列化二叉树 只能前序或后续遍历 利用map记录每个根节点的序列化字串 若系列化字串数量大于2就是重复的子树

112 路径总和
递归实现 若当前节点为叶节点且targetSum等于当前节点 返回ture 否则return 用或语句递归左右子树

113 路径总和 II 求路径 和剑指 Offer 34. 二叉树中和为某一值的路径一样
和路径总和解法相似
深度优先遍历 若当前节点为叶节点且targetSum等于当前节点 记录当前路径
在递归中先将节点值加入路径 然后递归左右子树 再移出当前节点值

437 路径总和 III 求路径等于targetSum的数量
两个递归
主函数递归到每一个节点 以当前节点为根节点递归寻找路径总和
第二个递归函数和 112 路径总和差不多(不要求是叶节点) 当targetSum等于当前节点值 记录路径数量

337 打家劫舍 III 动态规划
以根节点为子树的最高金额有两种情况 选根节点的值 不选根节点的值
选根节点的值 左右节点的值就不能选
不选根节点的值 左右节点的值可选可不选 取最大值
后续遍历

236 二叉树的最近公共祖先
面试经典题 递归实现 递归函数返回当前以root为根的子树是否包含 p q 返回root
递归结束条件是root节点为p q节点中一个返回root
若root为null 不存在 返回null
否则递归左右子树 根据左右子树的递归情况判断
递归函数返回 是否包含 p q节点的子树 根节点

扩展题 二叉搜索树的最近公共祖先
利用二叉树的性质 判断root.val 和 p q的大小关系 得到最近公共祖先在左右子树的哪一边

297 二叉树的序列化与反序列化
// 深度优先遍历
序列化用前序遍历处理 返回前序遍历的字符串
反序列化 将字符串转化为字符队列 然后dfs处理
在dfs函数中 取出一个字符 若为null返回null 然后创建字符值的节点 左右子树分别dfs剩下的字符队列

LeetCode 热题 HOT 100 关于链表的题目

19 删除链表的倒数第 N 个结点
//定义快慢指针
//定义临时节点
//一次遍历

21 合并两个有序链表 正常思路
23 合并K个升序链表
//归并排序 将K个升序链表分而治之, 然后归并两个升序链表
或者两两合并 用一个结果存合并后的链表 再和下一个升序链表合并

148 排序链表
//归并排序
//将链表拆分两个链表 然后归并排序
//快慢指针找到中间节点
//记得定义fast 为head.next 不然在找中间节点 两个值时会栈溢出

234 回文链表
将链表的值复制到数组中 然后双指针比较

141 环形链表 快慢指针

142 环形链表 II 找到环入口的
//快慢指针
// 相遇时 一个从头一步一步走 一个在相遇点一步一步走 最终相遇

160 相交链表 交换一下 正常操作 注意写法 循环要跳出来的
是pA = pA == null ? headB : pA.next;
不是pA = pA.next == null ? headB : pA.next;

146 LRU 缓存机制
要自己实现一个双向链表
双向链表实现 addFast remove removeLast size
链表哈希法 多写几次吧 没别的办法了

LeetCode 热题 HOT 100 关于动态规划的题目

322 零钱兑换 求凑成总金额所需的 最少的硬币个数
注意非0初始状态的定义 dp[i] = amount + 1
零钱兑换2 定义初始状态 dp[0] = 1就行

198 打家劫舍
//定义dp[i]为连续0-i房屋能偷窃的最大金额

337 打家劫舍 III 自己写出来过了+1
//定义一个dfs 函数返回以每个节点为根的子树 最高偷窃金额 分两种情况 选节点的值或不选节点的值
注意当不选节点的值时,左右节点的值可选可不选 取最大值

494 目标和 这道题用回溯法最简单 容易理解

647 回文子串 动态规划
//定义dp[i][j] 子字符串i-j是否为回文子串
注意外循环是j 内循环是i 这个和转移方程的判断有关 dp[i+1][j-1]
可以用中心扩展法做 这个好理解 记这个

扩展题 5 最长回文子串 这道题是用中心扩展法做的 就是遍历找到中心位置(一个 或 两个中心) 往两边扩展看是否为回文子串

121 买卖股票的最佳时机 so easy

309 最佳买卖股票时机含冷冻期 好难! 还不会 卡在理解状态转移问题上

338 比特位计数 技巧问题 动态规划 奇数就是前面偶数加1 偶数二进制右移 1的个数不变

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值