自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(112)
  • 收藏
  • 关注

原创 力扣LeetCode #73 矩阵置零(setZeroes)

- 题目描述给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0。请使用原地算法。进阶:一个直接的解决方案是使用 O(mn) 的额外空间,但这并不是一个好的解决方案。一个简单的改进方案是使用 O(m + n) 的额外空间,但这仍然不是最好的解决方案。你能想出一个常数空间的解决方案吗?来源:LeetCode- 示例示例 1:输入:[[1,1,1],[1,0,1],[1,1,1]]输出:[[1,0,1],[0,0,0],[1,0,1]]

2021-03-21 00:40:36 282

原创 力扣LeetCode #150逆波兰表达式求值(evalRPN)

- 题目描述根据 逆波兰表示法,求表达式的值。有效的算符包括 +、-、*、/ 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。说明:整数除法只保留整数部分。给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。1 <= tokens.length <= 104tokens[i] 要么是一个算符("+"、"-"、"*" 或 “/”),要么是一个在范围 [-200, 200] 内的整数来源:LeetCode- 示例示例 1:输入:to

2021-03-20 01:10:15 315

原创 力扣LeetCode #115 不同的子序列(numDistinct)

- 题目描述给定一个字符串 s 和一个字符串 t ,计算在 s 的子序列中 t 出现的个数。字符串的一个 子序列 是指,通过删除一些(也可以不删除)字符且不干扰剩余字符相对位置所组成的新字符串。例如,“ACE” 是 “ABCDE” 的一个子序列,而 “AEC” 不是。提示:0 <= s.length, t.length <= 1000s 和 t 由英文字母组成题目数据保证答案符合 32 位带符号整数范围。来源:LeetCode- 示例示例 1:输入:s = “rabbbi

2021-03-17 15:32:12 364

原创 力扣LeetCode #706 设计哈希映射(MyHashMap)

- 题目描述不使用任何内建的哈希表库设计一个哈希映射(HashMap)。实现 MyHashMap 类:MyHashMap() 用空映射初始化对象void put(int key, int value) 向 HashMap 插入一个键值对 (key, value) 。如果 key 已经存在于映射中,则更新其对应的值 value 。int get(int key) 返回特定的 key 所映射的 value ;如果映射中不包含 key 的映射,返回 -1 。void remove(key) 如果映射

2021-03-14 12:12:26 227

原创 力扣LeetCode #331 验证二叉树的前序序列化(isValidSerialization)

- 题目描述序列化二叉树的一种方法是使用前序遍历。当我们遇到一个非空节点时,我们可以记录下这个节点的值。如果它是一个空节点,我们可以使用一个标记值记录,例如 #。给定一串以逗号分隔的序列,验证它是否是正确的二叉树的前序序列化。编写一个在不重构树的条件下的可行算法。每个以逗号分隔的字符或为一个整数或为一个表示 null 指针的 ‘#’ 。你可以认为输入格式总是有效的,例如它永远不会包含两个连续的逗号,比如 “1,3” 。来源:LeetCode- 示例示例 1:输入: “9,3,4,#,#,1,#

2021-03-12 23:21:11 106

原创 力扣LeetCode #227 基本计算器II(Calculate)

- 题目描述’给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值。整数除法仅保留整数部分。提示:1 <= s.length <= 3 * 105s 由整数和算符 (’+’, ‘-’, ‘*’, ‘/’) 组成,中间由一些空格隔开s 表示一个 有效表达式表达式中的所有整数都是非负整数,且在范围 [0, 231 - 1] 内题目数据保证答案是一个 32-bit 整数来源:LeetCode- 示例示例 1:输入:s = “3+2*2”输出:7示例 2:

2021-03-11 18:24:35 292

原创 力扣LeetCode #125 验证回文串(isPalindrome)

- 题目描述给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。说明:本题中,我们将空字符串定义为有效的回文串。来源:LeetCode- 示例示例 1:输入: “A man, a plan, a canal: Panama”输出: true示例 2:输入: “race a car”输出: false示例3:输入:0P输出:false- 思路分析一个头指针,一个尾指针,不停比较然后往中间靠即可。但是要注意示例3这种陷阱,因此不能直接用±32来判断是

2021-02-22 15:01:37 265

原创 力扣LeetCode #124 二叉树中的最大路径和(maxPathSum)

- 题目描述路径 被定义为一条从树中任意节点出发,沿父节点-子节点连接,达到任意节点的序列。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点,且不一定经过根节点。路径和 是路径中各节点值的总和。给你一个二叉树的根节点 root ,返回其 最大路径和 。提示:树中节点数目范围是 [1, 3 * 104]-1000 <= Node.val <= 1000来源:LeetCode- 示例示例 1:输入:root = [1,2,3]输出:6解释:最优路径是

2021-02-22 14:28:56 220

原创 #121+122+123 买卖股票问题(maxProfit)

这三道题是循序渐进的,我在这里也就按照这个顺序来写。#121 买卖股票的最佳时机题目给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。思路分析这是很典型的一道动态规划题目,具有最优子结构和重叠子问题。定义数组profit[i]profit[i]profi

2021-02-21 17:05:28 330

原创 力扣LeetCode #118 杨辉三角

- 题目描述给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。在杨辉三角中,每个数是它左上方和右上方的数的和。来源:LeetCode- 示例输入: 5输出:[[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]- 思路分析第一行和第二行是base case,在一开始就判断即可。从第三行开始,每一行需要填入的数的下标i从1开始,到n-2,n为行数。在位置i上的数等于上一行的位置i-1和i上的元素值之和。用自底向上方法,一行一行

2021-02-17 14:53:21 150

原创 力扣LeetCode #117 填充每个节点的下一个右侧节点指针II(Connect)

- 题目描述给定一个二叉树struct Node { int val; Node *left; Node *right; Node *next;}填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。初始状态下,所有 next 指针都被设置为 NULL。进阶:你只能使用常量级额外空间。使用递归解题也符合要求,本题中递归程序占用的栈空间不算做额外的空间复杂度。来源:LeetCode- 示例输入:r

2021-02-17 13:58:33 109

原创 力扣LeetCode #116 填充每个节点的下一个右侧节点指针(Connect)

- 题目描述给定一个 完美二叉树 ,其所有叶子节点都在同一层,每个父节点都有两个子节点。二叉树定义如下:struct Node {int val;Node *left;Node *right;Node *next;}填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。初始状态下,所有 next 指针都被设置为 NULL。进阶:你只能使用常量级额外空间。使用递归解题也符合要求,本题中递归程序占用的栈空间不算做额

2021-02-17 13:36:43 172

原创 Spring jar包的下载

下载浏览器输入Spring,显示如下界面后,点击Project。如橙色箭头所示。也可以直接搜https://spring.io/projects。然后点击Spring Framework,如橙色箭头所示。然后点击右边的猫猫图标,进入Github。进入Github后,将页面拉到最下面,找到Access to Binaries,点击Spring Framework Artifacts。然后下拉一点点,找到第二个大标题Spring Repositories, 点击这段

2021-02-02 16:36:13 136

原创 力扣LeetCode #113 路径总和II(PathSum)

- 题目描述给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。说明: 叶子节点是指没有子节点的节点。来源:LeetCode- 示例给定如下二叉树,以及目标和 sum = 22, 5 / \ 4 8 / / \ 11 13 4 / \ / \ 7 2 5 1返回:[[5,4,11,2],[5,8,4,5]]- 思路分析和#112思

2021-02-02 15:50:38 116

原创 力扣LeetCode #112 路径总和(HasPathSum)

- 题目描述给你二叉树的根节点 root 和一个表示目标和的整数 targetSum ,判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。提示:叶子节点 是指没有子节点的节点。树中节点的数目在范围 [0, 5000] 内-1000 <= Node.val <= 1000-1000 <= targetSum <= 1000来源:LeetCode- 示例示例 1:输入:root = [5,4,8,11,nul

2021-02-02 15:11:30 479 1

原创 力扣LeetCode #111 二叉树的最小深度(MinDepth)

- 题目描述给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。提示:叶子节点是指没有子节点的节点。树中节点数的范围在 [0, 105] 内-1000 <= Node.val <= 1000来源:LeetCode- 示例示例 1:输入:root = [3,9,20,null,null,15,7]输出:2示例 2:输入:root = [2,null,3,null,4,null,5,null,6]输出:5- 思路分析递归求出

2021-02-02 14:57:43 295

原创 力扣LeetCode #110 平衡二叉树(IsBalanced)

- 题目描述给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。提示:树中的节点数在范围 [0, 5000] 内-104 <= Node.val <= 104来源:LeetCode- 示例示例 1:输入:root = [3,9,20,null,null,15,7]输出:true示例 2:输入:root = [1,2,2,3,3,null,null,4,4]输出:false示

2021-02-02 14:37:49 223

原创 力扣LeetCode #109 有序链表转换二叉搜索树(SortedListToBST)

- 题目描述给定一个单链表,其中的元素按升序排序,将其转换为高度平衡的二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。来源:LeetCode- 示例给定的有序链表: [-10, -3, 0, 5, 9],一个可能的答案是:[0, -3, 9, -10, null, 5], 它可以表示下面这个高度平衡二叉搜索树:       0     / &

2021-02-02 14:31:21 203

原创 力扣LeetCode #108 将有序数组转换为二叉搜索树(SortedArrayToBST)

- 题目描述将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。来源:LeetCode- 示例给定有序数组: [-10,-3,0,5,9],一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树:      0    /   \  -3   9  /

2021-01-30 14:44:55 154

原创 力扣LeetCode #107 二叉树的层序遍历II(LevelOrderBottom)

- 题目描述给定一个二叉树,返回其节点值自底向上的层序遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)来源:LeetCode- 示例例如:给定二叉树 [3,9,20,null,null,15,7],        3      /     \    9     20          &n

2021-01-30 14:28:29 199

原创 力扣LeetCode #106 从中序与后序遍历序列构造二叉树(buildTree)

- 题目描述根据一棵树的中序遍历与后序遍历构造二叉树。注意:你可以假设树中没有重复的元素。来源:LeetCode- 示例给出:中序遍历 inorder = [9,3,15,20,7]后序遍历 postorder = [9,15,7,20,3]返回如下的二叉树:      3    /     \  9     20        &nbs

2021-01-30 13:49:19 175

原创 力扣LeetCode #105 从前序和中序遍历序列构造二叉树(BuildTree)

- 题目描述根据一棵树的前序遍历与中序遍历构造二叉树。注意:你可以假设树中没有重复的元素。来源:LeetCode- 示例给出:前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]返回如下的二叉树:    3   /   \  9   20       / &nb

2021-01-30 12:58:24 246

原创 力扣LeetCode #103 二叉树的锯齿形层序遍历(ZigzagLevelOrder)

- 题目描述给定一个二叉树,返回其节点值的锯齿形层序遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。来源:LeetCode- 示例给定二叉树 [3,9,20,null,null,15,7],        3      /    \    9     20         

2021-01-29 17:05:43 306 1

原创 力扣LeetCode #102 二叉树的层序遍历(LevelOrder)

- 题目描述给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。来源:LeetCode- 示例二叉树:[3,9,20,null,null,15,7],      3    /    \  9     20        /   \      15 &nb

2021-01-29 16:34:49 347

原创 力扣LeetCode #101 对称二叉树(IsSymmetric)

- 题目描述给定一个二叉树,检查它是否是镜像对称的。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/symmetric-tree著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。- 示例二叉树 [1,2,2,3,4,4,3] 是对称的。            1        /    &

2021-01-29 16:17:06 186

原创 力扣LeetCode #100 相同的树(IsSameTree)

- 题目描述给定两个二叉树,编写一个函数来检验它们是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。来源:LeetCode- 示例示例 1:输入: 1           1        /    \       /     \    &nb

2021-01-29 16:07:27 252

原创 力扣LeetCode #98 验证二叉搜索树(IsValidBST)

- 题目描述给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。来源:LeetCode- 示例示例 1:输入:   2  /   \1     3输出: true示例 2:输入:    5  /   \1

2021-01-29 15:56:23 288

原创 力扣LeetCode #97 交错字符串(IsInterleave)

- 题目描述给定三个字符串 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 + …提示:0 <= s1.length,

2021-01-27 16:54:13 224

原创 力扣LeetCode #94 二叉树的中序遍历(InorderTraversal)

- 题目描述给定一个二叉树的根节点 root ,返回它的 中序 遍历。提示:树中节点数目在范围 [0, 100] 内-100 <= Node.val <= 100进阶: 递归算法很简单,你可以通过迭代算法完成吗?来源:LeetCode- 示例示例 1:输入:root = [1,null,2,3]输出:[1,3,2]示例 2:输入:root = []输出:[]示例 3:输入:root = [1]输出:[1]示例 4:输入:root = [1,2]输出:[

2021-01-27 12:57:13 231

原创 力扣LeetCode #93 复原IP地址(RestoreIpAddresses)

- 题目描述给定一个只包含数字的字符串,复原它并返回所有可能的 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 地址。提示:0 <= s.length <= 3000s 仅由数字组成- 示

2021-01-26 22:11:08 177

原创 力扣LeetCode #90 子集II(SubsetsWithDup)

- 题目描述给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。来源:LeetCode- 示例示例:输入: [1,2,2]输出:[[2],[1],[1,2,2],[2,2],[1,2],[] ]- 思路分析感觉已经做过很多遍这个题了。。。见#78。这道题就注意在排序之后,同一轮里遇到重复的元素跳过就可以了。- JAVA实现class Solution { public List<List<Inte

2021-01-26 21:58:05 176

原创 力扣LeetCode #88 合并两个有序数组(Merge)

- 题目描述给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。你可以假设 nums1 的空间大小等于 m + n,这样它就有足够的空间保存来自 nums2 的元素。提示:nums1.length == m + nnums2.length == n0 <= m, n <= 2001 <= m + n <= 200-109 &l

2021-01-26 21:50:44 167

原创 力扣LeetCode #86 分隔链表(Partition)

- 题目描述给你一个链表和一个特定值 x ,请你对链表进行分隔,使得所有小于 x 的节点都出现在大于或等于 x 的节点之前。你应当保留两个分区中每个节点的初始相对位置。来源:LeetCode- 示例输入:head = 1->4->3->2->5->2, x = 3输出:1->2->2->4->3->5- 思路分析注意的是要理解清楚题意。链表的问题思路都挺简单的,比较难的就是指针需要变来变去。这道题的关键是”所有小于 x 的节点都出现

2021-01-26 19:22:23 199

原创 力扣LeetCode #84 柱状图中最大的矩形(LargestRectangleArea)

- 题目描述给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。求在该柱状图中,能够勾勒出来的矩形的最大面积。来源:LeetCode- 示例输入: [2,1,5,6,2,3]输出: 10- 思路分析思路1:暴力双循环法。最后有几个例子无法通过,会超时。思路2:单调栈法。选一个柱子,以这个柱子i的高度作为矩形的固定高度h。由于要面积尽可能大,所以我们希望矩形尽可能宽。当高度确定的时候,从柱子i能够左右延伸的最远距离是遇到的高度小于h的柱子,注意计算矩形并不

2021-01-26 11:25:13 184

原创 力扣LeetCode #82 删除排序链表II(DeleteDuplicates)

- 题目描述给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字。来源:LeetCode添加链接描述- 示例示例 1:输入: 1->2->3->3->4->4->5输出: 1->2->5示例 2:输入: 1->1->1->2->3输出: 2->3- 思路分析- JAVA实现/** * Definition for singly-linked list. * publi

2021-01-25 16:35:50 274

原创 力扣LeetCode #83 删除排序链表中的重复元素(DeleteDuplicates)

- 题目描述给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。- 示例示例 1:输入: 1->1->2输出: 1->2示例 2:输入: 1->1->2->3->3输出: 1->2->3- 思路分析遍历链表,跳过重复的元素。自己写一下指针该怎么改变就知道了。- JAVA实现/** * Definition for singly-linked list. * public class ListNode { *

2021-01-25 16:03:20 195

原创 力扣LeetCode #80 删除排序数组中的重复项II(RemoveDuplicates)

- 题目描述给定一个增序排列数组 nums ,你需要在 原地 删除重复出现的元素,使得每个元素最多出现两次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组 并在使用 O(1) 额外空间的条件下完成。提示:0 <= nums.length <= 3 * 104-104 <= nums[i] <= 104nums 按递增顺序排列来源:LeetCode- 示例示例 1:输入:nums = [1,1,1,2,2,3]输出:5, nums = [

2021-01-24 16:09:06 196

原创 力扣LeetCode #79 单词搜索(Exist)

- 题目描述给定一个二维网格和一个单词,找出该单词是否存在于网格中。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。提示:board 和 word 中只包含大写和小写英文字母。1 <= board.length <= 2001 <= board[i].length <= 2001 <= word.length <= 10^3- 示例示例:board =[[

2021-01-24 15:57:16 115

原创 力扣LeetCode #78 子集(Subsets)

- 题目描述给你一个整数数组 nums ,数组中的元素互不相同 。返回该数组所有可能的子集(幂集)。解集不能包含重复的子集。你可以按任意顺序返回解集。提示:1 <= nums.length <= 10-10 <= nums[i] <= 10nums 中的所有元素 互不相同- 示例示例 1:输入:nums = [1,2,3]输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]示例 2:输入:nums = [0]输出:[[]

2021-01-24 15:46:22 155

原创 力扣LeetCode #77 组合(Combine)

- 题目描述给定两个整数 n 和 k,返回 1 … n 中所有可能的 k 个数的组合。来源:LeetCode- 示例示例:输入: n = 4, k = 2输出:[[2,4],[3,4],[2,3],[1,2],[1,3],[1,4],]- 思路分析回溯+剪枝,列举所有情况即可。这道题很容易可以用回溯得到所有答案,但如果不剪枝,效率很低。这里剪枝主要是通过观察发现:如果剩下的元素加起来都没有kkk个,是不可能有满足条件的组合的。k<=k <=k<= 已经排

2021-01-24 15:44:11 135

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除