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; } } } }