【美团】有一个长为n的数组A,求满足0≤a≤b<n的A[b]-A[a]的最大值。 给定数组A及它的大小n,请返回最大差值

来源:互联网 发布:初音mmd数据 编辑:程序博客网 时间:2024/04/28 14:59
package com.wt;import java.util.Scanner;/**  题目:    有一个长为n的数组A,求满足0≤a≤b<n的A[b]-A[a]的最大值。    给定数组A及它的大小n,请返回最大差值。    测试样例:[10,5],2    返回:0 思路:1、一次选取数组的每一个元素,然后依次用这个元素后面的数与它做减法,看结果是否比当前最大值大;     2、为了减少比较的次数,选较大的数做减法*/public class MaxData {    public static void main(String[] args) {        int[] input = getInput();        int[] result = getResult(input);        System.out.println("最大值是:"+result[2]+"对应的数组元素:a["+result[1]+"]="+input[result[1]]+                "……a["+result[0]+"]="+input[result[0]]);    }    //获取键盘输入:包括数组大小和数组的值    public static int[] getInput()    {        System.out.print("请输入数组大小:");        int size =  new Scanner(System.in).nextInt();        String inputString;        String[] inputArr;        int[] inputNum;        while(true)        {            System.out.println("请输入数组,用空格隔开,输入完成按Enter键:");            inputString = new Scanner(System.in).nextLine();            inputArr = inputString.split(" ");            inputNum = new int[inputArr.length];            if(inputArr.length != size)            {                System.out.println("输入不符,请重新输入");            }else            {                for(int i = 0;i < inputArr.length; i ++)                {                    inputNum[i] = Integer.parseInt(inputArr[i]);                }                return inputNum;             }        }    }    //获取要求的结果    public static int[] getResult(int[] inputArr)    {        int current_max = 0;        int frontIndex = 0;        int backIndex = 0;        for (int i = 0; i < inputArr.length; i++)        {            for(int j = i ; j < inputArr.length - 1; j++)            {                if(inputArr[j+1] > inputArr[j])                {                    if(inputArr[j+1] - inputArr[i] > current_max)                    {                        current_max = inputArr[j+1] - inputArr[i];                        frontIndex = i;                        backIndex = j + 1;                    }                }            }        }        //返回数组:前后角标和最大值98        return new int[]{frontIndex,backIndex,current_max};    }}
阅读全文
0 0