给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。 返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。 示例 1: 示例 2: 提示: 解题: 官方解答: 1.暴力法 2.一次遍历
算法
LeetCode 120 三角形最小路径和
给定一个三角形 triangle ,找出自顶向下的最小路径和。 每一步只能移动到下一行中相邻的结点上。相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 + 1 的两个结点。也就是说,如果正位于当前行的下标 i ,那么下一步可以移动到下一行的下标 i 或 i + 1 。 示例 1: 示例 2: 提示: 解题: 官方解答: 1.动态规划 2.动态规划 + 空间优化 优化
LeetCode 119 杨辉三角 II
给定一个非负索引 rowIndex,返回「杨辉三角」的第 rowIndex 行。 在「杨辉三角」中,每个数是它左上方和右上方的数的和。 示例 1: 示例 2: 示例 3: 提示: 进阶: 解题: 官方解答: 1.递推 优化,使用滚动数组 进一步优化 2.线性递归
LeetCode 118 杨辉三角
LeetCode 117 填充每个节点的下一个右侧节点指针 II
给定一个二叉树: 填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL 。 初始状态下,所有 next 指针都被设置为 NULL 。 示例 1: 示例 2: 提示: 进阶: 解题: 官方解答:
LeetCode 116 填充每个节点的下一个右侧节点指针
给定一个 完美二叉树 ,其所有叶子节点都在同一层,每个父节点都有两个子节点。二叉树定义如下: 填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。 初始状态下,所有 next 指针都被设置为 NULL。 示例 1: 示例 2: 提示: 解题: 官方解答: 1.层次遍历 2.使用已建立的next指针
LeetCode 115 不同的子序列
给定一个字符串 s 和一个字符串 t ,计算在 s 的子序列中 t 出现的个数。 字符串的一个 子序列 是指,通过删除一些(也可以不删除)字符且不干扰剩余字符相对位置所组成的新字符串。(例如,”ACE” 是 “ABCDE” 的一个子序列,而 “AEC” 不是) 题目数据保证答案符合 32 位带符号整数范围。 示例 1: 示例 2: 提示: 解题: 官方解答: 1.动态规划
LeetCode 114 二叉树展开为链表
给你二叉树的根结点 root ,请你将它展开为一个单链表: 展开后的单链表应该同样使用 TreeNode ,其中 right 子指针指向链表中下一个结点,而左子指针始终为 null 。展开后的单链表应该与二叉树 先序遍历 顺序相同。 示例 1: 示例 2: 示例 3: 提示: 进阶:你可以使用原地算法(O(1) 额外空间)展开这棵树吗? 解题: 验证的时候说错了,我专门构造了那个输入,本地的输出和答案是一样的,提交的输出居然和本地的不一样 官方解法: 1.前序遍历 通过迭代实现前序遍历 2.前序遍历和展开同步进行 3.寻找前驱节点
LeetCode 113 路径总和 II
给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。 叶子节点 是指没有子节点的节点。 示例 1: 示例 2: 示例 3: 提示: 解题: 官方解答: 1.深度优先搜索 2.广度优先搜索
LeetCode 112 路径总和
给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。如果存在,返回 true ;否则,返回 false 。 叶子节点 是指没有子节点的节点。 示例 1: 示例 2: 示例 3: 提示: 解题: 官方解答: 1.广度优先搜索 2.递归