华为OD面经

华为OD机试 2O22Q4 A卷

三道题 100分+100分+200分 150分就可以过 每道题是 分数为总分*测试用例通过比例,我这里过了2 3题 100%通过率,每道题大概讲一下题目.

第一题

给定一个数组nums,将元素分为若干个组,使得每组和相等,求出满足条件的所有分组中,组内元素和的最小值 第一行输入 m 接着输入m个数,表示此数组 数据范围:1<=M<=50, 1<=nums[i]<=50 这道题我这里没做出来,没有什么思路


第二题

求单项链表中间的节点值,如果奇数个节点去中间,偶数个取偏右边的那个值 输入: 第一行 链表头节点地址 后续输入的节点数n 后续输入没行表示一个节点,格式 节点地址 节点值 下一个节点地址(-1表示空指针) 输入保证链表不会出现环并且可能存在一些节点不属于链表 测试用例:

00010 4
00000 3 -1
00010 5 12309
11451 6 00000
12309 7 11451

输入:

6

思路:hashmap构建链表,先遍历一次记录链表长度size,再找下标为size/2的节点,不会超时 c++代码:

#include <iostream>
#include <unordered_map>
using namespace std;
struct ListNode {
	int val;
	int next;
	ListNode(int val, int next) {
		this->val = val;
		this->next = next;
	}
};
int main() {
	unordered_map<int, ListNode*> mp;
	int headAddr = 0, n = 0;
	cin >> headAddr >> n;
	for (int i = 0; i < n; i++) {
		int addr, val, next;
		cin >> addr >> val >> next;
		mp[addr] = new ListNode(val, next);
	}
	int size = 1, cur = 0;
	ListNode* head = mp[headAddr];
	ListNode* thead = head;
	while (thead->next != -1) {
		size++;
		thead = mp[thead->next];
	}
	while (head->next != -1) {
		if ((size / 2) == cur) {
			cout << head->val;
			return 0;
		}
		head = mp[head->next];
		cur++;
	}
	return 0;
}


第三题

给一个无向图染色,可以填红黑两种颜色,必须保证相邻两个节点不能同时为红色,输出有多少种不同的染色方案 第一行输入M(图中节点数) N(边数) 后续N行格式为:V1 V2表示一个V1到V2的边 数据范围:1<=M<=15,0<=N=<M*3,不能保证所有节点都是连通的 思路:这道题本来想用DFS遍历节点然后,但是不怎么会写,后来想到另一个思路,因为有N个节点,且N<=15用一个N位长的数字表示节点的染色方案,用一个vector存储所有的边,然后从0遍历到2^N-1判断每个方案是否合法就可以。 c++代码:

#include<iostream>
#include<utility>
#include<vector>
using namespace std;
typedef pair<int, int> pii;

int main() {
	int m, n;
	cin >> m >> n;
	int ans = 0;
	vector<pii> edges;
	for (int i = 0; i < n; i++) {
		int first, second;
		cin >> first >> second;
		edges.emplace_back(first, second);
	}
	for (int i = 0; i < (1 << m); i++) {
		bool flag = 1;
		for (pii p : edges) {
			if (((i >> p.first) & 1) && ((i >> p.second) & 1)) {
				flag = false;
				break;
			}
		}
		if(flag)ans++;
	}
	cout << ans;
}

评价一下 第一题和别人讨论过,感觉属于是个HARD题,2题最简单,模拟就行,3感觉考察DFS,BFS,这样的话就是一道比较常规的hard题。今天出结果了300分,感觉还行,本来目标是350+的。


2012/12/09

更新一下,一面没问什么,上来就手撕代码,题目为 leetcode 22.括号生成,dfs+回溯。 二面问了比较多再目前公司做的一些项目,八股问了一个concurrentHashMap(部门主要用的Java,虽然我刷题用的C++)手撕代码为leetcode 面试10.01合并排序数组,跟面试官说了一下思路然后面试官让用原地合并。

目前已经拿到offer,华为云,14级,15k,本科刚毕业而且目前工作没啥技术含量,所以没敢要太多。跟在华为的朋友了解了一下情况,他觉得目前华为云还是挺稳定的。

#华为Od##2022毕业生求职现身说法##华为机试,emo了##2022毕业即失业取暖地#
全部评论
第二题可以瞅瞅快慢指针法,很有用而且效率很高。面试问到你还能扯扯
5 回复 分享
发布于 2022-12-07 23:38 北京
北科也要看华为外包了嘛
5 回复 分享
发布于 2022-11-25 00:07 广东
第一题我觉得是不是可以通过求和,然后排序,从最大值开始累加找和为因数的满足条件
5 回复 分享
发布于 2022-11-18 10:38 江苏
本科生必会是么
3 回复 分享
发布于 2022-12-21 22:27 天津
15k包含绩效了吗
2 回复 分享
发布于 2023-01-03 20:56 湖北
顺带给自己打个广告,有想来的可以找我内推,或者已经入职的22届可以私聊我工号拉你进一个群,里面都是22届的
1 回复 分享
发布于 2023-03-25 20:58 上海
第一题数据量很小,你就可以求和,分解,知道 上限是多少了,暴力就应该能过,知道上限就是一个背包问题
1 回复 分享
发布于 2022-12-07 23:40 北京
插播一条,华为OD招聘,base成都北京深圳,HC多多,欢迎来聊
点赞 回复 分享
发布于 2023-03-02 19:44 广东
华为成研所大量招聘!Base成都!欢迎投递! 测试和开发都有~
点赞 回复 分享
发布于 2023-03-02 19:12 广东
感谢分享,很有用
点赞 回复 分享
发布于 2023-02-25 15:24 浙江
打个广告,招聘 华为OD/华为社招, 软件开发,软件测试岗位,工作地 南京,我们部门近两年发展迅速,OD和17级以上社招hc充足。 【招聘要求】 1、统招全日制本科及以上学历,计算机、电子、通信等相关专业 2、掌握Java、Python、C/C++、JS等主流开发语言中的一种 **************
点赞 回复 分享
发布于 2023-01-10 11:58 广东
请问python和cpp的机考题是同一套吗,还是说会不一样
点赞 回复 分享
发布于 2023-01-08 01:10 甘肃
感觉有点难哦
点赞 回复 分享
发布于 2022-11-14 21:13 四川

相关推荐

05-23 17:41
已编辑
西南交通大学 Java
面得最久的一次,一共一个半小时,java基础,jvm,集合,spring,mybatis,数据库,Linux,计网都有涉及下面是手撕题一开始是这道题/*重构字符串给定一个字符串&nbsp;s&nbsp;,检查是否能重新排布其中的字母,使得两相邻的字符不同。返回&nbsp;s&nbsp;的任意可能的重新排列。若不可行,返回空字符串&nbsp;&quot;&quot;&nbsp;。示例&nbsp;1:输入:&nbsp;s&nbsp;=&nbsp;&quot;aab&quot;输出:&nbsp;&quot;aba&quot;示例&nbsp;2:输入:&nbsp;s&nbsp;=&nbsp;&quot;aaab&quot;输出:&nbsp;&quot;&quot; 提示:1&nbsp;&lt;=&nbsp;s.length&nbsp;&lt;=&nbsp;500s&nbsp;只包含小写字母*/感觉短时间内写不出来,然后问面试官能不能换题,面试官换了一题之后才写出来的下面是换过的题/*公共字符按ASCII码升序输出所有符合要求的字符;&nbsp;如果没有符合要求的字符,则输出空列表[]。样例1输入:2&nbsp;[&quot;aabbccFFFFx2x2&quot;,&nbsp;&quot;aaccddFFFFx2x2&quot;,&nbsp;&quot;aabcdFFFFx2x2&quot;]输出:[&quot;2&quot;,&nbsp;&quot;F&quot;,&nbsp;&quot;a&quot;,&nbsp;&quot;x&quot;]解释:字符&nbsp;a&nbsp;在三个字符串中都出现&nbsp;2次,符合要求;字符&nbsp;b&nbsp;在第二三个字符串中分别出现&nbsp;0次、1次,不符合要求;字符&nbsp;c&nbsp;在第三个字符串中出现&nbsp;1次,不符合要求;字符&nbsp;d&nbsp;在第三个字符串中出现&nbsp;1次,不符合要求;字符&nbsp;F&nbsp;在三个字符串中都出现了&nbsp;4&nbsp;次,符合要求;字符&nbsp;x&nbsp;在三个字符串中都出现了&nbsp;2&nbsp;次,符合要求;字符&nbsp;2&nbsp;在三个字符串中都出现了&nbsp;2&nbsp;次,符合要求;因此字符&nbsp;a、F、x、2符合要求,按ASCII码升序输出&nbsp;*/代码实现public&nbsp;class&nbsp;Test&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;static&nbsp;char[]&nbsp;commonChars(int&nbsp;count,&nbsp;List&lt;String&gt;&nbsp;strings)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int[][]&nbsp;counts&nbsp;=&nbsp;new&nbsp;int[strings.size()][128];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//记录每个字符出现的次数&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;strings.size();&nbsp;i++)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;tmp&nbsp;=&nbsp;strings.get(i);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;char[]&nbsp;charArray&nbsp;=&nbsp;tmp.toCharArray();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//记录当前字符串所有字符出现的次数&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(int&nbsp;j&nbsp;=&nbsp;0;&nbsp;j&nbsp;&lt;&nbsp;charArray.length;&nbsp;j++)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;counts[i][charArray[j]]++;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//定义变量记录符合条件的字符个数&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;resCount&nbsp;=&nbsp;0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List&lt;Character&gt;&nbsp;res&nbsp;=&nbsp;new&nbsp;ArrayList&lt;&gt;();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(int&nbsp;j&nbsp;=&nbsp;0;&nbsp;j&nbsp;&lt;&nbsp;128;&nbsp;j++)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//判断当前字符是否符合次数要求&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;boolean&nbsp;state&nbsp;=&nbsp;true;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;strings.size();i++)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(counts[i][j]&nbsp;&lt;&nbsp;count)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;state&nbsp;=&nbsp;false;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(state)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;resCount++;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;res.add((char)(j));&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;char[]&nbsp;resArr&nbsp;=&nbsp;new&nbsp;char[resCount];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;resCount;&nbsp;i++)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;resArr[i]&nbsp;=&nbsp;res.get(i);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;resArr;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;void&nbsp;main(String[]&nbsp;args)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;k&nbsp;=&nbsp;2;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List&lt;String&gt;&nbsp;strings&nbsp;=&nbsp;new&nbsp;ArrayList&lt;&gt;();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strings.add(&quot;aabbccFFFFx2x2&quot;);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strings.add(&quot;aaccddFFFFx2x2&quot;);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strings.add(&quot;aabcdFFFFx2x2&quot;);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;char[]&nbsp;res&nbsp;=&nbsp;commonChars(k,&nbsp;strings);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Arrays.sort(res);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(char&nbsp;c:res)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.print(c&nbsp;+&nbsp;&quot;&nbsp;&quot;);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;}}
华为一面191人在聊 查看2道真题和解析
点赞 评论 收藏
分享
评论
27
97
分享

创作者周榜

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