题目:编程寻找数组中差值最大的两个数,以位置在后的数减位置在前的数为差,要求线性时间完成。
输入:9,1,-4,2,7,3
输出:11 (7-(-4))= 11
分析:遍历所有元素,逐一使用后一个数减前面所有数来求解,当然能够得到结果,但是复杂度为n的平方。使用线性时间解决可以考虑使用动态规划。
JAVA:
public int maximumGap(int[] nums) {
if (nums.length < 1)
return 0;
int max = 0;
for (int i = 0; i < nums.length; i++)
if (nums[i] > max)
max = nums[i];
ArrayList<Integer> list = new ArrayList<Integer>();
for (int i = 0; i <= max; i++) {
list.add(0);
}
for (int i = 0; i < nums.length; i++)
list.set(nums[i], 1);
int n = 1;
max = 0;
for (int i = 1; i < list.size(); i++)
if (i != n && list.get(i) != 0) {
if (max < i - n)
max = i - n;
n = i;
}
return max;
}