昨天我问这个约洗牌洗牌的问题。似乎昨天的问题有点太难了,所以这个问题是相关但容易得多的任务。
今天,您被要求确定排列是否实际上是浅滩混洗。我们对浅滩混洗的定义是根据我们上一个问题改编的:
洗牌的第一部分是鸿沟。在分隔分区中,一副纸牌一分为二。这两个小节必须是连续的,互斥的和详尽的。在现实世界中,要使您的分区尽可能地接近,但是在此挑战中,这不是要考虑的问题,所有退化的分区(一个分区为空)都是同等考虑的。
分区后,将卡拼接在一起,以使卡在它们所属的分区内保持其相对顺序。例如,如果卡片A在卡组中的卡片B之前,并且卡片A和B在同一分区中,则在最终结果中,卡片A必须在卡片B之前,即使它们之间的卡片数量增加了。如果A和B在不同的分区中,则它们在最终结果中可以采用任何顺序,而不管它们的开始顺序如何。
然后,可以将每个浅滩混洗视为原始纸牌的排列。例如排列
1,2,3 -> 1,3,2
是浅滩洗牌。如果你像这样分割甲板
1, 2 | 3
我们看到其中的每张卡1,3,2
与其分区中的每张其他卡具有相同的相对顺序。 2
仍在1
。
另一方面,以下排列不是浅滩混洗。
1,2,3 -> 3,2,1
我们可以看到这一点,因为对于所有两个(非平凡的)分区
1, 2 | 3
1 | 2, 3
有一对卡不保持其相对顺序。在第一个分区1
,并2
改变他们的排序,而在第二个分区2
,并3
改变它们的顺序。
任务
通过任何合理的方法给定排列,确定它是否代表有效的浅滩混洗。您应该输出两个不同的常数值,一个用于“是,这是浅滩混洗”,另一个用于“不,这不是浅滩混洗”。
这是代码高尔夫球,因此答案将以字节计分,而字节数越少越好。
测试用例
1,3,2 -> True
3,2,1 -> False
3,1,2,4 -> True
2,3,4,1 -> True
4,3,2,1 -> False
1,2,3,4,5 -> True
1,2,5,4,3 -> False
5,1,4,2,3 -> False
3,1,4,2,5 -> True
2,3,6,1,4,5 -> False
[3,1,4,2,5]
。
[2,3,6,1,4,5]
。
[0, ..., n-1]
而不是的排列[1, ..., n]
作为输入吗?
0
对于falsy,但是对于真伪而言,在其中有任何整数[1, +∞)
?