当前位置: 首页 > 面试经验 >

3.25美团前端笔试

优质
小牛编辑
161浏览
2023-03-28

3.25美团前端笔试

选择题有点难。。。

算法100 100

希望能过这个笔试吧

1.直接栈模拟


#include <bits/stdc++.h>
using namespace std;

typedef pair<int, int> pii;
typedef long long ll;
#define rep(i, start, end) for (int i = start; i <= end; i++)
#define lop(i, start, end) for (int i = start; i >= end; i--)
int main() {
int T;
cin >> T;
rep(i, 1, T) {
int n;
cin >> n;
vector<int> x, y, st;
rep(j, 1, n) {
int tmp;
cin >> tmp;
x.push_back(tmp);
}
rep(j, 1, n) {
int tmp;
cin >> tmp;
y.push_back(tmp);
}

int iy = 0;
rep(k, 0, n - 1) { // 考虑x的每一辆车
st.push_back(x[k]);
while (!st.empty() && st.back() == y[iy]) { // 符合就快出去
st.pop_back(), iy++;
}
}
if (iy == n) {
cout << "Yes" << endl;
} else {
cout << "No" << endl;
}
}
return 0;
}

2.直接贪心查找就行,没搞懂

可能有用的优化手段:注意到查询q非常大,有可能直接超了,先统计全部的和

排序+二分,从尽可能大的重量开始装


#include <bits/stdc++.h>
using namespace std;

typedef pair<int, int> pii;
typedef long long ll;
#define rep(i, start, end) for (int i = start; i <= end; i++)
#define lop(i, start, end) for (int i = start; i >= end; i--)
int main() {
int n, m, all = 0;
vector<int> v;
cin >> n >> m;
rep(i, 1, n) {
int tmp;
cin >> tmp;
v.push_back(tmp * tmp);
all += tmp * tmp;
}
sort(v.begin(), v.end());
rep(i, 1, m) { // 对于每一次询问
ll q, res = 0;
cin >> q;
if (q >= all) {
cout << n << endl;
continue;
}
int idx = upper_bound(v.begin(), v.end(), q) - v.begin();
if (idx == n) {
idx--;
}
for (; idx >= 0 && q > 0; idx--) {
if (q - v[idx] >= 0) {
res++;
q -= v[idx];
}
}
cout << res << endl;
}
return 0;
}

 类似资料: