找到最大正指数

时间:2018-04-22 04:56:33

标签: java arrays

给定一个数组A.我们将一个术语正差指数定义为两个索引i和j(包括两个)之间的元素计数,例如i<jA[i]<A[j]。 现在对于给定的数组,您必须找到最大正差指数。确保测试用例有效,以便有答案。

输入格式

第一行:T,即测试用例数。 对于每个测试用例: 第一行:N 第二行:N个空格分隔的整数,表示数组的元素。

输出格式

在单独的行中打印每个测试用例的答案,并且给出答案始终存在。

样本输入
1
6
5 3 2 1 1 4

样品输出
5

解释
让i = 2,j = 6然后A[i]<A[j],它们之间的总元素是5,所以可以达到的最大答案是5.

我曾尝试从数组中找到最大数字,并从数组中找到最小数字A[i]<A[j]。通过样本输入它可以工作但是当我在hackerearth上提交问题时,它显示没有通过测试用例。谁能请我帮忙理解问题和程序?

我编写的程序

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Test {
    public static void main(String[] args) throws IOException {
        BufferedReader br = null;
        try {
            br = new BufferedReader(new InputStreamReader(System.in));
            String line = br.readLine();
            int totalTest = Integer.parseInt(line);
            for(int i=0;i<totalTest;i++) {
                line = br.readLine();
                int totalElements = Integer.parseInt(line);
                line = br.readLine();
                String strArr[] = line.split(" ");
                int elements[] = new int[strArr.length];
                for(int j=0;j<strArr.length;j++) {
                    elements[j] = Integer.parseInt(strArr[j]);
                }

                System.out.println(findMaximumPositiveIndex(elements));
            }
        }catch(Exception e) {
            e.printStackTrace();
        }
        finally {
            if(br!=null)
                br.close();
        }
    }

    public static int findMaximumPositiveIndex(int[] arr) {
        int max=arr[0];
        int maxIndex = 0;
        int minIndex=arr[0];
        int min=0;

        for(int i=0;i<arr.length;i++) {
            if( min==0 ) {
                min = arr[i];
                minIndex=i;
            }
            if(arr[i] < min) {
                min = arr[i];
                minIndex = i;
            }
            if(arr[i] > max) {
                max = arr[i];
                maxIndex = i;
            }
        }

        return (max - min) + 1;

    }
}

2 个答案:

答案 0 :(得分:1)

数组中的最大值和最小值,在大多数情况下它们对您没有帮助。所以不要找到那些。在问题的示例中,最大值为5,最小值为1.这两个值都不参与计算输出。相反,值3和4是因为它们是满足条件A [i] <1的最远的值。 A [J]。输出应该是5,因为数组3 2 1 1 4的部分长度为5.或者“两个索引i和j之间的元素计数(包括两者)”,正如挑战所说的那样。

相反,您会发现最小值和最大值的输出为(5 - 1)+ 1 = 5(我认为;我没有彻底研究过您的代码)。巧合的是,在这种情况下你会得到正确的输出。你还没有正确完成。

其他例子:

  • 对于2 1 2 1 2 1,答案是4,因为部分1 2 1 2具有长度4并且1 <1。 2。
  • 对于40 90 10 60,答案也是4,因为40 90 10 60中有4个元素而40 < 60。

我知道你要求帮助理解问题,而不是解决问题,所以我很乐意将这种乐趣留给自己。

答案 1 :(得分:1)

感谢您帮助理解问题陈述。

我修改了代码

public static int findMaximumPositiveIndex(int[] arr) {
    int min=arr[0],max=arr[0],minIndex=0,maxIndex=0;
    int maximumIndex = 0;
    for(int i=0;i<arr.length;i++){
        min = arr[i];
        minIndex=i;
        boolean isMaxPresent = false;
        for(int j=i;j<arr.length;j++)
        {
            if(arr[j] > min){
                max = arr[j];
                maxIndex = j;
                isMaxPresent = true;
            }
        }
        if(maximumIndex < ((maxIndex - minIndex) +1) )
            maximumIndex = (maxIndex - minIndex) + 1;
    }
    return maximumIndex;

}

满足所有测试用例。感谢