算法学习
Day 1
删除排序数组中的重复项(简单)
给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。
不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。
// Java 快慢指针法 |
复杂度分析
- 时间复杂度:O(n)
- 空间复杂度:O(1)
盛最多水的容器(中等)
给你 n
个非负整数 a1
,a2
,…,an
,每个数代表坐标中的一个点 (i
, ai
) 。在坐标内画 n
条垂直线,垂直线 i
的两个端点分别为 (i
, ai
) 和 (i
, 0
)。找出其中的两条线,使得它们与 x
轴共同构成的容器可以容纳最多的水。
说明: 你不能倾斜容器,且 n 的值至少为 2。
// Java 双指针法 |
复杂度分析
- 时间复杂度:O(n)
- 空间复杂度:O(1)
Day 2
N 叉树的前序遍历(简单)
给定一个 N 叉树,返回其节点值的前序遍历。
例如,给定一个 3叉树
:
返回其前序遍历: [1,3,5,6,2,4]
。
// 定义节点 |
二叉树的前序遍历(中等)
给定一个二叉树,返回它的 前序 遍历。
示例:
输入: [1,null,2,3] |
// Java |
Day 3
二叉树的最大深度(简单)
给定一个二叉树,找出其最大深度。
二叉树的深度为根节点到最远叶子节点的最长路径上的节点数
说明: 叶子节点是指没有子节点的节点。
示例:
给定二叉树 [3,9,20,null,null,15,7]
,
3 |
返回它的最大深度 3 。
广度优先搜索法
// Definition for a binary tree node. |
验证二叉搜索树(中等)
给定一个二叉树,判断其是否是一个有效的二叉搜索树。
假设一个二叉搜索树具有如下特征:
- 节点的左子树只包含小于当前节点的数。
- 节点的右子树只包含大于当前节点的数。
- 所有左子树和右子树自身必须也是二叉搜索树。
示例 1:
输入: |
示例 2:
输入: |
递归法
class Solution { |
Day 4
分类 | 难度 | 题目 | 描述 |
---|---|---|---|
数组 | 简单 | 两数之和 | https://leetcode-cn.com/problems/two-sum/ |
数组 | 中等 | 三数之和 | https://leetcode-cn.com/problems/3sum/ |
链表 | 简单 | 环形链表 | https://leetcode-cn.com/problems/linked-list-cycle |
链表 | 中等 | 两两交换链表中的节点 | https://leetcode-cn.com/problems/swap-nodes-in-pairs |
二叉树 | 简单 | 二叉树的最大深度 | https://leetcode-cn.com/problems/maximum-depth-of-binary-tree |
二叉树 | 简单 | 二叉树的最小深度 | https://leetcode-cn.com/problems/minimum-depth-of-binary-tree/ |
二叉树 | 中等 | 二叉树的层序遍历 | https://leetcode-cn.com/problems/binary-tree-level-order-traversal/ |
递归 | 简单 | 泰波那契数 | https://leetcode-cn.com/problems/n-th-tribonacci-number/ |
递归 | 中等 | 括号生成 | https://leetcode-cn.com/problems/generate-parentheses/ |