例如,您将获得一个数组[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并且不允许的情况。
答案 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