【发布时间】:2017-06-24 20:31:57
【问题描述】:
我想要多种方法来划分正整数数组,使得数组左侧的最大值大于或等于数组右侧的最大值。
例如,
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种分区方式。
我尝试了递归方法,但由于超出时间限制而终止。此外,这种方法并不总是提供正确的输出。
在另一种方法中,我采用数组,按降序对其进行排序,然后对于每个元素,我检查天气,它位于原始数组的右侧,如果确实如此,则将其分区添加到它之前的数字中。
我想要一种方法来解决这个问题,任何实现或伪代码或只是一个想法都可以做到这一点。
【问题讨论】:
-
您需要做的第一件事是选择合适的变量名称。
-
这里的失败是指它没有达到预期的时间限制。它应该花费更多的时间。正如标签所暗示的,我想降低它的时间复杂度。
-
那这个需要去Code Review
-
@Daemon 请不要在此处询问有关在线代码判断引擎的问题。任何人都不太可能从他们的测试用例中告诉你你失败的地方,因为这些通常不会被披露。即使您测试的是在本地环境中运行,您也可能错过了测试在线挑战中应用的一些边缘案例。要有创意并尝试找到它们。此外,从长远来看,这些问题可能没有任何价值,除了在在线比赛中作弊,什么都学不到。
-
“此外,这种方法并不总是提供正确的输出。”但是“我的代码正在做它应该做的事情,它表现得很好”这两种说法都不正确。是哪个?
标签: c++ arrays performance dynamic time-complexity