小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原題(直接用棧解決
小q在週末的時候和他的小夥伴來到大城市逛街,一條步行街上有很多高樓,共有n座高樓排成一行。#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從第一棟一直走到了最後一棟,小q從來都沒有見到這麼多的樓,所以他想知道他在每棟樓的位置處能看到多少棟樓呢?(當前面的樓的高度大於等於後面的樓時,後面的樓將被擋住)
輸入描述:
輸入第一行將包含乙個數字n,代表樓的棟數,接下來的一行將包含n個數字wi(1<=i<=n),代表每一棟樓的高度。1<=n<=100000;
1<=wi<=100000;
輸出描述:
輸出一行,包含空格分割的n個數字vi,分別代表小q在第i棟樓時能看到的樓的數量。輸入例子1:
6輸出例子1:5 3 8 3 2 5
3 3 5 4 4 4例子說明1:
當小q處於位置3時,他可以向前看到位置2,1處的樓,向後看到位置4,6處的樓,加上第3棟樓,共可看到5棟樓。當小q處於位置4時,他可以向前看到位置3處的樓,向後看到位置5,6處的樓,加上第4棟樓,共可看到4棟樓。題解:用單調棧解決
由於業績優秀,公司給小q放了 n 天的假,身為工作狂的小q打算在在假期中工作、鍛鍊或者休息。他有個奇怪的習慣:不會連續兩天工作或鍛鍊。只有當公司營業時,小q才能去工作,只有當健身房營業時,小q才能去健身,小q一天只能幹一件事。給出假期中公司,健身房的營業情況,求小q最少需要休息幾天。#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;
}
輸入描述:
第一行乙個整數 轉存失敗輸出描述:重新上傳
取消 表示放假天數
第二行 n 個數 每個數為0或1,第 i 個數表示公司在第 i 天是否營業
第三行 n 個數 每個數為0或1,第 i 個數表示健身房在第 i 天是否營業
(1為營業 0為不營業)
乙個整數,表示小q休息的最少天數輸入例子1:
4輸出例子1:1 1 0 0
0 1 1 0
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])
小q在進行一場競技遊戲,這場遊戲的勝負關鍵就在於能否能爭奪一條長度為l的河道,即可以看作是[0,l]的一條數軸。#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;
}
這款競技遊戲當中有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輸出例子1:3 62 4
0 24 7
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 ...