騰訊2020校園招聘 後台 程式設計題

2021-10-04 22:30:41 字數 4485 閱讀 5410

小q想要給他的朋友傳送乙個神秘字串,但是他發現字串的過於長了,於是小q發明了一種壓縮演算法對字串中重複的部分進行了壓縮,對於字串中連續的m個相同字串s將會壓縮為[m|s](m為乙個整數且1<=m<=100),例如字串abcabcabc將會被壓縮為[3|abc],現在小q的同學收到了小q傳送過來的字串,你能幫助他進行解壓縮麼? 

輸入描述:

輸入第一行包含乙個字串s,代表壓縮後的字串。

s的長度<=1000;

s僅包含大寫字母、[、]、|;

解壓後的字串長度不超過100000;

壓縮遞迴層數不超過10層;

輸出描述:

輸出乙個字串,代表解壓後的字串。
輸入例子1:

hg[3|b[2|ca]]f
輸出例子1:

hgbcacabcacabcacaf
例子說明1:

hg[3|b[2|ca]]f−>hg[3|bcaca]f−>hgbcacabcacabcacaf
題解:leetcode原題(直接用棧解決

#include using namespace std;

int string_to_int(string s)

return num;

}int main() else

foo += st.top();

st.pop();

}while (!st.empty())

bar += st.top();

st.pop();

}reverse(foo.begin(), foo.end());

reverse(bar.begin(), bar.end());

int tt = string_to_int(bar);

while (tt--) }}

} string ret = "";

while (!st.empty())

reverse(ret.begin(), ret.end());

cout << ret << "\n";

return 0;

}

小q在週末的時候和他的小夥伴來到大城市逛街,一條步行街上有很多高樓,共有n座高樓排成一行。

小q從第一棟一直走到了最後一棟,小q從來都沒有見到這麼多的樓,所以他想知道他在每棟樓的位置處能看到多少棟樓呢?(當前面的樓的高度大於等於後面的樓時,後面的樓將被擋住) 

輸入描述:

輸入第一行將包含乙個數字n,代表樓的棟數,接下來的一行將包含n個數字wi(1<=i<=n),代表每一棟樓的高度。

1<=n<=100000;

1<=wi<=100000; 

輸出描述:

輸出一行,包含空格分割的n個數字vi,分別代表小q在第i棟樓時能看到的樓的數量。
輸入例子1:

6

5 3 8 3 2 5

輸出例子1:

3 3 5 4 4 4
例子說明1:

當小q處於位置3時,他可以向前看到位置2,1處的樓,向後看到位置4,6處的樓,加上第3棟樓,共可看到5棟樓。當小q處於位置4時,他可以向前看到位置3處的樓,向後看到位置5,6處的樓,加上第4棟樓,共可看到4棟樓。
題解:用單調棧解決

#include using namespace std;

int main()

stackst;

vectorl(n, 0), r(n, 0); // 分別表示向左和向右能看到多少棟房子

for (int i = 1; i < n; i++) else

st.push(i - 1);

}l[i] = (int)st.size();

} st = stack();

for (int i = n - 2; i >= 0; i--) else

st.push(i + 1);

}r[i] = (int)st.size();

} for (int i = 0; i < n; i++)

cout << endl;

return 0;

}

由於業績優秀,公司給小q放了 n 天的假,身為工作狂的小q打算在在假期中工作、鍛鍊或者休息。他有個奇怪的習慣:不會連續兩天工作或鍛鍊。只有當公司營業時,小q才能去工作,只有當健身房營業時,小q才能去健身,小q一天只能幹一件事。給出假期中公司,健身房的營業情況,求小q最少需要休息幾天。

輸入描述:

第一行乙個整數 轉存失敗

重新上傳

取消 表示放假天數

第二行 n 個數 每個數為0或1,第 i 個數表示公司在第 i 天是否營業

第三行 n 個數 每個數為0或1,第 i 個數表示健身房在第 i 天是否營業

(1為營業 0為不營業)

輸出描述:

乙個整數,表示小q休息的最少天數
輸入例子1:

4

1 1 0 0

0 1 1 0

輸出例子1:

2
例子說明1:

小q可以在第一天工作,第二天或第三天健身,小q最少休息2天
題解:假設dp[i][1]表示第i天工作能夠休息的最少天數,dp[i][2]表示第i天健身能夠休息的最少天數,dp[i][3]表示第i天休息能夠休息的最少天數;

dp[i][1] = min(dp[i - 1][2], dp[i - 1][3])

dp[i][2] = min(dp[i - 1][1], dp[i - 1][3])

dp[i][3] = min(dp[i - 1][1], dp[i - 1][2], dp[i - 1][3])

#include using namespace std;

int dp[100001][4];

int main()

for (int i = 0; i < n; i++)

for (int i = 0; i < n; i++)

} dp[0][3] = 1;

if (a[0]) dp[0][1] = 0;

if (b[0]) dp[0][2] = 0;

for (int i = 1; i < n; i++)

if (b[i])

dp[i][3] = min(dp[i - 1][1], min(dp[i - 1][2], dp[i - 1][3])) + 1;

} cout << min(dp[n - 1][1], min(dp[n - 1][2], dp[n - 1][3])) << "\n";

return 0;

}

小q在進行一場競技遊戲,這場遊戲的勝負關鍵就在於能否能爭奪一條長度為l的河道,即可以看作是[0,l]的一條數軸。

這款競技遊戲當中有n個可以提供視野的道具−真視守衛,第i個真視守衛能夠覆蓋區間[xi,yi]。現在小q想知道至少用幾個真視守衛就可以覆蓋整段河道。 

輸入描述:

輸入包括n+1行。

第一行包括兩個正整數n和l(1<=n<=105,1<=l<=109)

接下來的n行,每行兩個正整數xi,yi(0<=xi<=yi<=109),表示第i個真視守衛覆蓋的區間。 

輸出描述:

乙個整數,表示最少需要的真視守衛數量, 如果無解, 輸出-1。
輸入例子1:

4 6

3 62 4

0 24 7

輸出例子1:

3
題解:典型的區間覆蓋問題(

#include using namespace std;

struct sec;

int main()

sort(vec.begin(), vec.end(), [&](sec x, sec y)

return x.l < y.l;

});int r = vec[0].r;

int i = 1;

int tt = 1;

while (r < l && i < n)

} else

break;}}

if (clen != 0)

} if (r < l) else

return 0;

}

騰訊2020校園招聘 後台 程式設計題

a 壓縮演算法 做法 遞迴處理每個匹配的 中的單詞,再拼接起來。b 逛街 做法 假設現在在i樓,一定可以看到i 1和i 1的樓,i 往左看是形成的序列是乙個單調增的序列,用單調棧可以求出離當前樓最近,而且高度還要高於當前樓的樓。c 逆序對 做法 把序列的歸併樹畫出來,每一層是由許多段構成的。而每一層...

騰訊2020校園招聘 後台

小q在週末的時候和他的小夥伴來到大城市逛街,一條步行街上有很多高樓,共有n座高樓排成一行。小q從第一棟一直走到了最後一棟,小q從來都沒有見到這麼多的樓,所以他想知道他在每棟樓的位置處能看到多少棟樓呢?當前面的樓的高度大於等於後面的樓時,後面的樓將被擋住 輸入描述 輸入第一行將包含乙個數字n,代表樓的...

騰訊2020校園招聘 後台(3)

乙個簡單的動態規劃,注釋寫的很明白了 var n parseint readline var p1 newarray n var p2 newarray n var line readline var lines line.split for let i 0 i n i line readline ...