【美團】有一個長為n的陣列A,求滿足0≤a≤b
阿新 • • 發佈:2019-01-08
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};
}
}