之前我定义了粉碎数组的过程
迷恋我们从左到右读取数组。如果在某一点上我们连续遇到两个相同的元素,则将第一个删除,将第二个加倍。
例如,这是粉碎以下数组的过程
[5,2,2,4]
^
[5,2,2,4]
^
[5,2,2,4]
^
[5,4,4]
^
[5,4,4]
^
[5,8]
^
请注意,同一元素可以折叠多次。在该示例中,2,2,4
一次折叠就崩溃了8
。
现在,粉碎阵列很容易,但要取消粉碎却很困难。您的任务是将一个正整数数组作为输入,并输出在重复压碎后可以形成输入的最大数组。例如,阵列[4]
通过压碎形成,而压碎[2,2]
又通过压碎形成[1,1,1,1]
。由于我们不能有非整数值,[1,1,1,1]
因此无法进一步展开,这就是我们的答案。
您将永远不会0
在输入数组中收到a ,因为此类数组可以无限扩展。您也永远不会收到两个奇数彼此相邻的案件,这些案件不可能是压碎的结果。
这是代码高尔夫,因此答案将以其来源的大小(以字节为单位)进行评分,而字节越少越好。
在开始回答之前,我只想说这个挑战比看起来要困难得多。在进行过程中检查您的直觉,并确保您的答案通过了所有测试用例。
测试用例
[] -> []
[5] -> [5]
[6] -> [3,3]
[8] -> [1,1,1,1,1,1,1,1]
[4,8] -> [1,1,1,1,1,1,1,1,1,1,2]
[2,8] -> [1, 1, 1, 1, 2, 1, 1, 1, 1]
[4,4] -> [1,1,1,1,1,1,1,1]
[1,>1,1,1,1,1,1,1,1,1,2]
,[2,>1,1,1,1,1,1,1,1,2]
,[2,1,>1,1,1,1,1,1,1,2]
,[2,2,>1,1,1,1,1,1,2]
,[2,2,1,>1,1,1,1,1,2]
,[2,2,2,>1,1,1,1,2]
,[2,2,2,1,>1,1,1,2]
,[2,2,2,2,>1,1,2]
,[2,2,2,2,1,>1,2]
,[2,2,2,2,2,>2]
,[2,2,2,2,4>]
,第二遍:[2,>2,2,2,4]
,[4,>2,2,4]
,[4,2,>2,4]
,[4,4,>4]
,[4,8>]
。希望这可以清除它。如果您想看一些代码,可以参考前面的问题,该问题的答案实现了粉碎功能。
[4, 4]
应该删除测试用例,因为我们在拉伸=>压碎序列之后永远无法获得该数组,因为这将以[8]
[1,1,1,1,1,1,1,1,1,1,2]
生产[4, 8]
而不是[8, 4]
?这应该是[1,>1,1,1,1,1,1,1,1,1,2]
,[2,1,>1,1,1,1,1,1,1,2]
,[2,>2,1,1,1,1,1,1,2]
,[4,1,>1,1,1,1,1,2]
,[4,2,1,>1,1,1,2]
,[4,2,>2,1,1,2]
,[4,>4,1,1,2]
,[8,1,>1,2]
,[8,2,>2]
,[8,4]
?