LeetCode

RoadMap

Index

二叉树

124. 二叉树中的最大路径和(DFS)

https://leetcode-cn.com/problems/binary-tree-maximum-path-sum/description/

题目描述

暴力求解的思路

  • 利用一个子函数,求出每个节点最大深度路径和(做法类似求树的深度

    • 注意,因为节点中的值可能为负数,所以最大深度路径和不一定都会到达叶子

    • 同样,最大深度路径和也可能为负数,此时应该返回 0

  • 接着对每个节点,经过该节点的最大路径和为

  • 空树的最大路径和应该为负无穷(作为递归基);但实际用例中没有空树的情况

C++

  • 初始版本(AC)

  • 改进

    • 使用一个变量保存中间结果

优化方案

  • 记忆化搜索(树DP);简单来说,就是保存中间结果

数组

560. 和为K的子数组(前缀和 + Map)

https://leetcode-cn.com/problems/subarray-sum-equals-k/description/

问题描述

思路

  • 前缀和 + map

  • 难点在于重复的情况也要记录

C++

838. 推多米诺(双指针)

https://leetcode-cn.com/problems/push-dominoes/description/

问题描述

思路

C++

15. 三数之和(双指针)

https://leetcode-cn.com/problems/3sum/description/

问题描述

思路

  • 因为需要输出所有结果,所以不推荐使用 map 来做

  • 判断 a + b + c = 0,实际上等价于判断 -a = b + c

  • 基本思路:对数组排序后,对每个 a,用首尾双指针进行遍历,具体过程看代码更清晰

  • 去重的方法:排序后,跳过相同的数即可

  • 注意边界条件

C++

16. 最接近的三数之和(双指针)

https://leetcode-cn.com/problems/3sum-closest/description/

题目描述

思路

C++

729. 我的日程安排表 I(多级排序)

https://leetcode-cn.com/problems/my-calendar-i/description/

题目描述

思路

  • 按 start 排序,利用二分查找(lower_bound),找到待插入位置

  • 关键是判断能否插入,需要同时判断前后位置,此时需要注意边界条件

  • C++

  • C++-利用 STL 中的 set/map 结构自动排序

26. 删除排序数组中的重复项

https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array/description/

题目描述

C++

暴力搜索

200. 岛屿的个数(DFS | BFS)

https://leetcode-cn.com/problems/number-of-islands/description/

问题描述

思路

  • 经典的 DFS | BFS 问题,搜索连通域的个数

Code: DFS

Code: BFS

最后更新于

这有帮助吗?