【发布时间】:2019-05-04 03:49:27
【问题描述】:
给定一个整数向量,我需要找出向量中是否存在三个元素a, b, c,即a < b< c 和v[a] < v[c] < v[b]。
到目前为止,我的方法如下。首先,我忘记了 a 并为向量中的每个数字找到位于该元素左侧的 v[i] 的最小值。我将此信息存储在另一个数组中。然后我应用归并排序,当我到达两个元素交叉的点时,我测试右元素是否可以是 c 而左元素是 b。但是,我还需要测试与正确元素交叉的其他元素是否可能是 b,这增加了太多时间复杂度。我最多需要它是线性的。 你能给我一个关于如何进行的提示吗?
编辑:请原谅,之前的标题不太好。我需要的是 a
EDIT2: 限制:我不能使用数据结构,除了向量。而且算法必须基于分治法。
【问题讨论】:
-
这样...?请发布您解决此问题的尝试。
-
如果你使用的是 C++,你可以通过使用
std::find_if两次来解决这个问题。 -
我不太确定。条件是什么?
标签: algorithm vector data-structures divide-and-conquer