【发布时间】:2020-12-16 13:23:19
【问题描述】:
我正在寻找一种快速算法(或任何提示)来执行此操作;
- 形式上,对于数组的每个元素ai,找到索引j
- j > 我
- aij
- j - i 是最小值
这是一个示例和 O(n^2) 实现
std::vector<double> v = { 3, 1.5, 4, 2, 5 };
std::vector<int> out(v.size());
for (int i = 0; i < v.size(); i++)
{
out[i] = -1;
for (int j = i + 1; j < v.size(); j++)
{
if (v[j] > v[i])
{
out[i] = j;
break;
}
}
}
for (int i : out) std::cout << i << ' '; // => 2 2 4 4 -1
【问题讨论】:
-
除非你知道数组是有序的,否则我认为
O(N^2)是你能做到的最好的吗? -
我相信你想做的和this一样? Modified implementation.