迈普通信笔试 - 8.31
不定项选择:25题 , 编程语法和linux,计算机网络
简答题:2题
- 代码运行的四个阶段
- 给例子判断哪个编程规范更好
编程题:2题
查数组里为2的幂的最大数所在位置
// 因为待处理的数为unsigned int 建立哈希表 存储所有2的幂的数 unordered_set<int> uset; int FindMaxPowerOf2Element(unsigned int arr[] , unsigned int arrLen){ int num = 2; while(num < INT_MAX/2){ uset.insert(num); num *= 2; } int res = 0 , idx = -1; // 遍历查询 最大的2的幂记录idx 如果没有idx = -1 最后返回idx即可 for(int i = 0 ; i < arrlen ; i++){ if(uset.count(arr[i])){ res = max(res , arr[i]); if(res == arr[i])idx = i; } } return idx; }
实现两个接口函数分配释放资源
struct ResldNode{ long resld; int keyA; int keyB; }; // 通过一个二维矩阵来判断该资源ID有没有用户占用 , 记录分配ID vector<vector<int>> id(65536 , vector<int>(65536 , 0)); // 记录用户对应的keyA keyB unordered_map<int , pair<int , int>> umap; // 记录每个ID对应的用户数量 unordered_map<int , int> data; // 记录已经被使用的ID unordered_set<int> uset; // 遍历ID值,返回第一个没有被使用的ID int find_idx(){ for(int i = 1 ; ; i++){ if(!uset.count(i))return i; } return -1; } long allocResId(int userId , int keyA , int keyB){ long resId = 0; // 如果该资源没被占用,分配一个ID值,并进行相关记录 if(id[keyA][keyB] == 0){ int cur = find_idx(); uset.insert(cur); resId = cur; id[keyA][keyB] = cur; umap[userId] = make_pair(keyA , keyB); data[cur] = 1; } else{ // 该资源被占用,通过id矩阵得到分配的ID返回,并进行相关记录 int cur = id[keyA][keyB]; resId = cur; umap[userId] = make_pair(keyA , keyB); data[cur]++; } return resId; } /* 1. 首先通过umap用户表获得对应的kayA keyB 2. 通过id矩阵找到分配的对应ID 3. 将该ID的计数--。 如果为0则进行相关的资源删除 打印删除ID值 ; 如果不为0, 相关资源删除,返回OK即可; */ int freeeResId(int userId , long resId){ auto it = umap[userId]; int cur = id[it.first][it.second]; data[cur]--; umap.erase(userId); if(data[cur]==0){ data.erase(cur); uset.erase(cur); cout<<"OK,删除id"<<cur<<endl; return 1; } cout<<"OK,但是id不删除"<<endl; return 0; }