【牛客网】字节跳动2019春招研发部分编程题汇总
1-萬(wàn)萬(wàn)沒(méi)想到之聰明的編輯
解題思路
此題的編輯規(guī)則如下
從題目可以看出,本題的規(guī)則實(shí)際上只有兩個(gè),1和2,1是指連續(xù)3個(gè)同樣的字母,則去掉一個(gè);
2是指兩對(duì)一樣的字母,則去掉第二對(duì)的一個(gè)字母。第3條規(guī)則告訴我們規(guī)則是從左往右匹配,因此每次我們?nèi)サ舻淖帜付紝⑹切纬蛇@種規(guī)則的最后一個(gè)字母。
所以對(duì)給定的字符串,先對(duì)其執(zhí)行規(guī)則1,再執(zhí)行規(guī)則2。
代碼
#include<iostream> #include<string> using namespace std; int main() {int n;cin >> n;while (n--) {string s;cin >> s;//規(guī)則1for (int i = 2; i < s.length(); i++) {if (s[i] == s[i - 1] && s[i - 1] == s[i - 2]) {s.erase(i, 1);//滿(mǎn)足規(guī)則1,刪除一個(gè)該字符i--;if (s.length() < 3) break;}}//規(guī)則2for (int i = 3; i < s.length(); i++) {if (s[i] == s[i - 1] && s[i - 2] == s[i - 3]) {s.erase(i, 1);//滿(mǎn)足規(guī)則2,刪除一個(gè)該字符i--;if (s.length() < 3)break;}}cout << s << endl;} }2-萬(wàn)萬(wàn)沒(méi)想到之抓捕孔連順
解題思路
參考自該博客
題目的意思,就是給定一系列已排序的數(shù),從這些數(shù)中任選三個(gè)數(shù),使其滿(mǎn)足最大和最小的數(shù)差值小于等于給定值。
我覺(jué)得下面該blog的思想有些不對(duì),如果打印出具體的組合將是錯(cuò)誤的結(jié)果,但是由于其計(jì)算組合數(shù)的數(shù)目是對(duì)的,因此產(chǎn)生了正確的結(jié)果;
例如下面的輸入
對(duì)于blog中的思想,其將產(chǎn)生的組合分別為:
#此時(shí)left=0,right=2 1 2 3 #此時(shí)left=0,right=3 1 2 3 1 2 4 1 3 4可以看出組合數(shù)量是對(duì)的,但真正的組合并沒(méi)有求對(duì),在right=3時(shí),發(fā)生了重復(fù),多了一組,而這組應(yīng)該為2 3 4
代碼
#include<iostream> #include<vector> using namespace std; long long C(long long n) {//計(jì)算Cn2的值return (n - 1) * n / 2; } int main() {int N,D;while (cin >> N >> D) {vector<int> arr(N);for (int i = 0; i < N; i++) {cin >> arr[i];}//固定p_left,移動(dòng)p_right,如果滿(mǎn)足兩者之差<=D,則從[p_left+1,p_right]中選擇兩個(gè),即為存在的個(gè)數(shù)long p_left = 0,p_right =2,count = 0;for (; p_right < N;p_right++) {while (arr[p_right] - arr[p_left] > D) {p_left++;}count += C(p_right - p_left);}cout<<count%99997867;}return 0; }4-特征提取
解題思路
使用map<pair<int, int>, pair<int, int>>;//key-特征(x,y)-value-(起點(diǎn)幀的序號(hào),特征計(jì)數(shù))
遍歷每個(gè)幀,加入新特征或者更新已存在特征的幀起點(diǎn),特征計(jì)數(shù)
1、如果該特征不存在,則添加該特征到map
2、如果該特征存在
通過(guò)判斷(當(dāng)前幀號(hào)==特征起點(diǎn)幀號(hào)+特征計(jì)數(shù)),相等表示連續(xù)
(1)如果該特征是連續(xù)的,特征計(jì)數(shù)+1;
(2)如果該特征是不連續(xù)的,更新特征起點(diǎn)為當(dāng)前幀號(hào),特征計(jì)數(shù)+1;
參考自題解
代碼
#include<iostream> #include<map> #include<algorithm> using namespace std; int main() {int n;cin >> n;//樣例數(shù)for (int k = 0; k < n; k++) {int m;//幀數(shù)cin >> m;map<pair<int, int>, pair<int, int>> mp;int maxLen = 1;for (int i = 0; i < m; i++) {int t;//本幀特征數(shù)cin >> t;for (int j = 0; j < t; j++) {int x, y;pair<int, int> p;cin >> p.first >> p.second;//判斷該幀是否存在//不存在if (mp.find(p) == mp.end()) {//原本無(wú)該特征,添加該特征mp[p].first = i;//該幀的起點(diǎn)幀mp[p].second = 1;//該特征初始計(jì)數(shù)為1}//存在else {//連續(xù)if (i == mp[p].second + mp[p].first) {mp[p].second++;maxLen = max(maxLen, mp[p].second);}//不連續(xù)else {mp[p].first = i;//更新起始幀號(hào)mp[p].second = 1;//更新計(jì)數(shù)}}}}cout << maxLen << endl;}return 0; }總結(jié)
以上是生活随笔為你收集整理的【牛客网】字节跳动2019春招研发部分编程题汇总的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: ubuntu 监视显卡使用情况
- 下一篇: 数据挖掘有哪些常用的方法