C++工程师精选面经合集
4家公司
10篇面经
最新 热门
12-06 12:37
华为机试-朋友圈个数C++解法
给定一组朋友关系,统计一下该朋友关系网中的朋友圈个数。朋友圈的定义:一个朋友圈至少由3个朋友组成,且要求同一个朋友圈中的任意两个人都具有直接的朋友关系。输入描述输入一个朋友关系列表,如 Fiends =A.B],[A.C],IB,DI,其中的每一个元素 Friendsi表示 Friends[i][0)和 Friends [i][1] 是朋友关系 先输入一个数字 N 代表关系的总数,后面每条关系一行,两个成员以逗号分隔输出描述输出一个整数,表示整个关系网中朋友圈的个数补充1:Friends.length>=1,Friends.length<= 10^32:输入的总朋友个数<= 1003:输入保证 Friend[i][0]和 Friend[i][1]一定不一样,且同一关系不会反向输入,即不会同时输入[A,B] 和 [B,A]。4:不考虑子朋友圈,即当发现 [A,B,C,D]组成一个朋友圈时,[A,B,C]、[A,B,D]等子朋友圈不单独计数示例1:输入:3A,BA,CB,D输出:0示例2:输入:7A,BA,CB,CA,DD,EB,DA,E输出:3示例3:输入:6A,BA,CB,CA,DB,DD,C输出:1————————————————版权声明:本文为CSDN博主「MISAYAONE」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/misayaaaaa/article/details/155455278//bronKerbosch算法是最优解,但是对于现在的我来说好难啊!如果考试考到了还是老老实实邻接矩阵+暴力算法吧,起码简单一些的用例应该是能通过的#include <iostream>#include <unordered_map>#include <string>#include <cmath>#include <algorithm>#include <bitset>using namespace std;//定义全局变量bool isFriend[100][100] = { false };//记录谁和谁是朋友int totalPeople;vector<int> maxCircle;//P-还可以考虑加入到朋友圈的人//X-已经排除,不考虑的人void bronKerbosch(int R, int P, int X) {if (P == 0 && X == 0) {if (std::bitset<32>(R).count() >= 3) {maxCircle.push_back(R);}return;}int pivot = 0;//枢顶点IDif (P != 0) {//找到P中第一个人的idfor (int i = 0; i < totalPeople; i++) {if (P & (1 << i)) {pivot = i;break;}}}//遍历P中所有不是枢轴朋友的人for (int v = 0; v < totalPeople; v++) {//检查P的第v位是否为1if (P & (1 << v)) {//if (!isFriend[pivot][v]) continue;int newR = R | (1 << v);int newP = 0;for (int u = 0; u < totalPeople; u++) {if ((P & (1 << u)) && isFriend[v][u]) {newP |= (1 << u);}}//计算新的Xint newX = 0;for (int u = 0; u < totalPeople; u++) {if ((X & (1 << u)) && isFriend[v][u]) {newX |= (1 << u);}}//递归bronKerbosch(newR, newP, newX);P &= ~(1 << v);X |= (1 << v);}}}int main() {////声明变量名intN;cin >> N;cin.ignore();if (N <= 0) {cout << 0 << endl;return 0;}//把人名转换为数字编号unordered_map<string, int> idMap;vector<string> names;int nextId = 0;//读取所有朋友关系for (int i = 0; i < N; i++) {string line;getline(cin, line);  // 读取整行// 处理可能的空格size_t commaPos = line.find(',');if (commaPos == string::npos) {// 没有逗号,格式错误continue;}string a = line.substr(0, commaPos);string b = line.substr(commaPos + 1);// 去除首尾空格a.erase(0, a.find_first_not_of(" \t"));a.erase(a.find_last_not_of(" \t") + 1);b.erase(0, b.find_first_not_of(" \t"));b.erase(b.find_last_not_of(" \t") + 1);// 给人分配idif (!idMap.count(a)) {idMap[a] = nextId++;}if (!idMap.count(b)) {idMap[b] = nextId++;}int idA = idMap[a];int idB = idMap[b];//标记他们是朋友isFriend[idA][idB] = true;isFriend[idB][idA] = true;}totalPeople = nextId;if (totalPeople < 3) {cout << 0 << endl;return 0;}int P = 0;for (int i = 0; i < totalPeople; i++) {P |= (1 << i);//把第i位设为1}maxCircle.clear();bronKerbosch(0, P, 0);sort(maxCircle.begin(), maxCircle.end(), [](int a, int b) {return std::bitset<32>(a).count() > std::bitset<32>(b).count();});//存储真正独立的朋友圈vector<int> uniCircle;for (int Circle : maxCircle) {bool isSubset = false;for (int larger : uniCircle) {if ((Circle & larger) == Circle) {isSubset = true;break;}}if (!isSubset) {uniCircle.push_back(Circle);}}cout << uniCircle.size() << endl;}
投递华为HUAWEI等公司10个岗位
点赞 评论 收藏
分享
/feed/main/detail/b62963862bb94eb199170b84bd234ef3/feed/main/detail/7159311cb5494004b14fb4815ed474e1/feed/main/detail/f2eca8fcc7d841ab91f5774627bf1674/feed/main/detail/a560bdcd89834e579a27c2c2bde32e0b
11-28 06:30
门头沟学院 Java
快手C++一面-秋招面经
C++: 1.虚函数实现原理2.虚表是一个类有一个还是一个对象有一个?(每个类有一个虚函数表,每个对象有一个虚函数表指针)3.查询虚表的时间复杂度是多少?4.`std::move()` 原理,涉及移动吗5.假设有一个 1KB 的大对象,`move` 能节省拷贝吗6.智能指针原理7.new 和 malloc 有什么区别呢8.用 `new` 生成的对象,可以用 `free` 释放吗?那如果是基础类型呢?9.用 `new` 创建数组时,释放的时候需要写出元素个数吗10.`std::map` 和 B+ tree 有什么区别呢11.红黑树和 B+ Tree 在性能、内存空间占用上的对比12.为什么数据库选择 B+ Tree 而不是红黑树13.在 STL 里,内存池是怎么实现的,有怎样的结构?14.执行 `vector<int> v(4, 100)` 会发生什么,在栈上还是堆上分配?15.那如果是 `new vector<int>(4,100)` 呢16.如何拿到类中私有成员变量的值?17.有一个二维数组里面都有值,想要给每个数都加 100,行遍历和列遍历有什么区别?网络:1.在浏览器中访问一个 http 服务器,这里面会经过哪些协议?2.为什么不直接用 tcp 协议,还需要用 http 协议?算法:1.`1,2,3,4,...,n` 构造二叉树2.合并两个有序数组 a 和 b,两个数组可能是升序/降序(4 种情况),合并后的结果放在 a 中,合并后的顺序按照 a 的顺序来
点赞 评论 收藏
分享
/feed/main/detail/e7915c341d4d482e9f71d716ab24c762/feed/main/detail/92903cda9a974e878fbe16dd5efcf16a/feed/main/detail/7db8b3bcb21d49339f53eb378115b714
11-28 01:10
门头沟学院 Java
26秋招腾讯 wxg 一面八股盛宴
点赞 评论 收藏
分享
/feed/main/detail/0ba4fc38ca2247a3ae04395aec79f179/feed/main/detail/c086b1d5101c4939ac24ac33ba2d7078/feed/main/detail/815e534dfe644f9fb2689d22cd909bfb
11-26 04:10
门头沟学院 Java
27实习灵犀互娱服务端开发一面55min
点赞 评论 收藏
分享
/feed/main/detail/04f714588eb7452e8d1dd9f14b93aaee/feed/main/detail/722e39328a57467cacdce38e4fc1f76a/feed/main/detail/55eeae6f94ff434b9f5bcbb4b26f4860
小鹏多模态C++一面(口干舌燥版
1、实习介绍2、c++面向对象的封装继承多态3、你的项目中怎么用多态的4、c++多态的原理5、c++11之后的新特性6、介绍智能指针,你的项目中用的比较多的是哪几种7、智能指针是线程安全的吗,你的项目中怎么保证安全的8、lamda表达式,除了比较,你还在哪些场景中会用到过9、lamda表达式的传参有什么捕获方式,你的项目中用了哪些10、左值引用和右值引用的区别11、移动语义平常有用过吗,实现原理是什么,如果类的移动构造delete掉,move会怎么样12、你平常写一个类会给他定义移动构造吗13、标准库容器介绍14、这些容器是线程安全的吗,你平常怎么保证安全的15、线程同步的方式你用过哪些16、lock_guard和unique_lock的区别17、信号量具体是怎么实现同步的,和锁有什么区别18、原子变量在项目中是怎么用的,原理是什么,和锁有什么区别,为什么不用锁而是用原子变量19、future了解过吗20、自己实现过线程池吗21、进程间通信的方式有哪些,mmap的具体原理是什么,会有同步的问题吗(项目相关↓)22、讲实习项目的背景和具体工作,异步日志有遇到过乱序等问题吗,同事有反馈过什么问题吗,一个日志文件没有写满,重启文件之后会继续往这个文件里写吗,压缩文件用的什么方法,压缩成了什么文件23、介绍聊天项目,gRPC是怎么用的,同步调用还是异步调用,有考虑过超时的问题吗,项目有做过性能测试吗24、反问
查看22道真题和解析
点赞 评论 收藏
分享
/feed/main/detail/f90ca4fe225a4ef79db1e74d82cc3699/feed/main/detail/08b05d8fa26f4f2f8b2481bc1ea50dca/feed/main/detail/3d50d87b44ef4a9585fb22b8754244a0/feed/main/detail/7d4240f91cc8427eae8d1c13fef0abe6/feed/main/detail/1ea60d30be814cf8a5bae84ee96428f7/feed/main/detail/0071bf89b96e42cd910feb5144e5f6c8/feed/main/detail/a95f85a73af6404797210717cd4919ac
玩命加载中
写面经
发动态
发动态
发帖子
写文章

全站热榜

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