自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 4.力扣-数组-数组的改变、移动

力扣-数组-数组的改变、移动最小操作次数使数组元素相等(LeetCode453)题目概述:给定一个长度为 n 的 非空 整数数组,每次操作将会使 n - 1 个元素增加 1。找出让数组所有元素相等的最小操作次数。题目示例:示例:输入:[1,2,3]输出:3解释:只需要3次操作(注意每次操作会增加两个元素的值):[1,2,3] => [2,3,3] => [3,4,3] => [4,4,4]方法一:利用排序利用排序再结合改进暴力法的思路,可以直接与数组

2021-09-12 19:36:14 248

原创 3.力扣-数组-统计数组中的元素1

3.力扣-数组-统计数组中的元素1错误的集合(LeetCode645)题目概述:集合 s 包含从 1 到 n 的整数。不幸的是,因为数据错误,导致集合里面某一个数字复制了成了集合里面的另外一个数字的值,导致集合 丢失了一个数字 并且 有一个数字重复 。给定一个数组 nums 代表了集合 S 发生错误后的结果。请你找出重复出现的整数,再找到丢失的整数,将它们以数组的形式返回。题目示例:方法一:排序1.寻找重复的数字:如果相邻的两个元素相等,则该元素为重复的数字2.寻找丢失的数字:·如果丢

2021-09-09 17:10:45 156

原创 2.力扣-数组-数组的遍历2

2.力扣-数组-数组的遍历2三个数的最大乘积(LeetCode 628)题目概述:给你一个整型数组 nums ,在数组中找出由三个数组成的最大乘积,并输出这个乘积。题目示例:解题思路:关键:要考虑有正数有负数的几种情况1.全为正数:则为三个值最大的正数2.全为负数:则为值最大的三个负数(绝对值最小)3.有正有负:三个值最大的正数或者两个最小的负数和一个最大的正数方法1:先排序javaclass Solution { public int maximum

2021-09-07 18:53:25 120

原创 1.力扣-数组-数组的遍历1

1-力扣-数组-数组的遍历11.最大连续1的个数(LeetCode485)题目概述:给定一个二进制数组, 计算其中最大连续 1 的个数。题目示例:输入:[1,1,0,1,1,1]输出:3解释:开头的两位和最后的三位都是连续 1 ,所以最大连续 1 的个数是 3.解题思路:这道题比较简单 只需要找两个变量,一个记录目前连续的最大值,一个记录从开始到现在的最大连续值java代码class Solution { public int findMaxConsecutiveOnes(in

2021-09-06 18:23:55 103

原创 17.力扣-树-重构二叉树

力扣-树-重构二叉树1.从前序与中序遍历序列构造二叉树(LeetCode 105)题目概述:给定一棵树的前序遍历 preorder 与中序遍历 inorder。请构造二叉树并返回其根节点。(假设并无重复元素)题目案例:解题思路:根据前序遍历找到根节点,然后将中序遍历划分为左右子树,然后左右子树进行同样的操作,即递归。这里有一个小细节就是用一个hashmap存放中序遍历的结点序号,方便查找(注意是以无重复元素为前提),这里直接放官方代码注意:划分左右子树时不要搞混与root的关系class

2021-07-15 18:51:06 95

原创 16.力扣-树-二叉搜索树+中序遍历

力扣-树-二叉搜索树+中序遍历前提知识点:二叉搜索树的性质:设x是二叉搜索树中的一个结点。如果y是x左子树中的一个结点,那么会有y.key<=x.key;如果y是x右子树中的一个节点,那么有y.key>=x.key重要关键点:二叉搜索树中序遍历得到的值序列是递增有序的1.二叉搜索树中的搜索(LeetCode 700)题目概述:给定二叉搜索树(BST)的根节点和一个值。 你需要在BST中找到节点值等于给定值的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 NULL。题目案例

2021-07-14 16:30:26 88

原创 15.力扣-树-验证二叉树的前序序列化

力扣-树-验证二叉树的前序序列化验证二叉树的前序序列化(LeetCode 331)题目概述:序列化二叉树的一种方法是使用前序遍历。当我们遇到一个非空节点时,我们可以记录下这个节点的值。如果它是一个空节点,我们可以使用一个标记值记录,例如 #。例如,上面的二叉树可以被序列化为字符串 “9,3,4,#,#,1,#,#,2,#,6,#,#”,其中 # 代表一个空节点。给定一串以逗号分隔的序列,验证它是否是正确的二叉树的前序序列化。编写一个在不重构树的条件下的可行算法。每个以逗号分隔的字符或为一个整数或为

2021-06-15 15:33:38 119 1

原创 14.力扣-树-非递归遍历

力扣-树-非递归遍历1.前序遍历(LeetCode 144)——中、左、右解题思路:先找到最左下角结点,将节点压入堆栈,同时将节点加入遍历集中,这样就完成了中、左的顺序。知道找到最左下角后,pop栈顶在找其右结点即可,即完成了中、左、右的顺序。(这个地方最好还是多拿几个例子试试,才能明白)class Solution1 { public List<Integer> preorderTraversal(TreeNode root) { List<Inte

2021-06-14 21:31:25 85

原创 13.力扣-树-根据二叉树创建字符串

力扣-树-根据二叉树创建字符串根据二叉树创建字符串(LeetCode 606)题目概述:你需要采用前序遍历的方式,将一个二叉树转换成一个由括号和整数组成的字符串。空节点则用一对空括号 “()” 表示。而且你需要省略所有不影响字符串与原始二叉树之间的一对一映射关系的空括号对。题目案例:解题思路:围绕前序遍历展开,主要的讨论在左右结点是否为空,因为左节点为空时要保留括号,右节点为空时省略括号分为四种情况讨论(1)左右结点均为空(2)左节点为空,右节点不为空(3)左节点不为空,右节点为空

2021-06-14 15:09:44 1168 1

原创 12.力扣-树-二叉树最大宽度

力扣-树-二叉树最大宽度二叉树最大宽度(LeetCode 662)题目概述:给定一个二叉树,编写一个函数来获取这个树的最大宽度。树的宽度是所有层中的最大宽度。这个二叉树与满二叉树(full binary tree)结构相同,但一些节点为空。每一层的宽度被定义为两个端点(该层最左和最右的非空节点,两端点间的null节点也计入长度)之间的长度。题目案例:解题思路:这道题解题的关键就是对每层的位置进行标记,从0开始计,若一个点的位置为pos,那其左节点的位置是pos2,其右结点的位置是pos2+

2021-06-12 10:07:42 237

原创 11.力扣-树-N 叉树的最大深度

树-力扣-N 叉树的最大深度N 叉树的最大深度(LeetCode 559)题目概述:给定一个 N 叉树,找到其最大深度。最大深度是指从根节点到最远叶子节点的最长路径上的节点总数。N 叉树输入按层序遍历序列化表示,每组子节点由空值分隔(请参见示例)。题目案例:解题思路:这道题用递归的解法比较简单,只要计算出点的层数,然后选择最大的那个层数就可以了,我写的代码稍微复杂一点,所以以下展示两种简单的简单在每次计算出来直接比较取较大的,而不把他放在数组里然后再遍历java稍复杂代码(递归)clas

2021-06-10 20:04:21 95 1

原创 10.力扣-树-员工的重要性

力扣-树-员工的重要性员工的重要性(LeetCode 690)题目概述:给定一个保存员工信息的数据结构,它包含了员工 唯一的 id ,重要度 和 直系下属的 id 。比如,员工 1 是员工 2 的领导,员工 2 是员工 3 的领导。他们相应的重要度为 15 , 10 , 5 。那么员工 1 的数据结构是 [1, 15, [2]] ,员工 2的 数据结构是 [2, 10, [3]] ,员工 3 的数据结构是 [3, 5, []] 。注意虽然员工 3 也是员工 1 的一个下属,但是由于 并不是直系 下属,

2021-06-08 15:46:13 119 1

原创 9.力扣-树-N叉树的层序遍历

力扣-树-N叉树的层序遍历N叉树的层序遍历(LeetCode 419)题目概述:定一个 N 叉树,返回其节点值的层序遍历。(即从左到右,逐层遍历)。树的序列化输入是用层序遍历,每组子节点都由 null 值分隔题目案例:解题思路:这道题应该算是一个经典基础题,使用队列来实现层序遍历,和二叉树的层序遍历是一样的。可以参考文章“2.力扣-树-层次遍历”,这里就不多说了,思路是一样的。只是在结点的children上可以不用遍历,使用addAll的方法,可以稍微简单一些略微复杂的java代码

2021-06-07 22:00:01 136

原创 8.力扣-树-出现次数最多的子树元素和

力扣-树-出现次数最多的子树元素和出现次数最多的子树元素和(LeetCode 508)题目概述:给你一个二叉树的根结点,请你找出出现次数最多的子树元素和。一个结点的「子树元素和」定义为以该结点为根的二叉树上所有结点的元素之和(包括结点本身)。你需要返回出现次数最多的子树元素和。如果有多个元素出现的次数相同,返回所有出现次数最多的子树元素和(不限顺序)。题目案例:解题思路:关键就是递归的解法:该结点的值=其左子树的和+其右子树的和,所以我们可以再写一个函数用来求该结点对应的子树元素和。用来存储子

2021-06-07 20:54:29 231

原创 7.力扣-树-合并二叉树

力扣-树-合并二叉树合并二叉树(LeetCode 617)题目概述:给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节点将直接作为新二叉树的节点。题目案例:解题思路:同样这个题就是以遍历为基础,所以可以分为深度优先搜索和广度优先搜索。有一方结点为空,则可以直接用另一方的结点,如果均不为空则需要将两节点的val相加,均为空则为null

2021-06-04 11:28:07 94

原创 6.力扣-树-路径总和

力扣-树-路径总和路径总和(LeetCode 437)题目概述:给定一个二叉树,它的每个结点都存放着一个整数值。找出路径和等于给定数值的路径总数。路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。(二叉树不超过1000个节点,且节点数值范围是 [-1000000,1000000] 的整数。)题目示例:解题思路:1.递归:这个是我自己思路,比较简单但时间复杂度也比较大。首先我们需要构造一个函数getSum()来求解从某结点开始往下的路径和是否等于给

2021-06-03 23:49:53 149

原创 5.力扣-树-对称二叉树、翻转二叉树

力扣-树-对称二叉树、翻转二叉树1.对称二叉树(LeetCode 101)题目概述:给定一个二叉树,检查它是否是镜像对称的。题目案例:解题思路:判断两个树是否对称,就是先判断根节点是否一致,再判断其左子树和右子树是否对称(1)递归法:通过两个指针遍历整棵树,pp 指针和 qq 指针一开始都指向这棵树的根,随后 pp 右移时,qq 左移,pp 左移时,qq 右移。每次检查当前 pp 和 qq 节点的值是否相等,如果相等再判断左右子树是否对称一般情况下递归和迭代可以相互转,使用队列的方式(2

2021-05-31 14:45:48 118 1

原创 4.力扣-树-完全二叉树结点个数

力扣-树-完全二叉树结点个数完全二叉树的结点个数(LeetCode 222)题目描述:给你一棵 完全二叉树 的根节点 root ,求出该树的节点个数。补充定义:——完全二叉树:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2h 个节点解题思路:最无脑的解法就是递归,但没有利用完全二叉树这个特点,即没有简化时间复杂度利用二叉树特性思路:1.首先当我们已知这是一个完全二叉树时就会知

2021-05-30 16:54:48 327

原创 3.力扣-树-相同的数

力扣-树-相同的数(LeetCode 100)题目概述:给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。(如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。)解题思路:判断两树是否相同实际上是一个搜索遍历问题,一边遍历,一边判断。所以解决方法可分为深度优先搜索和广度优先搜索深度优先搜索解题java代码深度优先搜索这个方法最重要的就是递归的思想,但同时要考虑为空的情况class Solution{ public boolean

2021-05-29 16:03:24 70

原创 2.力扣-树-层次遍历

2.力扣-树-层次遍历​1.从上到下打印二叉树(键指Offer 32 -1)题目概述:从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印题目范例:​​​解题思路:一层一层遍历其实就是使用广度优先搜索BFS。用队列保存节点,秉承先进先出的原则java代码class Solution { public int[] levelOrder(TreeNode root) { if(root==null){ return new

2021-05-29 14:41:23 70

原创 1.力扣-树-递归遍历

力扣-树-递归遍历1.前序遍历(leetcode144)基本思路:使用递归完成根-左子树-右子树java代码class Solution { public List<Integer> preorderTraversal(TreeNode root){ List<Integer> lst=new ArrayList<>(); preorder(lst,root); return lst; }

2021-05-27 17:42:26 116 1

空空如也

空空如也

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

TA关注的人

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