求一个数组(a(i,j))中元素相减的最大值,且i<=j

来源:互联网 发布:南京金蝶软件 编辑:程序博客网 时间:2024/05/17 02:35

题目的要求是时间复杂度O(n),空间复杂度O(1).

两个错误的思路要避免,一是数组排序,最好的排序算法时间复杂度也是nlogn,明显达不到要求。另外一个是遍历数组求得最大值和最小值,然后相减,但照顾不到i<=j的条件。

正确的思路是对上述第二个算法的改进,将数组第一个元素设置为最大和最小值(i=j=0),最大差值的初始值max就是0,然后移动j,每次移动都计算a[j]-a[i],如果结果大于max就替换max,小于的话什么都不做,而如果结果小于0,则将i赋值为j,继续上面的操作。最终得到的结果就是正确答案。

java实现的代码如下


public class MaxSubtractValueOfArrays {//Find the max value of elements subtract when i <= jpublic static int getMaxSubtractValueofArrays(int a[]){int i = 0;int max = 0;for(int j = 1; j < a.length ; j++){int sub = a[j] - a[i];if(sub > max)max = sub;else if(sub < 0){i = j;}}return max;}public static void main(String[] args) {int a[] = {6,18,3,98,67,24,0,43,17,17,67,81,49,-15,9};int max = MaxSubtractValueOfArrays.getMaxSubtractValueofArrays(a);System.out.println(max);}}


阅读全文
0 0
原创粉丝点击