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

来源:互联网 发布:乘法口诀8的手指算法 编辑:程序博客网 时间:2024/05/23 15:31
简单版找最大值:
目的:找出一个无序数组中有序的最大差值(即大的数在小的数后面)
思路:直接排序,遇到最小的保存最小的,计算每一个位置与最小值的差值,找出最大差值
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[n];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[n];int right[]=new int[n];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;    }



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