最大化数组

时间:2018-02-03 14:28:56

标签: arrays algorithm

问题是最大化阵列中相邻元素的差异。

max(A [i] -A [j])其中,对于每个i,i≤i≤N,j是小于i的最大指数,使得A [j] <1。 A [i]。

我们可以进行AT MAX 1交换

让我们说阵列是{11,12,15},那么阵列的功率是max((12-11),(15-12)),这简化为max(1,3) )等于3。

我的方法:1)当最大元素在0指数和最小元素在最后一个指数时。我将取第二个最大值和最小值或最大值和第二个最小值之间的最大差值。 2)否则最大值和最小值之间的差异(一次交换即可)。

仍然我的代码没有按预期工作。如果可能请提供建议,让它工作谢谢。

输入:2(测试用例编号)2(数组大小)9 10(数组元素) (输出= 1)

4(数组大小)2 3 4 1(数组元素) (输出= 3)

代码:

import java.util.*;
    class TestClass {
    public static void main(String args[] ) throws Exception {

    //Scanner
    Scanner s = new Scanner(System.in);
    int T = s.nextInt();                 // Reading input from STDIN

    for(int i=0;i<T;i++){
         int size = s.nextInt();
         int[] arr = new int[size];
         for(int j=0;j<size;j++)
         {
             arr[j]=s.nextInt();
         }

         int max1=arr[0];
         int max2=arr[1];
         int max1Index = 0;

         int min1 = arr[0];
         int min2 = arr[1];
         int minIndex = 0;

         for(int k=0;k<size;k++)
         {
             if(max1<arr[k])
             {
                 max2 = max1;
                 max1 = arr[k];
                 max1Index = k;
             }

             if(min1>arr[k])
             {
                 min2 = min1;
                 min1 = arr[k];
                 minIndex = k;
             }

         }
         int ans =0;
         if(max1Index == 0&& minIndex==size-1)
         {
             ans =Math.max((max1-min2), (max2-min1));
         }else
         {
             ans= max1-min1;
         }
        System.out.println(ans);
    }



    // Write your code here

}
}

2 个答案:

答案 0 :(得分:1)

请检查您的解决方案 n = 2 。就像1 2 3 1作为输入一样,你的输出是0而不是2.我认为这是它失败的唯一情况。

答案 1 :(得分:0)

有一种方法可以使用IntStream

int ans = IntStream.range(1, size)
    .map(i -> arr[i] - arr[i-1])
    .max();

或者,如果您不想考虑负面差异:

int ans = IntStream.range(1, size)
    .map(i -> Math.abs(arr[i] - arr[i-1]))
    .max();