4.12字节跳动笔试,只A了一道。。。
贴一下第一题和第四题的代码吧,第一题AC,第四题暴力,过了71%;第二题第三题没啥思路。
第一题
#include<bits/stdc++.h>
using namespace std;
/*
2
6
3 7 1 4 1 2
3 7 3 6 3 2
5
1 1 1 1 1
1 2 1 3 1
*/
bool go(const vector<int>& array1, const vector<int>& array2, const int& n) {
vector<int> diff(n);
int diff_ = 0;
int flag = 0;
for (int i = 0; i < n; i++) {
diff[i] = array1[i] - array2[i];
if (diff[i] != 0) {
if (!flag) {
flag = 1;
diff_ = diff[i];
}
else if (diff[i] != diff_) return false;
else if (diff[i] != diff[i - 1]) return false;
}
}
return true;
}
int main() {
int t; cin >> t;
while (t--) {
int n; cin >> n;
vector<int> array1(n);
vector<int> array2(n);
for (int i = 0; i < n; i++) {
cin>>array1[i];
}
for (int i = 0; i < n; i++) {
cin >> array2[i];
}
if (go(array1, array2, n)) cout << "YES"<<endl;
else cout << "NO"<<endl;
}
} 第四题
#include<bits/stdc++.h>
using namespace std;
/*
3
4
1 4 3 3
5
8 2 2 4 6
6
5 8 1 3 2 9
*/
int main() {
int t; cin >> t;
while (t--) {
int n; cin >> n;
vector<int> house(n);
vector<int> ans(n);
int max_idx = 0;
for (int i = 0; i < n; i++)
{
cin >> house[i];
if (house[i] > house[max_idx]) max_idx = i;
}
for (int i = 0; i < n; i++)
{
if (i == max_idx) {
ans[i] = n - 1;
continue;
}
int ans_ = 0;
int left = i - 1, right = i + 1;
while (left >= 0 && house[left] <= house[i]) {
ans_++;
left--;
}
while (right <= n-1 && house[right] <= house[i]) {
ans_++;
right++;
}
ans[i] = ans_;
}
for (int i = 0; i < n; i++)
{
if(i != n - 1) cout << ans[i] << " ";
else {
cout << ans[i] << endl;
}
}
}
}
查看12道真题和解析