演算法 筆桿與筆帽配對問題

2021-09-02 20:01:42 字數 425 閱讀 2095

題目描述:有n個筆,由筆桿和筆帽組成,每根筆的筆桿和筆帽都不同,現將筆桿和筆帽全部拆散,筆桿與筆桿不能比較,筆帽與筆帽也不能比較,筆桿和筆帽可以進行配對,每次配對都可以知道筆桿對應的筆帽大了或是小了或是剛剛好。如何將這n個筆桿和n個筆帽重新全部配對。

解題思路:用n^2的複雜度可以將n個筆桿和n個筆帽全部試一遍,當然這不是乙個比較好的方法,猜測問題應該可以用nlogn的複雜度求解。常用的nlogn求解基本都是用到分治的思想。

題目解答:在筆桿中先取出一支筆桿,遍歷所有筆帽,把小的筆帽放在左邊,大的筆帽放在右邊,合適的筆帽取出。再對合適的筆帽遍歷所有筆桿,需要小筆帽的放在左邊,需要大筆帽的放在右邊。我們可以得出結論:小筆帽的個數和需求小筆帽筆桿的個數相等,大筆帽的個數和需求大筆帽筆桿的個數相等。再用相同的辦法把小筆帽和需求小筆帽筆桿進行操作,大筆帽和需求大筆帽筆桿進行操作,最終把所有筆桿和筆帽復原。

if與else的配對問題

下面幾個程式 程式1 include int main void 程式2 include int main void 程式3 include int main void getchar 程式4 include int main void 編譯不通過,expected primary expressi...

配對序列生成演算法實現與分析

配對演算法實現與分析 這個也是做連連看時所寫的演算法,為了保持通用原則,這裡一律採用陣列實現 基本思路 1.先將所有元素填充到陣列裡,並把出現次數放到 ecount裡 最後出現的位址放到 lastaddr中。2.檢視ecount 此時陣列裡的各種元素出現的次數有雙有單。3.找出兩個ecount x1...

C C 演算法分析與設計 貪心(整數配對)

江鳥想到乙個有趣的問題 給你n個正整數,你可以將這n個整數按兩個一組的方式成對劃分,當然其中的元素也可以不和其他元素配對劃分。現在的問題是,讓劃分為一對的元素的乘積與未配對的元素相加求和,並且讓和最大。比如 考慮這個集合,如果我們讓 分別成一對,那麼得到的和為 1 4 0 3 2 5 15,當然這不...