总结
大型分布式系统犹如一个生命,系统中各个服务犹如骨骼,其中的数据犹如血液,而Kafka犹如经络,串联整个系统。这份Kafka源码笔记通过大量的设计图展示、代码分析、示例分享,把Kafka的实现脉络展示在读者面前,帮助读者更好地研读Kafka代码。
麻烦帮忙转发一下这篇文章+关注我
10 20 0 3
12 21 -1 4
15 22 -1 -1
5 35 -1 -1
输出样例1:
YES
输入样例2:
6
8 27 5 1
9 40 -1 -1
10 20 0 3
12 11 -1 4
15 22 -1 -1
50 35 -1 -1
输出样例2:
NO
========================================================================
分析题意和示例:
每一行代表这个结点的序号(即第几行为第几个结点)
拿示例一来说:(其实也就是 该结点 该结点的左孩子,该结点的右孩子)
6
(0) 8 27 5 1
(1) 9 40 -1 -1
(2) 10 20 0 3
(3) 12 21 -1 4
(4) 15 22 -1 -1
(5) 5 35 -1 -1
思路:
用 两个map<int,int> 进行 存前两行的数据 其中 第一个int为行号,第二个int
为每行的数据,然后单独处理后两行进行建树,建完树后中序输出,然后通过map找到对应的
键值是否为升序,这是判读K1的条件是否成立;
笛卡尔树的第二个条件是 该树的除叶节点外,其余结点的值都比左右孩子的值大 ,这个既然树已经建好了
那就用递归做。
补充:其中建树的算法还很炫!代码中也有解释。
三:如果map容器的用法和vector容器的算法不熟悉 下方链接学习下哈
===================================================================================================
===================================================================
/**
分析题意和示例:
每一行代表这个结点的序号(即第几行为第几个结点)
拿示例一来说:(其实也就是 该结点 该结点的左孩子,该结点的右孩子)
6
(0) 8 27 5 1
(1) 9 40 -1 -1
(2) 10 20 0 3
(3) 12 21 -1 4
(4) 15 22 -1 -1
(5) 5 35 -1 -1
思路:
先建树,用 两个map<int,int> 进行 存前两行的数据 其中 第一个int为 行号第二个int
为每行的数据,然后单独处理后两行进行建树,建完树后中序输出,然后通过map找到对应的
键值是否为升序,
是笛卡尔树的第二个条件是 该树的除叶节点外,其余结点的值都比左右孩子的值大
*/
#include<bits/stdc++.h>
using namespace std;
typedef struct TNode* ptrTree;
typedef struct TNode{
int data;
ptrTree left;
ptrTree right;
}tnode;
int cnt;//记录递归次数
vectorv; //存中序遍历的序号
map<int,int>m1,m2;//存前两行的数据
int flag2 = 0;//用于判断K2
ptrTree createTree(int number[1000][2],int x){
if(x == -1)
return NULL;
cnt++;
ptrTree BT = (ptrTree)malloc(sizeof(struct TNode));
BT->left = NULL;
BT->right = NULL;
BT->data = x;
// cout << BT->data << endl;
BT->left = createTree(number,number[x][0]);
BT->right = createTree(number,number[x][1]);
return BT;
}
//中序遍历
void inorder(ptrTree BT){
if( BT ){
inorder(BT->left);
int temp = BT->data;
v.push_back(temp);
inorder(BT->right);
}
}
//是笛卡尔树的第二个判断条件
void judgement(ptrTree BT){
if( BT->left != NULL ){
if(m2[BT->data] > m2[BT->left->data]){
flag2 = 1;
return ;
}
judgement(BT->left);
}
if( BT->right != NULL ){
if(m2[BT->data] > m2[BT->right->data]){
flag2 = 1;
return ;
}
judgement(BT->right);
}
}
int main(){
int N,flag1 = 0;
int array[1000][2];//定义二维数组存储后两行的数据
int m;//记录根节点用的
cin >> N;
for( int i = 0; i < N; i++ )
{
int a,b,c,d;
cin >> a >> b >> c >> d;
总结
以上是字节二面的一些问题,面完之后其实挺后悔的,没有提前把各个知识点都复习到位。现在重新好好复习手上的面试大全资料(含JAVA、MySQL、算法、Redis、JVM、架构、中间件、RabbitMQ、设计模式、Spring等),现在起闭关修炼半个月,争取早日上岸!!!
下面给大家分享下我的面试大全资料
- 第一份是我的后端JAVA面试大全
后端JAVA面试大全
- 第二份是MySQL+Redis学习笔记+算法+JVM+JAVA核心知识整理
MySQL+Redis学习笔记算法+JVM+JAVA核心知识整理
- 第三份是Spring全家桶资料
MySQL+Redis学习笔记算法+JVM+JAVA核心知识整理
JAVA核心知识整理
[外链图片转存中…(img-PpycOHeC-1715800259843)]
MySQL+Redis学习笔记算法+JVM+JAVA核心知识整理
- 第三份是Spring全家桶资料
[外链图片转存中…(img-e8eoy4mX-1715800259844)]
MySQL+Redis学习笔记算法+JVM+JAVA核心知识整理