【发布时间】:2017-11-18 21:53:48
【问题描述】:
假设我们有一个给定长度的整数序列n。我们想删除一些元素(可能没有),以便序列在结果中轮流增加和减少。这意味着,每个元素都应该具有比自身更大或都小于自身的相邻元素。
例如1 3 2 7 6 和5 1 4 2 10 都是依次递增和递减的序列。
我们想删除一些元素来以这种方式转换我们的序列,但我们也想最大化剩余元素的总和。因此,例如,从序列2 18 6 7 8 2 10 中删除6 并使其成为2 18 7 8 2 10。
我正在寻找该问题的有效解决方案。上面的示例表明,最天真的贪心算法(删除破坏序列的每个第一个元素)将不起作用 - 它会删除 7 而不是 6,这不会最大化剩余元素的总和。
任何想法如何有效地解决这个问题(可能是O(n) or O(n log n))和正确的?
【问题讨论】:
-
那么在“1 3 2 7 6”中,数字 3 有一个更大的邻居和一个更小的邻居吗?你的例子看起来像你的意思是“要么更大要么都更小”。