您的位置:首页 > 其它

找出数组中依序的最大差值方法(非动态规划版)

2017-08-24 13:41 295 查看
简单版找最大值:
目的:找出一个无序数组中有序的最大差值(即大的数在小的数后面)
思路:直接排序,遇到最小的保存最小的,计算每一个位置与最小值的差值,找出最大差值
import java.util.Scanner;

public class Main {

public static void main(String[] args) {
Scanner sc =new Scanner(System.in);
int n=sc.nextInt();
int array[] =new int
;
for(int i=0;i<n;i++){
array[i]=sc.nextInt();
}
sc.close();

int min=Integer.MAX_VALUE;
int max=Integer.MIN_VALUE;
for(int i=0;i<n;i++){
min=Math.min(min, array[i]);
max=Math.max(max,array[i]-min);
}
System.out.println(max);

}
进阶版找最大值
目的:找出一个无序数组中有序的两个最大差值(即数组(0,n)中存在(0,i)与(i,n-1)两段满足两段的最大差值之和是最大的)
思路:利用两个辅助数组分别保存从左到右遍历(0,i)和从右到左遍历(i,n-1)两段的值,再把两段的值相加,找出最大的一个,那个点的i能区分出两个最大差值所在区间
public int calculateMax(int[] prices) {
if(prices==null||prices.length<2) return 0;
int n=prices.length;
int sum=0;
int left[] =new int
;
int right[]=new int
;
int min=Integer.MAX_VALUE;
int max=Integer.MIN_VALUE;
for(int i=0;i<n;i++){
min=Math.min(min, prices[i]);
max=Math.max(max,prices[i]-min);
left[i]=max;
}
int high=Integer.MIN_VALUE;
max=Integer.MIN_VALUE;
for(int i=n-1;i>=0;i--){
high=Math.max(high, prices[i]);
max=Math.max(max,high-prices[i]);
right[i]=max;
}
for(int i=0;i<n;i++){
sum=Math.max(sum,left[i]+right[i]);
}
return sum;
}



                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: