找出数组中依序的最大差值方法(非动态规划版)
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; }
相关文章推荐
- 最大子数组的求和方法一(非动态规划)
- 找出一个数组中两个数的最大差值和最小差值(最接近的数)
- 动态规划方法求最大子连续数组乘积
- 如果给定一个数组arr[0,...N-1],要求找出相邻两个数的最大差值
- 找出数组中两段不相交的子数组,使其差值最大
- 找出数组中的最大值方法总结
- 电子科技大学推免复试题:利用递归方法找出一个数组中的最大值和最小值
- 编程之美-寻找数组中的最大值和最小值方法整理
- 快速从数组中找出最大数和第二大的数
- 动态规划-最大连续乘积子数组
- java 数组 math.max 方法取最大值
- 给定一个无序数组,排序之后求相邻两数之间的最大差值
- 循环数组求最大子段和系列-----------方法1
- 数组中的最大差值
- 动态规划-最大子数组和问题
- 动态规划-循环数组的最大子数组和
- 用sort()方法对数组的元素进行排序(可按字母升序降序与获得最大最小值)
- leetcode--一个for循环找出数组最大和次最大值
- 数组与矩阵---数组排序之后相邻数的最大差值
- 用递归方法求数组的最大值