左右最值最大差

来源:互联网 发布:windows xp哪个版本好 编辑:程序博客网 时间:2024/04/29 07:46

题目描述
给定一个长度为N(N>1)的整型数组A,可以将A划分成左右两个部分,左部分A[0..K],右部分A[K+1..N-1],K可以取值的范围是[0,N-2]。求这么多划分方案中,左部分中的最大值减去右部分最大值的绝对值,最大是多少?
给定整数数组A和数组的大小n,请返回题目所求的答案。
测试样例:

5
2 7 3 1 1

返回:6

import java.util.*;public class MaxGap {   public static void main(String args[]){        Scanner in=new Scanner(System.in);        int n=in.nextInt();        int a[]=new int[n];        for(int i=0;i<n;i++){            a[i]=in.nextInt();        }        System.out.println(findMaxGap(a,n));    }    public static int findMaxGap(int[] a, int n) {        int max=0;        int a1[],a2[];        ArrayList<Integer> list=new ArrayList<>();        //分割数组        for(int i=0;i<n-1;i++){            a1=new int[i+1];            a2=new int[n-i-1];            for(int j=0,t=0;j<i+1&&t<i+1;j++,t++){                a1[j]=a[t];            }            for(int k=0,t=i+1;k<n-i-1&&t<n;t++,k++){                a2[k]=a[t];            }            //存入两个数组最大值的最大差            list.add(dis(a1,a2));        }        max=list.get(0);        for(int i=1;i<list.size();i++){            if(max<list.get(i)){                max=list.get(i);            }        }        return max;    }    public static int dis(int a1[],int a2[]){        int left=a1[0],right=a2[0];        for(int i=1;i<a1.length;i++){            if(left<a1[i]){                left=a1[i];            }        }        for(int i=1;i<a2.length;i++){            if(right<a2[i]){                right=a2[i];            }        }        return Math.abs(left-right);    }}
0 0