题型:10道单选(10*3),5道多选(5*4'),2道简答(2*5'),2道编程题(2*20')。
印象比较深的有逻辑推理题、Linux命令、OSI/TCP网络模型中的协议、MySQL锁、图的最短路径、二叉树的性质
二叉树的中序和先序遍历、
出栈进栈、
Docker的使用
概念、算法、优缺点、应用场景
概念、算法、优缺点
一道排序题、一道DFS
小明有n个宝石和k个包裹,每个宝石的价格为price[i],每个包裹的价值是price[i]+price[j],要求从i到j中的所有宝石都在该包裹内,求k个包裹所放宝石的最大价格和最小价格之差。
int putGems(vector<int>& price, int k) { int n = price.size(); vector<int> pairPrices(n-1, 0); int res = 0; for (int i = 0; i < n-1; ++i) { pairPrices[i] = price[i] + price[i+1]; } std::sort(pairPrices.begin(), pairPrices.end()); for (int i = 0; i < k-1; ++i) { res += pairPrices[n - 2 - i] - pairPrices[i]; } return res; }
给一个地图map,小明的位置(a_x, a_y),小红的位置(b_x, b_y),求小明和小红的双向奔赴的最短时间。
int dis; int getEstTime(vector<vector<int>>& map, int a_x, int a_y, int b_x, int b_y) { dis = INT32_MAX; vector<vector<bool>> visited(map.size(), vector<bool>(map[0].size(), false)); dfs(map, a_x, a_y, b_x, b_y, 0, visited); if (dis == INT32_MAX){ return -1; } return dis/2; } void dfs(vector<vector<int> >& map, int a_x, int a_y, int b_x, int b_y, int path, vector<vector<bool>>& visited){ if (a_x == b_x && a_y == b_y){ dis = min(dis, path); return ; } if (a_x < 0||a_x >=map.size()||a_y<0 || a_y >= map[0].size() || visited[a_x][a_y]){ return ; } if (map[a_x][a_y] == 0){ visited[a_x][a_y] = true; return ; } vector<pair<int,int>> dirs = {{0,1}, {1,0} ,{0,-1}, {-1,0}}; visited[a_x][a_y] = true; for (int i = 0; i < 4; ++i) { dfs(map, a_x+dirs[i].first, a_y+dirs[i].second, b_x, b_y, path+1, visited); } }#网易雷火##实习 Java#