2
帮我整理袜子!
我有一堆干净的袜子,想配对。不幸的是,我只能从堆的任何一端取袜子,而不能从中间取袜子。此外,我一次只能从配对中取出袜子。我的策略是先将桩分成一个或多个较小的桩。我认为一些例子将使这一点变得清楚。我将每只袜子表示为一个正整数(匹配的整数表示相等的袜子)。 如果最初的袜子是 1 2 3 3 2 1 那我就不用做任何分裂了 我可以先去除两只1袜子,再去除两只袜子,再去除2两只3袜子。 如果相反,最初的堆是 1 2 3 2 3 1 然后我必须先将其拆分,因为仅从末端将它们移除就无法配对所有袜子。一种可能是将其分成两堆 1 2 3 and 2 3 1 现在,我可以除去1袜子,离开2 3 and 2 3,然后是3袜子,离开2 and 2,最后是2袜子。 你的工作 给定最初的袜子堆,编写一个程序将其分成较小的堆,使我可以对袜子进行分类。您的程序应将堆分成尽可能少的堆(如果有多个最佳解决方案,则只需找到一个)。 输入将以列表,定界字符串或其他方便形式给出。它仅包含介于1和之间的一个整数,并且包含一个最大值n,每个整数恰好出现两次。 输出应包括输入列表,该输入列表分为任何较小的列表,以任何方便的形式给出。 例子 Input Sample Output 1 1 1 1 1 2 1 2 1; 2 …
30
code-golf