我想要多种方法来划分一个正整数组,使得数组左边部分的最大值大于或等于数组右边部分的最大值。
例如,
6 4 1 2 1
可分为:
[[6,4,1,2,1]] [[6][4,1,2,1]] [[6,4][1,2,1]] [[6,4,1][2,1]] [[6,4,1,2][1]] [[6][4,1][2,1]] [[6][4][1,2,1]] [[6][4][1,2][1]] [[6][4,1,2][1]] [[6,4,1][2][1]] [[6][4,1][2][1]] [[6,4][1,2][1]]
共有12种分区方式。
我尝试了一种递归方法,但由于超出时间限制而导致终止失败。此方法也不能始终提供正确的输出。
在另一种方法中,我采用了数组,按递减顺序对其进行排序,然后对于每个元素,我检查天气它位于原始数组的右侧,如果是,则将它的分区添加到其中&#39 ;之前的数字也是。
我想要一种方法来解决这个问题,任何实现或伪代码或只是一个想法来做到这一点都会很明显。
答案 0 :(得分:0)
我设计了一个简单的递归算法。我会尝试解释你的例子;
由于它是一个有效的分区,我们可以使用算法的递归部分。
concatenate([6],algorithm([4,1,2,1]))
现在分区
[[6][4,1,2,1]], [[6][4,1][2,1]], [[6][4,1][2,1]] [[6][4][1,2,1]] [[6][4][1,2][1]] [[6][4,1,2][1]]
在我们当前的解决方案集中。
检查[6,4]是否是分区的可能/有效部分。