1. 程式人生 > >【美團】有一個長為n的陣列A,求滿足0≤a≤b

【美團】有一個長為n的陣列A,求滿足0≤a≤b

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};
    }
}