找到填充随机数的数组中的最大增量

时间:2015-03-01 22:00:44

标签: java algorithm time-complexity

例如,您将获得一个数组[3,5,8,10,6,12,4]。你要找到两对元素i和j之间可能的最大增量,其中j> 1。岛

在上述情况下,答案将返回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)的解决方案,因为如果我们使用分而治之的方法呢?有人可以指导我吗?

UPDATE 我根本无法找到最大值和最小值,因为j的索引必须大于索引i。如果我只是查找最大值和最小值,那么我可能会得到索引i大于索引j并且不允许的情况。

1 个答案:

答案 0 :(得分:2)

保持最低限度并相应更新:

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