algorithm - 找到随机数组中的最大增量

标签 algorithm

假设我有一个随机实数数组,我如何得到索引对 (i, j)其中 j<i

maximise (a[j] - a[i])O(n ln(n))时间

n ln n 建议递归。所以我在考虑对数组进行 n ln n 排序。但是排序数组的最小值和混合可能不满足 j<i

区别a[j]-a[i]取决于所有 i , j 所以扫描所有可能的排列是 O(n^2) .有人对我如何划分问题空间有什么建议吗?

最佳答案

如果我没理解错的话,你想找max(a[j] - a[i])在所有对中(i, j)其中 j < i .

你可以在 O(n) 内完成,没有太大问题。

对于每个索引 i , 最大化 a[j] - a[i]我们需要找到 max(a[j]) 的表达式间隔 [0 .. i - 1] .因此,让我们从左向右移动(增加 i )并保持当前最大值 a[j] .

int maxa = a[0];
for (int i = 1; i < n; ++i) {
    int current = maxa - a[i];
    if (current > best) {
        best = current;
    }
    maxa = max(maxa, a[i]);
}

关于algorithm - 找到随机数组中的最大增量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3852449/

相关文章:

algorithm - 根据密度在网格上分配点

algorithm - 树中最小-最大的正确实现

algorithm - 高效的短语匹配算法

algorithm - 确定集合中的所有项目是否符合既定标准

c# - 一个简单的代码顺序

java - 使用 Android 音频和方向传感器的机械安全破解

algorithm - DAG 和图形 : Simple path from s to t that goes via as many colored vertices as possible

string - Rabin karp字符串匹配算法复杂度

在数组中查找具有给定差异的 2 个项目的算法

c# - 使用 C# 将整数集转换为范围