![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
leetcode题集
一夜星尘
简简单单,平平凡凡。快快乐乐,平平安安。
展开
-
Leetcode 买卖股票的最佳时机III
买卖股票的最佳时机III题目描述:给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你最多可以完成两笔交易。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。题目链接class Solution { public int maxProfit(int[] prices) { int n = prices.length; int[][][] dp = new int[n][2][3原创 2021-04-01 21:48:11 · 303 阅读 · 0 评论 -
Leetcode 买卖股票的最佳时机II
买卖股票的最佳时机II题目描述:给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。题目链接class Solution { public int maxProfit(int[] prices) { int n = prices.length; int[][] dp = new int原创 2021-03-30 22:26:31 · 277 阅读 · 0 评论 -
Leetcode 买卖股票的最佳时机
买卖股票的最佳时机题目描述:给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择某一天买入这只股票,并选择在未来的某一个不同的日子卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。题目链接// 暴力解法超时class Solution { public int maxProfit(int[] prices) { int len =原创 2021-03-29 22:19:54 · 498 阅读 · 0 评论 -
Leetcode 三角形最小路径和
三角形最小路径和题目描述:给定一个三角形 triangle ,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 + 1 的两个结点。也就是说,如果正位于当前行的下标 i ,那么下一步可以移动到下一行的下标 i 或 i + 1 。提示: 1 <= triangle.length <= 200 triangle[0].len原创 2021-03-26 23:13:21 · 856 阅读 · 0 评论 -
Leetcode 杨辉三角II
杨辉三角II题目描述:给定一个非负索引 k,其中 k ≤ 33,返回杨辉三角的第 k 行。题目链接class Solution { public List<Integer> getRow(int rowIndex) { ArrayList<List<Integer>> result = new ArrayList<List<Integer>>(); for(int i = 0; i<=row原创 2021-03-25 22:48:30 · 859 阅读 · 0 评论 -
Leetcode 杨辉三角
杨辉三角题目描述:定一个非负整数 numRows,生成杨辉三角的前 numRows 行。在杨辉三角中,每个数是它左上方和右上方的数的和。题目链接class Solution { public List<List<Integer>> generate(int numRows) { ArrayList<List<Integer>> result = new ArrayList<List<Integer>>原创 2021-03-24 22:30:34 · 857 阅读 · 0 评论 -
Leetcode 填充每个节点的下一个右侧节点指针II
填充每个节点的下一个右侧节点指针II题目描述:struct Node { int val; Node *left; Node *right; Node *next; }填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。初始状态下,所有 next 指针都被设置为原创 2021-03-23 22:46:36 · 877 阅读 · 0 评论 -
Leetcode 填充每个节点的下一个右侧节点指针
填充每个节点的下一个右侧节点指针题目描述:给定一个完美二叉树,其所有叶子节点都在同一层,每个父节点都有两个子节点。二叉树定义如下:struct Node { int val; Node *left; Node *right; Node *next; }填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节原创 2021-03-22 22:37:05 · 874 阅读 · 0 评论 -
Leetcode 不同的子序列
不同的子序列题目描述:给定一个字符串 s 和一个字符串 t ,计算在 s 的子序列中 t 出现的个数。字符串的一个 子序列 是指,通过删除一些(也可以不删除)字符且不干扰剩余字符相对位置所组成的新字符串。(例如,"ACE" 是 "ABCDE" 的一个子序列,而 "AEC" 不是)题目数据保证答案符合 32 位带符号整数范围。题目链接class Solution { public int numDistinct(String s, String t) { int m =原创 2021-03-21 22:45:34 · 940 阅读 · 0 评论 -
Leetcode 二叉树展开为链表
二叉树展开为链表题目描述:给你二叉树的根结点 root ,请你将它展开为一个单链表:展开后的单链表应该同样使用 TreeNode ,其中 right 子指针指向链表中下一个结点,而左子指针始终为 null 。展开后的单链表应该与二叉树先序遍历顺序相同。题目链接/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * Tree原创 2021-03-20 23:05:01 · 879 阅读 · 0 评论 -
Leetcode 路径总和II
路径总和II题目描述:给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。叶子节点 是指没有子节点的节点。题目链接/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} *原创 2021-03-19 22:54:52 · 937 阅读 · 0 评论 -
Leetcode 路径总和
路径总和题目描述:给你二叉树的根节点 root 和一个表示目标和的整数 targetSum ,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和 targetSum 。叶子节点 是指没有子节点的节点题目链接/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; *原创 2021-03-18 22:41:36 · 912 阅读 · 0 评论 -
Leetcode 二叉树的最小深度
二叉树的最小深度题目描述:给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。说明:叶子节点是指没有子节点的节点。题目链接/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(in原创 2021-03-17 22:58:16 · 875 阅读 · 0 评论 -
Leetcode 平衡二叉树
平衡二叉树题目描述:给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为: 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。题目链接/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; *原创 2021-03-16 22:40:27 · 925 阅读 · 0 评论 -
Leetcode 有序链表转换二叉搜索树
有序链表转换二叉搜索树题目描述:给定一个单链表,其中的元素按升序排序,将其转换为高度平衡的二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。题目链接/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int原创 2021-03-15 22:39:22 · 931 阅读 · 0 评论 -
Leetcode 将有序数组转换为二叉搜索树
将有序数组转换为二叉搜索树题目描述:给你一个整数数组 nums ,其中元素已经按升序排列,请你将其转换为一棵高度平衡二叉搜索树。高度平衡二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。题目链接/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; *原创 2021-03-14 22:47:16 · 936 阅读 · 0 评论 -
Leetcode 二叉树的层序遍历II
二叉树的层序遍历II题目描述:给定一个二叉树,返回其节点值自底向上的层序遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)题目链接/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) {原创 2021-03-13 22:54:51 · 948 阅读 · 0 评论 -
Leetcode 从中序与后序遍历序列构造二叉树
从中序与后序遍历序列构造二叉树题目描述:根据一棵树的中序遍历与后序遍历构造二叉树。注意:你可以假设树中没有重复的元素。题目链接/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.va原创 2021-03-12 23:24:16 · 1002 阅读 · 0 评论 -
Leetcode 从前序与中序序列构造二叉树
从前序与中序序列构造二叉树题目描述:根据一棵树的前序遍历与中序遍历构造二叉树。注意:你可以假设树中没有重复的元素。题目链接/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val原创 2021-03-11 22:50:22 · 1047 阅读 · 0 评论 -
Leetcode 二叉树的最大深度
二叉树的最大深度题目描述:给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。题目链接/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = v原创 2021-03-10 22:43:35 · 928 阅读 · 0 评论 -
Leetcode 二叉树的锯齿形层序遍历
二叉树的锯齿形层序遍历题目描述:给定一个二叉树,返回其节点值的锯齿形层序遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。题目链接/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int原创 2021-03-09 22:35:00 · 1029 阅读 · 0 评论 -
Leetcode 二叉树的层序遍历
二叉树的层序遍历题目描述:给你一个二叉树,请你返回其按层序遍历得到的节点值。 (即逐层地,从左到右访问所有节点)。题目链接/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val =原创 2021-03-08 22:38:20 · 979 阅读 · 0 评论 -
Leetcode 对称二叉树
对称二叉树题目描述:给定一个二叉树,检查它是否是镜像对称的。题目链接示例例如,二叉树 [1,2,2,3,4,4,3] 是对称的。 1 / \ 2 2 / \ / \3 4 4 3/** * Definition for a binary tree node. * public class TreeNode {原创 2021-03-07 12:25:51 · 950 阅读 · 0 评论 -
Leetcode 相同的树
相同的树题目描述:给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。提示: 两棵树上的节点数目都在范围 [0, 100] 内 -10 ^4 <= Node.val <= 10 ^4题目链接/** * Definition for a binary tree node. * public class TreeNode原创 2021-03-06 17:44:02 · 987 阅读 · 0 评论 -
Leetcode 恢复二叉搜索树
恢复二叉搜索树题目描述:给你二叉搜索树的根节点 root ,该树中的两个节点被错误地交换。请在不改变其结构的情况下,恢复这棵树。进阶:使用 O(n) 空间复杂度的解法很容易实现。你能想出一个只使用常数空间的解决方案吗?提示: 树上节点的数目在范围 [2, 1000] 内 -2 ^31 <= Node.val <= 2 ^31 - 1题目链接/** * Definition for a binary tree原创 2021-03-05 12:53:40 · 1027 阅读 · 0 评论 -
Leetcode 验证二叉搜索树
验证二叉搜索树题目描述:给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。题目链接/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right;原创 2021-03-04 12:41:31 · 1030 阅读 · 1 评论 -
Leetcode 交错字符串
交错字符串题目描述:给定三个字符串 s1、s2、s3,请你帮忙验证 s3 是否是由 s1 和 s2 交错 组成的。两个字符串 s 和 t 交错 的定义与过程如下,其中每个字符串都会被分割成若干 非空 子字符串:s = s1 + s2 + ... + snt = t1 + t2 + ... + tm|n - m| <= 1交错 是 s1 + t1 + s2 + t2 + s3 + t3 + ... 或者 t1 + s1 + t2 + s2 + t3 + s3 + ...提示:&nbs原创 2021-03-03 12:05:12 · 1032 阅读 · 0 评论 -
Leetcode 不同的二叉搜索树
不同的二叉搜索树题目描述:给定一个整数 n,求以 1 ... n 为节点组成的二叉搜索树有多少种?题目链接class Solution { public int numTrees(int n) { // 初始化 int[] dp = new int[n+1]; // 定义为当有n个连续值的节点时,可构成的搜索树种类 dp[0] = 1; dp[1] = 1; // 动态规划过程 for(int原创 2021-03-02 12:10:00 · 1046 阅读 · 0 评论 -
Leetcode 不同的二叉搜索树II
不同的二叉搜索树题目描述:给定一个整数 n,生成所有由 1 ... n 为节点所组成的二叉搜索树。提示: 0 <= n <= 8题目链接/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} *原创 2021-03-01 12:45:16 · 1107 阅读 · 1 评论 -
Leetcode 二叉树的中序遍历
二叉树的中序遍历题目描述:给定一个二叉树的根节点 root ,返回它的 中序 遍历。提示: 树中节点数目在范围 [0, 100] 内 -100 <= Node.val <= 100题目链接/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; *原创 2021-02-28 12:25:11 · 1139 阅读 · 0 评论 -
Leetcode 复原IP地址
复原IP地址题目描述:给定一个只包含数字的字符串,用以表示一个 IP 地址,返回所有可能从 s 获得的 有效 IP 地址 。你可以按任何顺序返回答案。有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 '.' 分隔。例如:"0.1.2.201" 和 "192.168.1.1" 是 有效 IP 地址,但是 "0.011.255.245"、"192.168.1.312" 和 "192.168@1.1" 是 无效 IP 地址。提示:原创 2021-02-28 11:33:27 · 1145 阅读 · 0 评论 -
Leetcode 反转链表II
反转链表II题目描述:反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。说明:1 ≤ m ≤ n ≤ 链表长度。题目链接/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.val = val; } * ListN原创 2021-02-27 17:11:28 · 1077 阅读 · 0 评论 -
Leetcode 解码方法
解码方法题目描述:一条包含字母 A-Z 的消息通过以下映射进行了 编码 :'A' -> 1'B' -> 2...'Z' -> 26要解码已编码的消息,所有数字必须基于上述映射的方法,反向映射回字母(可能有多种方法)。例如,"111" 可以将 "1" 中的每个 "1" 映射为 "A" ,从而得到 "AAA" ,或者可以将 "11" 和 "1"(分别为 "K" 和 "A" )映射为 "KA" 。注意,"06" 不能映射为 "F" ,因为 "6" 和 "06" 不同。给你一个只原创 2021-02-27 15:27:21 · 1101 阅读 · 0 评论 -
Leetcode 子集II
子集II题目描述:给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。题目链接class Solution { private int[] nums; private int len; private List<List<Integer>> result; private List<Integer> temp; public List<List<In原创 2021-02-26 18:43:49 · 1086 阅读 · 0 评论 -
Leetcode 格雷编码
格雷编码题目描述:格雷编码是一个二进制数字系统,在该系统中,两个连续的数值仅有一个位数的差异。给定一个代表编码总位数的非负整数 n,打印其格雷编码序列。即使有多个不同答案,你也只需要返回其中一种。格雷编码序列必须以 0 开头。题目链接class Solution { public List<Integer> grayCode(int n) { List<Integer> result = new ArrayList<Integer>原创 2021-02-25 21:18:35 · 1125 阅读 · 0 评论 -
Leetcode 合并两个有序数组
合并两个有序数组题目描述:给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。你可以假设 nums1 的空间大小等于 m + n,这样它就有足够的空间保存来自 nums2 的元素。提示:nums1.length == m + nnums2.length == n0 <= m, n <= 2001 <= m + n <= 20原创 2021-02-24 21:54:02 · 1043 阅读 · 0 评论 -
Leetcode 扰乱字符串
扰乱字符串题目描述:给定一个字符串 s1,我们可以把它递归地分割成两个非空子字符串,从而将其表示为二叉树。下图是字符串 s1 = "great" 的一种可能的表示形式。 great / \ gr eat / \ / \ g r e at &nbs原创 2021-02-23 21:14:07 · 1105 阅读 · 0 评论 -
Leetcode 分隔链表
分隔链表题目描述:给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有小于x 的节点都出现在大于或等于x 的节点之前。你应当保留两个分区中每个节点的初始相对位置。提示:链表中节点的数目在范围 [0, 200] 内-100 <= Node.val <= 100-200 <= x <= 200题目链接示例输入:head = [1,4,3,2,5,2], x = 3输出:[1,2,2,4,3,5]/** * Definitio原创 2021-02-22 20:10:40 · 1117 阅读 · 0 评论 -
Leetcode 最大矩形
最大矩形题目描述:给定一个仅包含 0 和 1 、大小为 rows x cols 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积。提示: rows == matrix.length cols == matrix[0].length 0 <= row, cols <= 200 matrix[i][j] 为 '0' 或 '1'题目链接原创 2021-02-21 19:31:16 · 1361 阅读 · 0 评论 -
Leetcode 柱状图中的最大矩形
柱状图中的最大矩形题目描述:给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。求在该柱状图中,能够勾勒出来的矩形的最大面积。题目链接// 时间复杂度O(n^2)class Solution { public int largestRectangleArea(int[] heights) { // 暴力解法 int len = heights.length; if(len == 1) return h原创 2021-02-20 21:00:19 · 1208 阅读 · 0 评论