给定一个数组A.我们将一个术语正差指数定义为两个索引i和j(包括两个)之间的元素计数,例如i<j
和A[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;
}
}
答案 0 :(得分:1)
数组中的最大值和最小值,在大多数情况下它们对您没有帮助。所以不要找到那些。在问题的示例中,最大值为5,最小值为1.这两个值都不参与计算输出。相反,值3和4是因为它们是满足条件A [i] <1的最远的值。 A [J]。输出应该是5,因为数组3 2 1 1 4
的部分长度为5.或者“两个索引i和j之间的元素计数(包括两者)”,正如挑战所说的那样。
相反,您会发现最小值和最大值的输出为(5 - 1)+ 1 = 5(我认为;我没有彻底研究过您的代码)。巧合的是,在这种情况下你会得到正确的输出。你还没有正确完成。
其他例子:
我知道你要求帮助理解问题,而不是解决问题,所以我很乐意将这种乐趣留给自己。
答案 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;
}
满足所有测试用例。感谢