华为2022-03-30笔试3题

第三题太恶心了,最后五秒钟第一次有通过,通过了90%。。。
// P1 85% 
// 5 6
// A B A B A A
// 输出 1 4
//#include<iostream>
//#include<algorithm>
//#include<cstring>
//#include<unordered_map>
//#include<vector>
//using namespace std;
//
//int main() {
//	int n, y; cin >> n >> y;
//	char c;
//	vector<int> id(n+1, 0);
//	vector<bool> used(n+1, 0);
//	bool suc = 1;
//	while (y--) {
//		cin >> c;
//		if (c == 'A') {
//			bool get = 0;
//			for (int i = 1; i <= n; i++) {
//				if (!used[i]) {
//					id[i]++;
//					get = 1;
//					if (id[i] == 4) {
//						used[i] = true;
//					}
//					if (suc && y == 0) {
//						cout << i << endl << id[i];
//						return 0;
//					}
//					break;
//				}
//			}
//			if (!get)suc = 0;
//		}
//		else {
//			bool get = 0;
//			for (int i = 1; i <= n; i++) {
//				if (id[i]==0) {
//					used[i] = true;
//					get = 1;
//					id[i] = 4;
//					if (suc&&y == 0) {
//						cout << i << endl << 1;
//						return 0;
//					}
//					break;
//				}
//			}
//			if (!get)suc = 0;
//		}
//	}
//	if(!suc)
//		cout << 0 << endl << 0;
//	system("pause");
//	return -1;
//}

// P2 100%
//5 5
//0 1
//3 3
//1
//2 2
// output: 4 5 
//#include<iostream>
//#include<algorithm>
//#include<cstring>
//#include<unordered_map>
//#include<vector>
//using namespace std;
//
//int minDis, nPath = 0;
//int m, n, startx, starty, endx, endy, g, t1, t2;
//const vector<vector<int>> d = { {-1,0},{1,0},{0,-1},{0,1} };
//
//void dfs(const vector<vector<int>>& e, vector<vector<bool>>& vis, int dis, int x, int y) {
//	if (x == endx && y == endy) {
//		if (minDis > dis) {
//			minDis = dis;
//			nPath = 1;
//		}else if(minDis== dis)
//			nPath++;
//		return;
//	}
//	if (dis == minDis)return;
//	vis[x][y] = 1;
//	dis++;
//	for (int i = 0; i < 4; i++) {
//		int dx = x + d[i][0], dy = y + d[i][1];
//		if (dx >= 0 && dx < m && dy >= 0 && dy < n && e[dx][dy]==0&&vis[dx][dy] == 0) {
//			dfs(e, vis, dis, dx, dy);
//		}
//	}
//	vis[x][y] = 0;
//}
//
//int main() {
//	cin >> m >> n >> startx >> starty >> endx >> endy >> g;
//	vector<vector<int>> e(m, vector<int>(n, 0));
//	vector<vector<bool>> vis(m, vector<bool>(n, 0));
//	while (g--) {
//		cin >> t1 >> t2;
//		e[t1][t2] = 1;
//	}
//	minDis = m + n;
//	dfs(e, vis, 0, startx, starty);
//	cout << nPath << " " << minDis;
//	system("pause");
//	return 0;
//}

// P3 90% 最后5s第一次通过
#include<iostream>
#include<algorithm>
#include<string>
#include<unordered_map>
#include<vector>
#include<queue>
using namespace std;
//[1,2,3,1,null,2,null,null,null,null,null,1,null,null,null]
// 输出[2,1,null]
unordered_map<int, vector<vector<int>>> m;
int getH(const vector<int>& t, int root) {
	if (root>=t.size()||t[root] == 0)return 0;
	int maxH = 1 + max(getH(t, root * 2 + 1), getH(t, root * 2 + 2));
	//return maxH;
}
pair<int, vector<int>> getLayer(const vector<int>& t, int root) {
	int height = getH(t, root);
	if (height < 2)return { 0,vector<int>(0) };
	queue<int> q;
	vector<int> subTree;
	q.push(root);
	int h = height;
	while (h>0&&!q.empty()) {
		h--;
		queue<int> q2;
		while (!q.empty()) {
			int index = q.front();
			q.pop();
			subTree.push_back(t[index]);
			if (h) {
				q2.push(2 * index + 1);
				q2.push(2 * index + 2);
			}
		}
		q = q2;
	}
	return make_pair(height, subTree);
}
int main() {
	vector<int> t;
	string a;
	cin >> a;
	for (int i = 1; i < a.length();) {
		if (isdigit(a[i])) {
			t.push_back(a[i] - '0');
			i += 2;
		}
		else {
			t.push_back(0);
			i += 5;
		}
	}

	int n = t.size();
	int maxHeight;
	int ans_maxH = 1;
	vector<int> ans_subTree;
	for (int i = 0; i < n; i++) {
		pair<int, vector<int>> p = getLayer(t, i);
		if (p.first < 2)continue;
		if (i == 0)
			maxHeight = p.first;
		else {
			if (m.count(p.first) && p.first > ans_maxH) {
				for (int j = 0; j < m[p.first].size(); j++)
					if (p.second == m[p.first][j]) {
						ans_maxH = p.first;
						ans_subTree = p.second;
						break;
					}
			}
			m[p.first].push_back(p.second);
		}
	}
	cout << "[";
	for (int i = 0; i < ans_subTree.size(); i++) {
		if (ans_subTree[i] > 0)
			cout << ans_subTree[i];
		else cout << "null";
		if (i != ans_subTree.size() - 1)
			cout << ",";
	}
	cout << "]";
	system("pause");
	return 0;
}


#华为笔试##华为##春招##笔试题目#
全部评论
牛的。我写了个-1,凑到325分就退出来了
3 回复 分享
发布于 2022-03-31 11:25
不会给的是华为od岗位吗😏
1 回复 分享
发布于 2022-04-09 18:31
楼主投的无线的算法还是软开
1 回复 分享
发布于 2022-04-01 07:52
问一下楼主投的什么岗
1 回复 分享
发布于 2022-03-30 22:43
求问一下他要的输出格式是中序遍历还是层序遍历。而且输出的树如果有一边是null,null节点的子节点还要继续输出吗,这个地方整得我蒙了
2 回复 分享
发布于 2022-03-31 16:19
你最后打印的字符串啊?我看要求打印的是数组 然后我的答案[2, 1, null] 期望是[2,1,null]  说我不对,我气闷了,我还说数组打印怎么把空格去掉呢,太***了
3 回复 分享
发布于 2022-03-30 21:09
为啥都用c++亚,用python呀😀
点赞 回复 分享
发布于 2022-05-19 12:19
题是啥
点赞 回复 分享
发布于 2022-05-05 18:20
兄弟,你是不是没考虑输出-1
点赞 回复 分享
发布于 2022-04-19 10:21
楼主有第一二题的java版答案吗?
点赞 回复 分享
发布于 2022-04-09 13:04
大佬强
点赞 回复 分享
发布于 2022-03-31 10:35
实习岗位只有一次机考机会吗?😅
点赞 回复 分享
发布于 2022-03-31 10:11
同90%,第三题leetcode有,但是没想起来时间复杂度低的那个做法
点赞 回复 分享
发布于 2022-03-30 21:17

相关推荐

最近群里有很多同学找我看简历,问问题,主要就是集中在明年三月份的暑期,我暑期还能进大厂嘛?我接下来该怎么做?对于我来说,我对于双非找实习的一个暴论就是title永远大于业务,你在大厂随随便便做点慢SQL治理加个索引,可能就能影响几千人,在小厂你从零到一搭建的系统可能只有几十个人在使用,量级是不一样的。对双非来说,最难的就是约面,怎么才能被大厂约面试?首先这需要一点运气,另外你也需要好的实习带给你的背书。有很多双非的同学在一些外包小厂待了四五个月,这样的产出有什么用呢?工厂的可视化大屏业务很广泛?产出无疑是重要的,但是得当你的实习公司到了一定的档次之后,比如你想走后端,那么中厂后端和大厂测开的选择,你可以选择中厂后端(注意,这里的中厂也得是一些人都知道的,比如哈啰,得物,b站之类,不是说人数超过500就叫中厂),只有这个时候你再去好好关注你的产出,要不就无脑大厂就完了。很多双非同学的误区就在这里,找到一份实习之后,就认为自己达到了阶段性的任务,根本不再投递简历,也不再提升自己,玩了几个月之后,美其名曰沉淀产出,真正的好产出能有多少呢?而实际上双非同学的第一份实习大部分都是工厂外包和政府外包!根本无产出可写😡😡😡!到了最后才发现晚了,所以对双非同学来说,不要放过任何一个从小到中,从中到大的机会,你得先有好的平台与title之后再考虑你的产出!因为那样你才将将能过了HR初筛!我认识一个双非同学,从浪潮到海康,每一段都呆不久,因为他在不断的投递和提升自己,最后去了美团,这才是双非应该做的,而我相信大部分的双非同学,在找到浪潮的那一刻就再也不会看八股,写算法,也不会打开ssob了,这才是你跟别人的差距。
迷茫的大四🐶:我也这样认为,title永远第一,只有名气大,才有人愿意了解你的简历
双非本科求职如何逆袭
点赞 评论 收藏
分享
头像
01-12 14:44
已编辑
百度_高级研发工程师
今天看到了某平台攻击牛友的帖子,段段今天打算为牛友们说句话,我们的努力到底有没有意义。&nbsp;(原文复述:感觉牛客就是当年那群做题区毕业了开始找工作还收不住那股味,颇有一种从年级第一掉到年纪第二后抱怨考不上大学的区味)&nbsp;&nbsp;粗鄙,无礼,傲慢,攻击,在这里我没有看到任何有用的分析,我只看到了屁股决定脑袋的攻击,我只看到了嫉妒和眼红。一、去医院不看病你去逛街吗&nbsp;去医院你不去看病你去逛街吗?去加油站不加油你去抽烟吗?去部队你不训练战斗技能你去养老吗?来牛客你不努力求职你来干什么来了。&nbsp;牛客本身就是个求职平台,大家分享有用的知识,分享面经,分享offer,分享求职经验的,来牛客不就干这个来了吗?有什么问题吗?...
给个好点的工作吧啊啊...:不知道我看的是不是和博主同样的帖子,我记得原帖是表达的是有些匿名老是发几十万的offer侮辱价,然后就有牛友觉得凡尔赛了导致后面的评论有些偏激。我觉得这个最近闫学晶那个事情有点类似了,她说他儿子一年只能赚七八十万家庭生活都难以为继,不说普通家庭,多少大厂的程序员都赚不到这个数字,大部分家庭看到这种发言肯定会难受的一p,生活的担子又这么重,人都是需要发泄情绪的,互联网就是个极佳的载体,所以很多人直接就喷她了,人在情绪发泄的时候是不思考的,否则就不叫发泄了。然后还有一个点,段哥假定了这些喷的人全都是“躺平的”,这点可能有失偏颇,很多人一直在努力,但是始终缺乏天时地利人和的某一个条件,这点相信段哥找工作的过程中深有体会。绝大部分人都以结果的失败去否认了努力的全过程,可能只是别人努力的方向错了。就像一次面试,可能你准备了很久,结果面试官就是比较奇葩,一直问没有学习到的领域或知识点,然后有人凭一个挂掉的结果就直接给你扣了一个“躺平”的帽子,觉得挂掉是你不够努力,您心里滋味如何?再说点近点的,我也是od,多少同事深夜无偿加班,涨过一分工资吗?多少外包的技术大牛因为学历被困在外包,连od都进不去,这些人难道不努力吗?只是限制与生活、公司制度等等之类的无奈罢了。说到努力,又想到李家琦79元眉笔事件,这么多年有没有认真工作?有没有涨工资?他嘴里说出来是那么的理所当然,打工牛马都知道“任劳任怨”,“认真工作”真能涨工资?只干活不发声就等着被摘果子吧,企业里永远都是“汇报杰出者”升的最快(当然不是所有企业),这种事情相信段哥包括我甚至大部分od都经历过。最近辞职回老家,和老爸散步每次他都会感慨街上的蔬菜小贩多不容易,他们晚上就窝在那种三轮小货车的驾驶室里,腿都伸不直,我们这里晚上零下了,只盖一条薄毛毯,始终舍不得住我们镇上几十块的酒店,因为一车蔬菜就赚几百块顶多一千而且要卖好久,这样的例子还有太多了。这种芸芸众生可能辛苦了一天之后,打开手机看到网上的凡尔赛发言,跟风喷了几句发泄情绪,我觉得这种人不应该扣上“躺平”的帽子。我觉得大部分正常人都是努力的,或者曾经努力过,但世界上有太多努力解决不了的无奈了,甚至说你都没有那个努力的机会,不过正因如此,才显得坚持不懈的努力奋斗之人的难得可贵,认清生活的真相后仍然热爱生活,敢于直面现实的淋漓。
段段STEADY觉醒与突...
点赞 评论 收藏
分享
评论
20
66
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务