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};
}
}
【美团】有一个长为n的数组A,求满足0≤a≤b<n的A[b]-A[a]的最大值。 给定数组A及它的大小n,请返回最大差值
最新推荐文章于 2024-07-27 10:52:12 发布