显然是似了
笔试问题:
- vue3 和 vue2 有什么区别
- JSON.stringify() 的作用
- localStorage、session、cookie的区别
- 简述 Vuex 的核心概念和作用
- null 和 undefined 的区别
- 给定一个字符串,找出其中出现次数最多的字符。
- 写一个函数将树形结构数据转化为平铺结构
面试被拷打了,包括但不限于:
- 这个为什么要手写,这不就是一个很简单的组件吗
- 有还是没有
感觉甚至不敢问面试评价,显然很糟糕
需要多一些面试和项目经验,得写写demo
携程笔试
四个编程题
给一个字符串,如果是大写字母的话,变为它的下一个字母,如 A 变成 B,Z 变成 A;如果是小写字母的话,变为它的前一个字母,如 z 变成 y,a 变成 z,其他字符不变。(秒了)
第一行输入 n,表示数据组数。接下来每一行为 字符串 + 值 的形式,从中选择两个字符串,使得其中一个是另一个的字串,同时使得两个值的和最大。(strstr(a,b) 函数用于查找 b 在 a 第一次出现的位置,过了 95%)
有一个字符串由 0、1、2 构成,但是其中的某几位不可知,以 ?代替,但是满足以下条件:
- 相邻两个字符不相同;
- 任意连续三个字符组成的三进制数必定是偶数
思路:在三位三进制数中符合上述条件的只有:020(6)、101(10)、121(16)、202(20)
所以自然按位数分两种情况讨论:
- 一个是只有三位的情况,匹配上述四种情况的任意一种即可。
- 另一个是大于三位的情况,词此时字符串只能是020202……或202020……才能满足条件。
(过了 71%)
小明需要从编号为 1 的城市前往编号为 n 的城市,第一行输入 n,m,h,分别指代城市数、道路数、以及路程限制。
接下来 m 行,每行输入 u,v,w,d,指代从 u 和 v 之间的路径,道路承重、路程。
无法到达 n 输出 -1,在路程限制 h 的范围内,寻找车辆的最大承重。
输入:3 3 5 1 2 7 3 1 2 6 4 3 2 4 2输出: 6
解释:从 1 到 3 可以有两条路,1→3 或 1→2→3,路程分别为 4 和 5,承重最大为 6 和 4,需要输出可承重的最大值,即 6。
题解
#include#include #include #include using namespace std; const int INF = 1e9; const int MAXN = 100005; struct Edge { int to; // 目标节点编号 int w; // 边权值,即承重能力 int d; // 路径长度 Edge(int _to, int _w, int _d) : to(_to), w(_w), d(_d) {} }; vector graph[MAXN]; // 图的邻接表表示方式 int n, m, h; int dis[MAXN]; // dis[i]表示到节点i的最大承重能力 int weight[MAXN]; // weight[i]表示从起点到i节点经过的边权最大值 void dijkstra() { priority_queue > pq; // 大根堆,存储节点编号和最大承重能力 memset(dis, -1, sizeof(dis)); // 初始时所有节点最大承重能力为-1 pq.push({INF, 1}); // 初始时路程限制为h,承重能力为INF dis[1] = INF; // 起点最大承重能力为INF weight[1] = INF; // 起点经过的边权最大值为INF while (!pq.empty()) { int u = pq.top().second; // 取出最大承重能力的节点 int d = pq.top().first; // 当前节点的最大承重能力 pq.pop(); // 弹出当前节点 if (d != dis[u]) continue; // 当前节点已经被更新过了,不用再次更新 for (int i = 0; i < graph[u].size(); i++) { // 遍历当前节点的所有相邻节点 Edge& e = graph[u][i]; if (e.d <= h) { // 路径长度小于等于h int w = min(dis[u], e.w); // 更新承重能力 if (w > dis[e.to]) { // 可以更新最大承重能力 dis[e.to] = w; weight[e.to] = e.w; pq.push({w, e.to}); } else if (w == dis[e.to]) { // 与当前路径承重能力相同,取较大的边权 weight[e.to] = max(weight[e.to], e.w); } } } if (u == n) { // 到达n节点,直接输出结果 cout << weight[n] << endl; return; } } cout << -1 << endl; // 无法到达n节点 } int main() { cin >> n >> m >> h; for (int i = 0; i < m; i++) { int u, v, w, d; cin >> u >> v >> w >> d; graph[u].push_back(Edge(v, w, d)); // 添加有向边 graph[v].push_back(Edge(u, w, d)); // 添加反向边,因为是无向图,所以需要正反两个方向都加上边 } dijkstra(); return 0; }