华为机试&面经c++
机试三道题
第一题:简单的数组题,具体内容忘了。只记得输出是类似“1 2 3”这样用空格隔开的一个个结果。我本来在循环中直接计算完每一个答案以后cout<<ans<<' '; 结果最后面多了一个空格答案不通过,无奈给最后一个结果单独输出。
第二题:最大拓扑网络。给定n个节点(0~n-1),每个节点都有其对应的层级(1<=level<=1000)。节点之间有链路连接,比如{0,2}表示节点0和节点2之间可以连接,这个连接是双向的。每个节点可以有多条链路,但只能属于一个层级。最大拓扑网络表示在同一层级下,能用链路直接连接起来的最大节点数量。(比如共有3个节点,节点0,1,2都属于层级1,且给定链路{0,1},{1,2},则它们组成了大小为3的拓扑网络。如果节点0,2属于层级1,节点1属于层级2,则最大拓扑网络大小为1)。
输入:n(代表n个节点)
n个数字(代表每个节点所属的层级)
m(代表共有m条链路)
m行,每行为两个数字(代表每条链路连接的两个节点)
输出:最大拓扑网络的大小
这道题我用广度搜素写的,测试用例增减了几条链路完全没问题,结果通过率只有10%,百思不得其解。贴一下代码希望有大佬解惑。
#include <vector>
#include <queue>
#include <iostream>
using namespace std;
int main()
{
int n;
cin >> n;
vector<int> level;
for (int i = 0; i < n; i++) {
int l;
cin >> l;
level.push_back(l);
}
int linkNum;
cin >> linkNum;
vector<vector<int>> link(n);
for (int i = 0; i < linkNum; i++) {
int left, right;
cin >> left >> right;
link[left].push_back(right);
link[right].push_back(left);
}
int ans = 1;
queue<int> visit;
for (int i = 0; i < n; i++) {
if (level[i] == -1) { continue; }
visit.push(i);
int nowLevel = level[i];
int size = 1;
while (!visit.empty()) {
int nowVisit = visit.front();
level[nowVisit] = -1;
for (auto it : link[nowVisit]) {
if (level[it] == nowLevel) {
visit.push(it);
size++;
}
}
visit.pop();
}
ans = max(ans, size);
}
cout << ans << endl;
第三题:菜单组合种类。为了科学饮食,控制每天摄入的卡路里数。最低值应不低于kcal_low, 最高值应不高于kcal_high。现在给出n个菜品的卡路里数,菜品可以重复选择。为满足总共摄入的卡路里数在规定的区间,可以有多少种菜品选择方式?
输入:kcal_low kcal_high
n
n行,表示每个菜品的卡路里数。
输出:所有合理的菜品组合方式数量。
例:输入350 500
3
100
200
500
输出:7
解释:500*1,200*2,200*1+100*2,200*2+100*1,100*4,100*3+200,100*5共7种选择。
完全背包问题,动态规划。代码没存。
----------------------------------------------------------------------------------------------------------------------------------
一面:开局经典自我介绍。然后让介绍一个代码量最多的项目,并且问了一些相关问题。
做题:输入hello world world
输出world 2
hello 1
按出现频次最多的单词排序。相同频次按字母表排序。哈希表解决。
之后问了一些c++八股文。后悔没好好背,答的磕磕绊绊。主要是面向对象相关,多态虚函数之类。还有指针和引用、内存等等。
二面:大体和一面内容差不多。八股+手撕代码。简历上每个项目都延申问了点相关知识,一路深入,直到我答不出来。但是面试官人很好,试出我的深浅之后就换话题,态度很友善类似闲聊,所以压力不大。
主管面:本来以为会压力面,结果还好。主管虽然比较严肃但没给太多压力。主要问了实习相关:碰到的最喜欢的人和最讨厌的人?遇到那些困难如何解决?如果重来一次实习有那些地方可以改进?实习收获?如何看待工作和学习的区别?介绍你认为最有效的学习方法?未来的职业规划?你认为作为技术专家/管理人员应该具备什么能力?最后问了华为企业文化的认识。总共30min。
安克创新 Anker公司福利 814人发布
