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

相关推荐

27 96 评论
分享
牛客网
牛客企业服务