题目描述

有一个长为n的数组A,求满足0≤a≤b<n的A[b]-A[a]的最大值。

给定数组A及它的大小n,请返回最大差值。

测试样例:

[10,5],2

返回:0

public class LongestDistance {
public int getDis(int[] A, int n) {
// write code here
if(n==1){return 0;}
int gap = 0;
List<Integer> arrayList = new ArrayList<>();
for(int i = 1 ;i<n;i++){
for(int j = 0;j<i;j++){
arrayList.add(A[i]-A[j]);
}
}

for(Integer list:arrayList){
if(list > gap)
gap=list;
}

return gap;
}
}

思路1:通过二重循环将所有的差值存到arraylist中,然后遍历arraylist找到差值最大。

public class LongestDistance {
public int getDis(int[] A, int n) {
// write code here
if(n==1){return 0;}

int min = A[0];
int gap = 0;
for(int i=1;i<n;i++){
if(A[i]<min)min = A[i];
if(A[i]-min>gap)gap = A[i]-min;
}
return gap;
}
}

思路二:通过找寻差值的同时,也更新最小值。最小值与它后面的数差值肯定是在它后面来说是最大的。 然后判定与前面保存的差值比 是不是更大,更大就更新。