题目描述:有n个笔,由笔杆和笔帽组成,每根笔的笔杆和笔帽都不同,现将笔杆和笔帽全部拆散,笔杆与笔杆不能比较,笔帽与笔帽也不能比较,笔杆和笔帽可以进行配对,每次配对都可以知道笔杆对应的笔帽大了或是小了或是刚刚好。如何将这n个笔杆和n个笔帽重新全部配对。
解题思路:用n^2的复杂度可以将n个笔杆和n个笔帽全部试一遍,当然这不是一个比较好的方法,猜测问题应该可以用nlogn的复杂度求解。常用的nlogn求解基本都是用到分治的思想。
题目解答:在笔杆中先取出一支笔杆,遍历所有笔帽,把小的笔帽放在左边,大的笔帽放在右边,合适的笔帽取出。再对合适的笔帽遍历所有笔杆,需要小笔帽的放在左边,需要大笔帽的放在右边。我们可以得出结论:小笔帽的个数和需求小笔帽笔杆的个数相等,大笔帽的个数和需求大笔帽笔杆的个数相等。再用相同的办法把小笔帽和需求小笔帽笔杆进行操作,大笔帽和需求大笔帽笔杆进行操作,最终把所有笔杆和笔帽复原。