牛客程式設計巔峰賽S1 9

2021-10-23 11:10:38 字數 1465 閱讀 2471

a. 牛牛的字元反轉

題目描述:

牛牛酷愛迴圈右移操作,但是牛牛的電腦暫存器壞掉了,無法實現正常的迴圈右移操作,只能實現區間反轉操作,現在牛牛有乙個長度為n的字串,他想進行迴圈右移k位的操作,你能告訴牛牛,他最少對這個字串進行幾次區間反轉操作能實現迴圈右移k位呢。反轉操作指字串某一區間[l,r]內的字元反轉,例如「123456」,區間[3,5]進行反轉字串變為「125436」。假設字串每一位都不同。給定乙個字串長度n和迴圈右移次數k,求最少反轉次數。

思路: 找規律.

程式:

class solution 

};

b. 牛牛的木板

題目描述:

牛牛從牛畢那裡拿了一根長度為n的白木板,木板被等分成了n段(沒有被切割,只是虛擬劃分成了n段),其中有些段被牛畢用顏料染成了黑色。

牛牛非常不喜歡黑色,它找來了一桶清洗劑決定對木板進行清洗,但是牛牛發現自己的清洗劑最多只能清洗m段。

清洗完後,牛牛會把木板鋸成純色的幾段。例如假設木板是 (黑黑黑白白白白黑黑黑 ),就會被鋸成(黑黑黑)(白白白白)(黑黑黑)三段。

牛牛想知道,它足夠聰明地清洗木板,能獲得的純白色木板的最大長度是多少。

給定n,m兩個整數

和乙個長度為n的陣列a,為1表示白色,為0表示黑色

一行乙個數字表示能獲得的純白色木板的最大長度是多少。

思路:雙指標, 為每個r找到合適的l.

程式:

class solution 

ans = max(ans, r - l + 1);

}return ans;

}};

c. 中序序列

題目描述:

給定一棵有n個結點的二叉樹的先序遍歷與後序遍歷序列,求其中序遍歷序列。 

若某節點只有乙個子結點,則此處將其看作左兒子結點.

程式:

class solution 

void helper(vector& pre, int l, int r, vector& suf, int ll, int rr) else

int pos = ll;

while (suf[pos] != tmp && pos < rr) pos++;

// cout << l + 1 << " " << l + 1 + pos - ll << " " << ll << " " << pos << endl;

// cout << l + 2 + pos - ll << " " << r << " " << pos + 1 << " " << rr - 1 << endl;

helper(pre, l + 1, l + 1 + pos - ll, suf, ll, pos);

ans.push_back(pre[l]);

helper(pre, l + 2 + pos - ll, r, suf, pos + 1, rr - 1);

}};

牛客程式設計巔峰賽S1第12場

題目描述 給你乙個含有n個元素的陣列arr i 請你告訴牛牛這個陣列的中位數大還是平均數大,如果中位數更大輸出1,如果平均數更大輸出 1,如果中位數和平均數相等輸出0 示例1輸入 1,3,4 輸出說明 中位數3,平均數約等於2.67,所以輸出1 示例2輸入 7,4,8,11 輸出說明 中位數7.5,...

牛客程式設計巔峰賽S2第4場

又沒中獎 題目描述 牛牛最近很喜歡擲硬幣,由於他今天很無聊,所以他在家擲了n次硬幣,如果這n次硬幣全部朝上或者全部朝下牛牛就很開心,請問牛牛開心的概率是多少。每次擲硬幣朝上的概率與朝下的概率相同 示例1輸入複製1 返回值複製 1.00 說明概率為1,四捨五入保留兩位小數的字串為 1.00 示例2輸入...

牛客程式設計巔峰賽S2第8場

牛牛想把乙個數拆成兩個不相等的正整數之和,他想知道一共有多少種拆法,只不過他不知道該如何解決這個問題,所以他想請你幫忙。給定乙個數n,返回將這個數n拆成兩個不相等的正整數之和一共有多少種拆法。注 3 1 2和3 2 1視為同一種拆法 輸入返回值class solution 題目描述牛牛有現在有n個物...