当前位置: 首页 > news >正文

二叉树进阶题目(超详解)

文章目录

  • 前言
  • 根据二叉树创建字符串
    • 题目
    • 分析
    • 写代码
  • 二叉树的层序遍历
    • 题目
    • 分析
  • 写代码
  • 二叉树的层序遍历II
    • 题目
    • 分析
    • 写代码
  • 二叉树的最近公共祖先
    • 题目
    • 分析
    • 写代码
    • 时间复杂度
  • 优化思路
      • 优化的代码
  • 二叉搜索树与双向链表
    • 题目
    • 分析
    • 写代码
  • 从前序与中序遍历序列构造二叉树
  • 题目
  • 分析
  • 写代码
  • 从中序与后序遍历序列构造二叉树
  • 二叉树的前序遍历
    • 题目
    • 分析
    • 写代码
  • 中序的非递归
    • 分析
    • 写代码
  • 后序的非递归
    • 分析
    • 写代码

前言

二叉树进阶的题目不一定更复杂,但一定更适合用C++去写。
这里的题目用C语言去做会非常恶心。

根据二叉树创建字符串

题目链接

题目

在这里插入图片描述
在这里插入图片描述

要求很简单,就是用括号把左右子树括起来。
就是递归左子树之前加一个左括号,左子树递归完了加一个右括号
每棵树都这样子就搞定了

分析

这里还有一个新的问题:
要去省略不必要的括号
在这里插入图片描述
哪些括号可以省略呢?
观察一下。
在这里插入图片描述

左为空不能省略,不然下面这两颗树序列出来的结果就是一样的
在这里插入图片描述
在这里插入图片描述

写代码

假设我们不考虑括号解决这个问题
其实就是一个前序,但又是一个后序拿结果的问题。

任何类型都可以to_string()转换成字符串
在这里插入图片描述

现在我们怎么解决一下,把省略的问题给解决一下?
可以分为三种情况去判断,但能不能更简洁一些。

左为空分两种情况,如果右不为空就不省略,右为空就省略,
所以我们这里考虑加情况判断。

如果右为空。
在这里插入图片描述
这连个if条件写的还是非常巧妙的。
这样更简洁一些。

二叉树的层序遍历

题目链接

题目

在这里插入图片描述
在这里插入图片描述

分析

它要求要层序遍历没有问题,但是它要一层一层返回。
相当于要放到一个二维数组里面。

如果用C语言就很麻烦。
在这里插入图片描述
开空间
在这里插入图片描述
在这里插入图片描述

我们用C++就不用担心上面的东西,因为C++里有vector的vector
当然vector的vector传值返回代价很大,但是不用担心,C++11会有
右值引用能解决这个问题。
在这里插入图片描述
怎么样一行一行控制呢
第一种思路:
一个对列控制结点的指针然后去控制层序遍历。
一个对列存整型,表示它是第几层的

层序的特点,利用队列的先进先出,上一层带下一层
在这里插入图片描述

知道它是第几层就可以依次往二维数组,vector的vector里放。

第二种思路
就用一个队列来完成
增加一个变量去记录这一层的数据个数,然后去控制一层一层出。

我们队列里面同时可能有两层的数据。
在这里插入图片描述
3出来带9和20,9出来带15.
9出来的时候队列里面同时有两层的数据,有时候有一层,有时候有两层。

怎样控制一层一层出?
根进去的时候
在这里插入图片描述
levelSize是1,表示这一层只有一个。
然后出第一层,levelSize–,减到0就表示出完了。
出的同时会把它的孩子带进去。
在这里插入图片描述
当前层出完了,一定意味着下一层都进对列了
这个时候重新更新下一层的数据个数,队列里面有几个就几个。这个时候leveSIze由0变成2
我们通过levelSize这个变量来控制一层一层出
在这里插入图片描述
第二层出完了,说明第三次层都在最里面。这跟上面的思路一样了。

第一种思路比第二种思路还能更简洁一点,这个地方只有一个队列。
第二种有两个队列还要控制对应的数据放大vector里去,更麻烦一些。

写代码

根先进队列,注意要处理一下根为空的情况
在这里插入图片描述
接下来
控制一层一层出
在这里插入图片描述

把当前层的数据放到vector的vector里
在这里插入图片描述

二叉树的层序遍历II

我们接着来看上一道题目的变形题
题目链接

题目

在这里插入图片描述
在这里插入图片描述

分析

这个题目也是层序遍历,但是要求自底向上。
也就是先拿倒数第一层再拿倒数第二层。

怎么办?
这个题目最简单的方式就是把刚才的代码拷贝一份过来。
逻辑上不变,把它逆置一下就可以了。

写代码

在这里插入图片描述

二叉树的最近公共祖先

题目链接
这个题目是超级经典的题目
这个题目展示了很多的一些技巧

题目

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

分析

什么是公共祖先?
从我到根节点路径下的结点都是我的祖先。
在这里插入图片描述
7和0的最近公共祖先是谁?
在这里插入图片描述
7和4的最近公共祖先是谁?
在这里插入图片描述

最疑惑的地方来了。
5和4的公共祖先是谁?
在这里插入图片描述
是3还是5
在这里插入图片描述
思路一:
这道题本质可以理解成链表相交。
如果三叉链(每个结点有parent), 就是链表相交的问题
在这里插入图片描述
链表相交挺简单的。

知道两个结点的指针p和q,沿着parent往上走就可以了。

链表相交怎么求交点?
首先求长度,然后长的先走,然后同时走。
相等结点地址相等的那个就是交点。

思路二:
直接找公共祖先怎么找?
仔细观察
这个公共祖先有一个特征:
如果一个在我的左子树,一个在我的右子树,我就是公共祖先
在这里插入图片描述
第一个最简单,一进来就找到了。

第二个,一进来,都是祖先但不是公共祖先,这两个结点都在我的左。
这个时候公共祖先不可能在右树。所以递归到我的左数去找。
依次往下走,直到这两个结点一个在我的左,一个在我的右,就是公共祖先。
这种玩法跟搜索二叉树类似,但搜索二叉树更简单直接比较。
这里要看两个结点分别在我的左树还是右树

第三个,根就是其中之一的结点,就不用往下递归了。

写代码

思路二:
在这里插入图片描述
注意,这里面代码的写法很重要。

这里有一个确定的点。
在这里插入图片描述
下面写的代码非常的关键
有没有一种情况,p或者q就是我的根。
有可能,下面。
在这里插入图片描述
在这里插入图片描述
接下来确定这两个结点时在左树还是右树
下面的代码很关键
在这里插入图片描述
这是我们之前讲过的。
接下来,如果两个结点都在我的左,子问题:转换成去我的左树去找。
在这里插入图片描述
在这里插入图片描述
右边也是一样。

最后IsInTree这个函数,很简单,分分钟搞定。
在这里插入图片描述

这个算法能过,但是时间消耗很慢。
在这里插入图片描述
这道题最精华的部分是在控制pInLeft,pInRight,如果控制不好写起来很痛苦,如果控制好了写起来很舒服。

时间复杂度

思路二的时间复杂度是多少:
O(N^2)
这里要注意,不要这样以为,每一次确定在左树还是右树是O(N),然后往下走是logN层,然后时间复杂度是N*lgN

但是达不到N*logN,这里不能认为高度是logN,只有满二叉树和完全二叉树是logN,这里没有说它是满二叉树和完全二叉树。

像这种情况,这里面会有大量的重复查找。
在这里插入图片描述
这里递归走过程就相当于一个等差数列。
面对这种情况呢就是O(N^2)

优化思路

思路二:
如果是搜索二叉树可以优化到O(N),
注意搜索二叉树 也有歪脖子的情况。

搜索二叉树不需要IsInTree();
在这里插入图片描述
每次确定都是O(1),最多走N次了。不需要查找。
但是这道题非常可惜不是搜索二叉树。

如果不是搜索二叉树,要求优化到O(N)怎么办呢?
有一种取巧的思路,复制这棵树,复制成三叉链的。
节点给重新定义,这样是O(N),再去求还是O(N).

这里教大家一种方式
在这里插入图片描述

这里推荐大家用一个栈来存路径,求路径是O(N),求相交也是O(N),,整体就能控制到O(N)

如何求出p和q的路径?
树的DFS就是走深度优先遍历。

3先入栈,不管3是不是我要找的结点,如果是就return,3就是路径。
如果不是就往左边走,把5入栈,看5是不是,5不是我要的结点为什么要入栈。
5不是我要找的结点但是有可能是我要找的结点的路径的其中一个部分,所以要先入栈。一直走
在这里插入图片描述
没有找到就带个返回值回来。
在这里插入图片描述
现在这棵树就要处理了。怎么处理呢?
根的左子树没有我要的结点,根也不是我要找的结点,根的右子树没有我要的结点。
所以6不可能不是我要找的路径中的一个。
所以把6出栈,不让他影响我。同时要返回一个值给上一层,给上一层做一个参考。

在这里插入图片描述
回到5,说明左边都没有找到,这个时候怎么办呢?
下一步往右边去找。找到7以后怎么办?返回true,注意它不是直接返回给最外面,这个我们已经讲过很多次了。
2的左边找到了,就不需要往2的右边找了,直接返回true给上一层。(一定要返回true给上一层,不然把5出栈了)
5也是一样。
在这里插入图片描述
3的左边找到了也不需要往右边找,返回true.
这个时候就把路径给拿到了。

qpath就不详细讲了,跟上面类似。
在这里插入图片描述

找出路径最坏的情况也就是把这棵树遍历一遍。

最后一件事就是相交了,以前链表需要求一下长度,现在不用求。
先让长的弹,谈到个数相等了,一起弹,同时判断相不相等。相等就是交点。
在这里插入图片描述
最坏的情况也是3*N,也是O(N)
这种方式唯一真正的问题在于,它需要栈的辅助空间。

上面的思路是这道题最经典的思路
这道题本质的大思路还是两种,要么判断在左右的特征来识别,要么路径相交。

优化的代码

在这里插入图片描述

重点是写这个GetPath
它必然要带返回值,只能做输出型参数去取了。
在这里插入图片描述
GetPath不用再判断返回值了,因为有提示,p和q一定在这棵树里面。
在这里插入图片描述
这道题具有非常强的启发性。

二叉搜索树与双向链表

题目链接

题目

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

分析

怎样把搜索二叉树转换成排序双向链表呢?
首先排序必然跟中序有关系。

这道题是很简单吗?中序遍历这棵树,
把值拿出来依次尾插,得到一个双向链表。

但是这里不一样,他要求在原树上操作
在这里插入图片描述
这道题也是一个非常经典的题目
可以可以回溯的时候链接父亲结点,链接父亲会坑,你要改成这个样子。

不能单纯的认为指向父亲指向谁这么简单。
在这里插入图片描述
怎么解决呢?
首先还是肯定跟中序有关系。
不要去关注是父亲还是爷爷还是谁,关注就会掉进坑里。

思路一:
如果借助一个容器来做这道题就太简单了,不用搞队列。
在这里插入图片描述
但是不符合这里的要求。
在这里插入图片描述

思路二:
我们中序遍历这颗树同时记录一个前驱结点。
注意,任何一个结点的左一定是指向前驱的。
在这里插入图片描述
这里的关键关键结点在于后继如何解决?
你没有中序遍历过去的情况怎么知道后继在哪。

我在当前位置能改我的前驱,改不了我的后继,
但是我可以在下一步的时候再动手。

在这里插入图片描述

写代码

这道题最好写一个子函数,不然不好控制,稍不注意就会崩。

如果知道上面的思路还写不出来,说明递归还需要加强

有一种比较简单的方式,你可以先什么都不管,直接把中序先写出来。
但是在递归里面,prev得加引用,它没有往下递归就相当于是下一层栈帧了。
它不在循环出现了。

在这里插入图片描述
在这里插入图片描述
prev得加引用,cur再出现,就是在其他的栈帧里出现了,不是当前栈帧。
在这里插入图片描述
现在要返回链表的头,怎样返回链表的头呢?
可以提前找到最左结点找到这个头,也可以改完以后通过根这个结点一直向左递归。
在这里插入图片描述
在这里插入图片描述
这里真正难理解的就是cur是出现在不同栈帧里面的,画递归展开图就会发现。
从代码的角度,cur每次出现的顺序就是中序,但它不是在同一个函数里出现,它是在不同的递归栈帧里出现。
递归回来的时候让我指向前驱,前驱的后继指向我。

prev是在上一层栈帧改的,但是我的cur已经到下一层栈帧去了。
但是prev只有一个,所以得用引用。
在这里插入图片描述

从前序与中序遍历序列构造二叉树

题目链接

题目

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

分析

给了我们前序和中序。
首先分析一下,前序是什么?中序又是什么?
在这里插入图片描述
通过这样的特征我们就可以用中序来恢复这棵树,但是光有中序是不行的,
要借助前序来确定这里的根

首先3就是这里的根,就可以创建3了,
在这里插入图片描述
创建3之后就可以走一个前序去创建3的左子树
3的左子树被分割成左子树的中序区间。如果这个区间是空,就走右树。
如果这个区间不是空,下一个值一定是左子树的根。
在这里插入图片描述
再去创建9的左和右就没办法创建了,因为这个区间只有一个值,就代表它已经创建好了。
回来,链接上,然后开始递归它的右树。
在这里插入图片描述

每次都要前序往后走去确定根。
这道题也没有其他技巧,就是前序确定根,中序分割左右子区间,
左右子区间决定要不要递归创建,继续分割左右子树。
多个值肯定要分割,只有一个值就不用分割了

写代码

这些题都有一个特点,不适合直接在原树上写。
前序得有一个下标一直往后走。
中序得是一段区间
在这里插入图片描述
首先不管其他的东西,前序这块首先就是创建根。
在这里插入图片描述
再继续往后走,在这个地方要分割出左右子区间
怎么分割呢?
要在中序里找根。
但是这道题有个前提,不能有值相同,不然就出问题了。
如果有值就会导致找根找不到。
在这里插入图片描述

在这里插入图片描述
相当于中序区间被分割成几个段。
在这里插入图片描述

rooti创建好了,现在要递归左子树。
现在要递归创建左子树,并且链在我的左边。
在这里插入图片描述

跟快排很像,其实本质上,这个模型跟快排是一样的。

现在就看唯一条件就是返回值。分割这个区间不断往下走,什么时候就不玩了呢?
这个区间有一个值还可以玩,如果不玩,就单独判断一下。
但是你要创建一个结点,把它的左右都置空,然后return.推荐继续玩。

还有一种情况
这个区间可能会出现不存在的状况。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

从中序与后序遍历序列构造二叉树

在这里插入图片描述

如何通过中序和后序来处理这道题呢?
其实很简单,后序确定根,创建完跟之后,先创建右再创建左。

二叉树的前序遍历

题目链接
这道题我们以前用C语言写过,现在直接用vector就很简单了。
现在这道题我们要用迭代算法来完成这道题。
这道题如果用递归非常简单,现在用迭代时有一定的难度的。

题目

在这里插入图片描述

分析

先拿一颗稍复杂的树分析一下
在这里插入图片描述
这个用非递归不好搞在于哪里呢?
这道题用普通的改循环,已经不适用了。另外二叉树用非递归本来就不好搞。

先来分析一下前序
在这里插入图片描述
现在一直走根左子树,根左子树,根左子树一直走到是空结束。
剩下谁还没有玩呢?
如果一颗树分为根左子树,根左子树,根左子树,剩下哪个部分没有玩呢?
在这里插入图片描述
先访问1的右树,1的右树访问完了,1就完了。
1完了,1作为3的左树,然后访问3的右树。

通过这样拆解以后,非递归是这样去分析它的思路。
在这里插入图片描述

这个思路有一个优势,这个掌握了,前序后序中序都可以用非递归实现

接下来又涉及一个问题,它的右子树怎么访问呢?
它又变成子问题了。所以非递归不是递归带式胜似递归,还是用递归的思路来玩的。
在这里插入图片描述

我们现在用图来展示一下非递归是如何访问一颗二叉树的
第一步:
先访问左路结点,同时要入栈,不入栈等下我们没办法处理它的右子树
因为我们要先访问1的右子树,然后3的,8的。
在这里插入图片描述
第二步:
第一个从栈里面出来的数据是1,然后访问1的右子树,1的右子树是空,没什么访问
在这里插入图片描述
再走一圈,栈里取到3,然后访问3的右子树

第三步
访问3的右子树怎么访问呢?
访问它的左路结点,然后左路结点入栈
在这里插入图片描述
大家看,每次循环都相当于在访问一颗树。
在这里插入图片描述
每次要取栈里面取到这个结点,然后访问它的右子树
这颗树是一个很复杂的树也没关系,继续入。
在这里插入图片描述
最后栈里取到10,然后访问它的右数,它的右树是空,没得访问,然后就结束了。

它不是用递归,但是它把右子树当作递归。
它不是之前的根,左子树,右子树,它是把一颗树分成左路结点和右子树,
这样循环才能走起来

任何一颗树分成左路结点,然后就剩下左路结点的右子树了。

写代码

代码写起来其实很简单,关键是思想。
在这里插入图片描述
访问左路结点
在这里插入图片描述

访问右子树
这里是关键的关键
在这里插入图片描述
很关键很关键,画图,把全部过程根据代码理解一下

什么时候循环结束呢?
这里有两个条件:
1.cur不为空
cur表示要访问一颗树的开始,
cur不为空表示有一颗树没有访问还得继续
2.栈不为空
栈不为空,表示还有结点的右子树没有被访问。
在这里插入图片描述
在这里插入图片描述

这个非递归是通用的,但是后序有一点点变化

二叉树的非递归不是递归但也是递归,而且是一个神奇的循环递归,
借助这个栈,跟快排也类似。

中序的非递归

题目链接
在这里插入图片描述

无论前序还是后序中序都可以按照前面的思路,只是访问根的时机不一样。
因为本质都是一种DFS,都是一种深度优先遍历。

现在我们看一下中序

分析

在这里插入图片描述
cur指向一棵树表示要访问这个结点
只是前序是访问这个结点往左走,访问这个结点往左走,
现在走的是中序,中序得把左路访问完了再访问。

现在只能做一件事,把这些结点先入栈。
在这里插入图片描述
现在我们要访问右树,我们把栈里面把1取出来时候,能不能访问1?
可以,因为把这个1取出来之后意味着把它的左树访问完了,可以访问这个结点。

在这里插入图片描述
把这个1取出来,然后去访问这个结点并且去访问它的右子树。

怎样访问它的右子树?

写代码

访问左路结点
cur不为空表示访问一颗树的开始,
这棵树有可能是空树,有可能是整棵树,有可能是我们拿到的左路结点的右树

在这里插入图片描述
访问
在这里插入图片描述
在这里插入图片描述
写完了,但是没过
在这里插入图片描述
没过的原因在哪里?
这里面是因为遇到空树就结束了。
1的右子树是空树就结束了。不符合我们的预期。
在这里插入图片描述
栈里面还有结点表示栈里面还有结点还有右子树没有访问
在这里插入图片描述
过了
在这里插入图片描述

后序的非递归

很多公司都只考后序,后序才是最难的,后序会了表示你前序中序都会了。

分析

后序怎么办?
根右左,然后把vector的数据逆置一下
这个思路好像可以,试一下
就相当于把前序改一下,但如果要边走边访问就不可以,打印也不行。
本质上是用了一个顺序性的取巧操作。

但是现在要求保持跟前序中序一样的思路呢?
先来分析一下,相比于前序中序的困境在哪里?
还是之前的左路结点,右子树。只是现在要把左路结点和右子树访问完了,
再访问根。

第一步:
在这里插入图片描述
入栈不访问。
从栈里面取到左路结点,意味着这个结点的左子树访问完了。
左子树访问完了还要访问右子树,右子树访问完了才能访问根。

第二步:
但是单拿这个1来说,栈里取到1的时候能直接访问1,因为1的右子树是空。
所以直接访问1.
这是第一种情况。

接着取到3,右不为空,不能直接访问,就访问它的右树的左路结点。
在这里插入图片描述
接着往下看
这个时候栈里取到6的时候能不能访问6?
在这里插入图片描述
可以访问,但这是你的感知,程序识别不出来
因为右为空才取栈里的元素访问,
这里会有两次取到6,第一次是它的右树没有访问过取到6
第二次是它的右树已经访问过了取到6

怎么区分这两次呢?
定义flag会互相干扰,比如第一次取到3,3只要右不为空就置为true
再取到6不为空
所以你会分不清是3的flag还是6的flag
因为这里可能有连续多个结点右不为空

怎样识别6的右树被访问过了还是没有访问过?

写代码

在这里插入图片描述
现在这样肯定死循环了
因为第一次到6第二次到6区分不开,每次6都不为空
一直67死循环
在这里插入图片描述
怎么识别呢
后序,左子树右子树根,在访问根的上一个结点是谁?
要访问6,6的是一个访问的结点是7
也就是右树的根。
有两种情况:
在这里插入图片描述
太巧了
在这里插入图片描述

相关文章:

二叉树进阶题目(超详解)

文章目录 前言根据二叉树创建字符串题目分析写代码 二叉树的层序遍历题目分析 写代码二叉树的层序遍历II题目分析写代码 二叉树的最近公共祖先题目分析写代码时间复杂度 优化思路优化的代码 二叉搜索树与双向链表题目分析写代码 从前序与中序遍历序列构造二叉树题目分析写代码从…...

W6100-EVB-Pico评估版介绍

文章目录 1 简介2 硬件资源2.1 硬件规格2.2 引脚定义2.3 工作条件 3 参考资料3.1 Datasheet3.2 原理图3.3 尺寸图(尺寸:mm)3.4 参考例程 4 硬件协议栈优势 1 简介 W6100-EVB-Pico是一款基于树莓派RP2040和全硬件TCP/IP协议栈以太网芯片W6100的…...

嵌入式面试准备

题目都摘于网上 嵌入式系统中经常要用到无限循环,如何用C编写死循环 while(1){}或者for(;😉 内存分区 代码区,全局区(全局变量,静态变量,以及常量),栈区,堆区 const关键…...

在Linux Docker中部署RStudio Server,实现高效远程访问

🌈个人主页:聆风吟 🔥系列专栏:网络奇遇记、Cpolar杂谈 🔖少年有梦不应止于心动,更要付诸行动。 文章目录 📋前言一. 安装RStudio Server二. 本地访问三. Linux 安装cpolar四. 配置RStudio serv…...

EternalBlue【永恒之蓝】漏洞详解(复现、演示、远程、后门、入侵、防御)内容丰富-深入剖析漏洞原理-漏洞成因-以及报错解决方法-值得收藏!

漏洞背景: 1.何为永恒之蓝? 永恒之蓝(Eternal Blue)爆发于2017年4月14日晚,是一种利用Windows系统的SMB协议漏洞来获取系统的最高权限,以此来控制被入侵的计算机。甚至于2017年5月12日, 不法分子…...

长链接与在线文件

什么是在线文件 常见的聊天工具,比如。。。微信,你可以发送一个文件给对端,即使对端不在线,这个文件也可以暂存在服务器上面,直到接收端上线消费或者超时,这个叫离线文件。与之对应的,在线文件要…...

Python内置数据类型等入门语(句)法

内置数据类型 数字(Number)关键字: int 、float、complex字符串(String)关键字:单引号,双引号 三引号都可以表示,8 种内置类型都可转为字符串类型列表(List) 关键符号 […...

ElasticSearch之RestClient笔记

1. ElasticSearch 1.1 倒排索引 1.2 ElasticSearch和Mysql对比 1.3 RestClient操作 导入依赖 <dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId><version>7.15.…...

饥荒Mod 开发(二二):显示物品信息

饥荒Mod 开发(二一)&#xff1a;超大便携背包&#xff0c;超大物品栏&#xff0c;永久保鲜 饥荒Mod 开发(二三)&#xff1a;显示物品栏详细信息 饥荒中的物品没有详细信息&#xff0c;基本上只有一个名字&#xff0c;所以很多物品的功能都不知道&#xff0c;比如浆果吃了也不知…...

Microsoft Edge使用方法和心得

Microsoft Edge使用方法和心得 大家好&#xff0c;我是豪哥&#xff0c;一名来自杭州的Java程序员&#xff0c;今天我想分享一下我对Microsoft Edge的使用方法和心得。作为一名热爱编程的程序员&#xff0c;我发现一个高效的浏览器对于我们的工作和学习至关重要。而Microsoft …...

Kafka操作指令笔记

查堆积用命令查&#xff1a; ./kafka-consumer-groups.sh --bootstrap-server {kafka集群地址} --describe --group {消费组名称}bin/kafka-consumer-groups.sh --bootstrap-server localhost:9092 --describe --all-groups #查看所有组别的积压情况可以通过grep、awk或其他文…...

WAVE SUMMIT+ 2023倒计时2天,传文心一言将曝最新进展!

传文心一言将曝最新进展&#xff01; 亮点一&#xff1a;趋势引领&#xff0c;“扛把子”文心一言将曝新进展亮点二&#xff1a;干货十足&#xff0c;硬核低门槛开发秘籍大放送亮点三&#xff1a;蓄势待发&#xff0c;大模型赋能产业正当时亮点四&#xff1a;群星闪耀&#xff…...

Crow:Middlewares 庖丁解牛5 context

Crow:Middlewares 庖丁解牛4 partial_context-CSDN博客 基于partial_context再来解释context namespace detail {template<typename... Middlewares>struct partial_context : public pop_back<Middlewares...>::template rebind<partial_context>, public…...

CentOS 7 设置网络

CentOS 7 设置网络 正常情况 ①登陆进去之后使用下面的命令修改文件 echo ONBOOTyes >> /etc/sysconfig/network-scripts/ifcfg-ens33②如果是虚拟机重启后使用如下命令进行查看IP地址 ip addr注&#xff1a;到这里如果显示有两部分&#xff0c;则代表网络设置成功&a…...

装饰器模式(Decorator)

装饰器模式(Decorator Pattern)是一种结构型设计模式,用于动态地给一个对象添加额外的职责。装饰器提供了一个灵活的替代扩展功能的方案,相比继承更加灵活。 在Java中,装饰器模式通常涉及以下几个部分: 组件(Component):定义一个对象接口,可以给这些对象动态添加职责…...

关于“Python”的核心知识点整理大全34

目录 第&#xff11;3 章 外星人 13.1 回顾项目 game_functions.py 13.2 创建第一个外星人 13.2.1 创建 Alien 类 alien.py 13.2.2 创建 Alien 实例 alien_invasion.py 13.2.3 让外星人出现在屏幕上 game_functions.py 13.3 创建一群外星人 13.3.1 确定一行可容纳…...

设计模式--抽象工厂模式

实验4&#xff1a;抽象工厂模式 本次实验属于模仿型实验&#xff0c;通过本次实验学生将掌握以下内容&#xff1a; 1、理解抽象工厂模式的动机&#xff0c;掌握该模式的结构&#xff1b; 2、能够利用抽象工厂模式解决实际问题。 [实验任务]&#xff1a;人与肤色 使用抽象…...

浅析海博深造

文章目录 深造作用 留学种类 选专业 择校 申请流程 申请方式 深造作用 1、个人能力提升&#xff08;学术专业、语言、新文化或新生活方式&#xff09; 2、更好的职业发展&#xff08;起点更高、结交新朋友或扩大社交圈&#xff09; 3、北京上海落户优惠 4、海外居留福…...

【Hive_05】企业调优1(资源配置、explain、join优化)

1、 计算资源配置1.1 Yarn资源配置1.2 MapReduce资源配置 2、 Explain查看执行计划&#xff08;重点&#xff09;2.1 Explain执行计划概述2.2 基本语法2.3 案例实操 3、分组聚合优化3.1 优化说明&#xff08;1&#xff09;map-side 聚合相关的参数 3.2 优化案例 4、join优化4.1…...

synchronized

⭐ 作者&#xff1a;小胡_不糊涂 &#x1f331; 作者主页&#xff1a;小胡_不糊涂的个人主页 &#x1f4c0; 收录专栏&#xff1a;JavaEE &#x1f496; 持续更文&#xff0c;关注博主少走弯路&#xff0c;谢谢大家支持 &#x1f496; synchronized 1. 特性1.1 互斥1.2 可重入 …...

Vue在页面上添加水印

第一步&#xff1a;在自己的项目里创建一个js文件&#xff1b;如图所示我在在watermark文件中创建了一个名为waterMark.js文件。 waterMark.js /** 水印添加方法 */ let setWatermark (str1, str2) > {let id 1.23452384164.123412415if (document.getElementById(id) …...

SQL server 数据库练习题及答案(练习2)

使用你的名字创建一个数据库 创建表&#xff1a; 数据库中有三张表&#xff0c;分别为student,course,SC&#xff08;即学生表&#xff0c;课程表&#xff0c;选课表&#xff09; 问题&#xff1a; --1.分别查询学生表和学生修课表中的全部数据。--2.查询成绩在70到80分之间…...

minicube搭建golang容器服务

引言 最近在自己电脑上搭建一个小型k8s环境&#xff0c;以学习云原生相关内容。这里我主要分为三部分记录&#xff1a; 容器及容器编排理论环境安装相关rpcx服务实战 还在调试中&#xff0c;先总结整理下&#xff0c;这里后续补充上我的github工程链接。 一、容器及容器编排理…...

图片批量处理:图片批量缩放,高效调整尺寸的技巧

在数字媒体时代&#xff0c;图片处理已是日常生活和工作中不可或缺的一部分。有时候要批量处理图片&#xff0c;如缩放图片尺寸&#xff0c;以满足不同的应用需求。现在一起来看看办公提效式具如何高效的将图片批量处理方法&#xff0c;快速、准确地批量调整图片尺寸操作。 下…...

直接插入排序【从0-1学数据结构】

文章目录 &#x1f497; 直接插入排序Java代码C代码JavaScript代码稳定性时间复杂度空间复杂度 我们先来学习 直接插入排序, 直接排序算是所有排序中最简单的了,代码也非常好实现,尽管直接插入排序很简单,但是我们依旧不可以上来就直接写代码,一定要分析之后才开始写,这样可以提…...

C++/CLI——1简介

C/CLI——1简介 如果你是.net程序员&#xff0c;不免会用到C/C写的库。对于简单的调用&#xff0c;可以直接使用DllImport来完成就可以&#xff0c;详情可参考C#调用C/C从零深入讲解。但是对于复杂的C类和对象&#xff0c;尤其是类似于OCC的大型C项目&#xff0c;DllImport可能…...

C#实现串口通讯

1、官网下载Launch Virtual Serial Port Driver Virtual Serial Port Driver - create and emulate virtual COM port&#xff0c;开个虚拟串口&#xff1a; Pair模式&#xff08;一对&#xff0c;成双成对的意思&#xff0c;就是COM1向COM2传或者COM2向COM1,好比两台机器的CO…...

NLP论文阅读记录 - 以大语言模型为参考学习总结

文章目录 前言0、论文摘要一、Introduction1.1目标问题1.2相关的尝试1.3本文贡献 二.相关工作2.1文本生成模型的训练方法2.2 基于LLM的自动评估2.3 LLM 蒸馏和基于 LLM 的数据增强 三.本文方法3.1 Summarize as Large Language Models3.1.1 前提3.1.2 大型语言模型作为参考具有…...

前端---资源路径

当我们使用img标签显示图片的时候&#xff0c;需要指定图片的资源路径&#xff0c;比如: <img src"images/logo.png">这里的src属性就是设置图片的资源路径的&#xff0c;资源路径可以分为相对路径和绝对路径。 1. 相对路径 从当前操作 html 的文档所在目录算…...

【2024考研】心情记录

今天是12.26日。距离24考研已经过去了2天&#xff0c;自认为缓过来了&#xff0c;故写下这篇文章。 25日早上简单过了一下答案&#xff0c;但实在是记不住答案了&#xff0c;不知道是我的脑子抵触还是怎的&#xff0c;像一块灰色的布遮住了我的记忆&#xff0c;羞于打开&#x…...

MySQL数据库日志管理和数据的备份及恢复

目录 MySQL日志管理 数据库备份的重要性 数据库备份的分类 从物理与逻辑的角度 从数据库的备份策略角度 常见的备份方法 物理冷备 专用备份工具mysqldump或mysqlhotcopy 启用二进制日志进行增量备份 第三方工具备份 MySQL完全备份与恢复 MySQL完全备份 物理冷备份与…...

node-schedule nodejs定时提醒(并判断段是否是工作日)

概述 工作中有个需求&#xff1a;在特定的时间发送一些消息&#xff0c;也就是说比如在每天的7点发送消息&#xff1a;该起床了。一开始我想用定时器每分钟每分钟的去查当前时间&#xff0c;但好像有点蠢&#xff0c;然后我找到了这个包 使用方法 安装 npm install node-sc…...

LeetCode 75| 前缀和

目录 1732 找到最高海拔 724 找到数组的中心下标 1732 找到最高海拔 class Solution { public:int largestAltitude(vector<int>& gain) {int res 0;int sum 0;for(int num : gain){sum num;res max(res,sum);}return res;} }; 时间复杂度O(n) 空间复杂度O(…...

智能,轻量,高效的爬虫工具 (爬虫宝第一代), HSpider

场景 之前玩爬虫宝一时爽&#xff0c;但是我很快发现了一个致命的问题。就是chat3.5 有时候误判&#xff0c;Claude2 是遇到大一点的html就无法解析&#xff0c;chat4 Api没有申请下来&#xff0c;chat3.5 误判这个可以纠正&#xff0c;但是每次爬取花费的钱都是2刀以上&#…...

IDEA Maven Helper插件 解决jar冲突

Jar包冲突报错 程序抛出java.lang.ClassNotFoundException异常&#xff1b; 程序抛出java.lang.NoSuchMethodError异常&#xff1b; 程序抛出java.lang.NoClassDefFoundError异常&#xff1b; 程序抛出java.lang.LinkageError异常等&#xff1b;Maven Jar包管理机制 在Maven项…...

装饰 Web3 项目的用户交互界面(Web3项目二实战之四)

用户交互界面是Web3项目必不可少的,毕竟,Web3项目最终是面向用户的,所以,Web3项目总得需要一个优美的UI界面,已达到用户在视觉上精彩盛宴。 诚然,一个Web3项目若到了用户交互界面,大体上,这个Web3项目也将告一段落了。 没错,Web3第二个项目,也将终结于本篇,顺势拉开…...

【数据库系统概论】第3章-关系数据库标准语言SQL(3)

文章目录 3.5 数据更新3.5.1 插入数据3.5.2 修改数据3.5.3 删除数据 3.6 空值的处理3.7 视图3.7.1 建立视图3.7.2 查询视图3.7.3 更新视图3.7.4 视图的作用 3.5 数据更新 3.5.1 插入数据 注意&#xff1a;插入数据时要满足表或者列的约束条件&#xff0c;否则插入失败&#x…...

理解io/nio/netty

一、io io即input/output&#xff0c;输入和输出 1.1 分类 输入流、输出流&#xff08;按数据流向&#xff09; 字节流&#xff08;InputStream/OutputStream&#xff08;细分File/Buffered&#xff09;&#xff09;、字符流(Reader/Writer&#xff08;细分File/Buffered/pu…...

旅游品牌网站搭建的作用是什么

我国旅游业规模非常高&#xff0c;各地大小旅游景区也是非常多&#xff0c;尤其节假日更是可以达到峰值&#xff0c;无论周边游还是外地游对所要去的景区&#xff0c;消费者总是需要来回了解很多&#xff0c;浏览器查或旅行社咨询等。 对旅游企业而言&#xff0c;传统线下方式…...

Linux操作系统——进程(五)环境变量

环境变量 有了我们前面的命令行参数的理解基础呢&#xff0c;我们下面进入环境变量这一个部分的内容的学习。 一般在我们安装一些开发工具尤其是有解释器的开发工具的时候&#xff0c;我们呢一般都要配置环境变量&#xff0c;可能都不太清楚自己为什么要配置环境变量&#xf…...

西门子博途怎么使用PID_Compact做pid调试

到目前为止&#xff0c;我已经在S7-1200中创建了一个可运行的PLC程序&#xff0c;并在Basic Panel中创建了一个HMI项目来操纵和操作该程序。 引文&#xff1a;博途工控人平时在哪里技术交流博途工控人社群 现在&#xff0c;我们该如何深入的让程序开始逐渐智能化呢&#xff0c…...

结构型模式 | 适配器模式

一、适配器模式 1、原理 适配器模式&#xff08;Adapter&#xff09;&#xff0c;将一个类的接口转换成客户希望的另外一个接口&#xff0c;使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。适配器模式主要分为三类&#xff1a;类适配器模式、对象适配器模式、接口…...

基于Python的车牌识别系统实现

本文将以基于Python的车牌识别系统实现为方向&#xff0c;介绍车牌识别技术的基本原理、常用算法和方法&#xff0c;并详细讲解如何利用Python语言实现一个完整的车牌识别系统。 精彩专栏持续更新推荐订阅&#xff0c;收藏关注不迷路 微信小程序实战开发专栏 目录 引言车牌识别…...

时间序列预测模型介绍及使用经验总结

1. 时序预测背景 时序数据&#xff0c;就是序列随时间变化的数据。时间序列分析&#xff0c;一般有时域和频域两种分析方法。时序预测的本质是在时域和频域层面探索时间序列变化的内在规律。 下图描述的是时域&#xff08;temporal domain&#xff09;&#xff0c;横坐标是时…...

Docker知识总结

文章目录 Docker1 Docker简介1.1 什么是虚拟化1.2 什么是Docker1.3 容器与虚拟机比较1.4 Docker 组件1.4.1 Docker服务器与客户端1.4.2 Docker镜像与容器1.4.3 Registry&#xff08;注册中心&#xff09; 2 Docker安装与启动2.1 安装Docker2.2 设置ustc的镜像2.3 Docker的启动与…...

算法训练营Day25

#Java #回溯 开源学习资料 Feeling and experiences&#xff1a; 复原IP地址&#xff1a;力扣题目链接 有效 IP 地址 正好由四个整数&#xff08;每个整数位于 0 到 255 之间组成&#xff0c;且不能含有前导 0&#xff09;&#xff0c;整数之间用 . 分隔。 例如&#xff1…...

docker笔记2-docker 容器

docker 容器的运行 docker run 镜像名&#xff1a;版本标签&#xff1a; 创建 启动容器 docker run 镜像名 &#xff0c;如果镜像不存在&#xff0c;则会在线下载镜像。 注意事项&#xff1a; 容器内的进程必须处于前台运行状态&#xff0c;不能后台&#xff08;守护进程运行…...

redis 从0到1完整学习 (七):ZipList 数据结构

文章目录 1. 引言2. redis 源码下载3. zipList 数据结构3.1 整体3.2 entry 数据结构分析3.3 连锁更新 4. 参考 1. 引言 前情提要&#xff1a; 《redis 从0到1完整学习 &#xff08;一&#xff09;&#xff1a;安装&初识 redis》 《redis 从0到1完整学习 &#xff08;二&am…...

2015年第四届数学建模国际赛小美赛C题科学能解决恐怖主义吗解题全过程文档及程序

2015年第四届数学建模国际赛小美赛 C题 科学能解决恐怖主义吗 原题再现&#xff1a; 为什么人们转向恐怖主义&#xff0c;特别是自杀性恐怖主义&#xff1f;主要原因是什么&#xff1f;这通常是大问题和小问题的结合&#xff0c;或者是一些人所说的“推拉”因素。更大的问题包…...

基于Java开发的微信约拍小程序

一、系统架构 前端&#xff1a;vue | element-ui 后端&#xff1a;springboot | mybatis 环境&#xff1a;jdk8 | mysql8 | maven | mysql 二、代码及数据库 三、功能说明 01. 首页 02. 授权登录 03. 我的 04. 我的-编辑个人资料 05. 我的-我的联系方式 06. …...