java - 在充满随机数的数组中找到最大的增量

标签 java algorithm time-complexity

例如,给定一个数组 [3,5,8,10,6,12,4]。你要找到两对元素 i 和 j 之间最大可能的增加,其中 j > i。

在上述情况下,答案将返回 9 -> 12 - 3 = 9。

所以我想到了一个明显的解决方案,即 O(N^2)。 这是我的代码

public class Max {

    public static void main(String[] args) {

        int[] array = {3,5,8,10,6,12,4};

        System.out.println(getMax(array));


    }


    public static int getMax(int [] arr)
    {
        int maxVal = 0;

        for(int i = arr.length-1; i>0; i--)
        {
            for(int j = 0; j<i; j++)
            {
                if(arr[i]-arr[j] > maxVal)
                {

                    maxVal = arr[i] - arr[j];
                }
            }

        }

        return maxVal;
    }

}

但是我想知道是否有可能改进 O(NlogN) 的解决方案,因为如果我们使用分而治之的方法呢?有人可以指导我吗?

更新 我根本找不到最大值和最小值,因为 j 的索引必须大于索引 i。如果我只是简单地寻找最大值和最小值,那么我可能会遇到索引 i 大于索引 j 的情况,这是不允许的。

最佳答案

保持最小值并相应地更新:

min = array[0]
max_diff = 0
for each element e, starting from the second:
  if e - min > max_diff:
    max_diff = e - min
  if e < min:
    min = e

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

相关文章:

java - Google Drive Android API - 无效的 DriveId 和 Null ResourceId

java - 使用Gson在Android中@SerializedName注解的基本目的是什么

java - oncreate()中可以播放soundPool吗?

c# - 如何在不使用字符串的情况下创建/读取具有特定小数位的数字?

python - 使用来自 Neupy 的 LMS 算法的溢出错误示例

algorithm - 两组点之间的最近点

java - 枚举子集的空间复杂度是多少?

Java 服务器客户端(I/O 连接异常)

algorithm - 如何用单个分支平衡树?

algorithm - 数据结构 - 检查数组是否包含 2 个整数,第一个比第二个大 2 倍