数对之差的最大值

来源:互联网 发布:java 读取zip压缩文件 编辑:程序博客网 时间:2024/05/05 20:08
package su.interview;/** * 题目:在数组中,数字减去它右边的数字得到一个数对之差。求所有数对之差的最大值。 例如在数组{2, 4, 1, 16, 7, 5, 11, * 9}中,数对之差的最大值是11,是16减去5的结果。 *  * @author Toy *  */public class PairNum {/** * 集腋成裘 O(n^2) * @param a * @return */public int pair_num_01(int[] a) {int n = a.length;int maxPair = 0;for (int i = 0; i < n; i++) {for (int j = i + 1; j < n; j++) {if ((a[i] - a[j]) > maxPair) {System.out.println("Stroe: " + a[i] + " " + a[j]);maxPair = a[i] - a[j];}}}return maxPair;}/** * O(n) * @param a * @return */public int pair_num_02(int[] a){int n = a.length;int maxPair = 0;int[] b=new int[n-1];for(int i=0;i<n-1;i++){b[i]=a[i]-a[i+1];}//最大子段和int[] c=new int[n-1];c[0]=b[0];for(int i=1;i<n-1;i++){if(c[i-1]>0){c[i]=c[i-1]+b[i];}else{c[i]=b[i];}if(c[i]>maxPair){maxPair=c[i];}}return maxPair;}/** * O(n)  对方法2的空间优化 * @param a * @return */public int pair_num_03(int[] a){int n = a.length;int maxPair = 0;int[] b=new int[n-1];for(int i=0;i<n-1;i++){b[i]=a[i]-a[i+1];}//最大子段和 -- 空间优化了for(int i=1;i<n-1;i++){if(b[i-1]>0){b[i]=b[i-1]+b[i];}else{b[i]=b[i];}if(b[i]>maxPair){maxPair=b[i];}}return maxPair;}/** * @param args */public static void main(String[] args) {int[] a = new int[] { 2, 4, 1, 16, 7, 5, 11, 9 };int max = 0;PairNum p = new PairNum();max = p.pair_num_01(a);System.out.println(max);max = p.pair_num_02(a);System.out.println(max);max = p.pair_num_03(a);System.out.println(max);}}

原创粉丝点击