考虑有一个数组a
- 我们需要找到a的最大前缀,这样它就可以了。
长度m
的数组b
被称为好的,如果你能得到一个非递减数组c
(c1 ≤ c2 ≤ ⋯ ≤ cm),重复以下操作 m 次(最初,选择 b
的第一个或最后一个元素,将其从 b
中删除,并将其附加到数组末尾c
)。
我只能暴力破解,但是有什么有效的算法吗?
最佳答案
证明(或者至少说服自己)一个好的数组不可能有局部最小值。这意味着好的数组必须是单峰的(单峰数组显然是好的)。换句话说,您要查找的前缀由一个非递减的腿组成,后跟一个非递增的腿(当然两者都可以为空)。
这样的前缀可以通过简单的线性扫描找到。
我希望这足以让您开始。
关于algorithm - 给定属性的最大前缀,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62957450/