【发布时间】:2020-01-14 14:42:53
【问题描述】:
下面是我在hackerrank 上对maxdiff 问题的实现。 它通过了所有测试用例,除了 1 给出超时。 帮我优化一下。
import java.io.*;
import java.util.*;
public class Solution {
private static final Scanner scanner = new Scanner(System.in);
public static void main(String[] args) {
/* Enter your code here. Read input from STDIN. Print output to STDOUT. Your class should be named Solution. */
int n = Integer.parseInt(scanner.nextLine());
if(n==0 || n==1)
System.out.println(0);;
String s=scanner.nextLine();
String ar[] = s.split("\\s+");
int[] a=new int[n];
for(int i=0;i<n;i++)
{
a[i]=Integer.parseInt(ar[i]);
}
int max, min;
long sum=0;
for(int i=0;i<n;i++)
{
max=a[i];
min=a[i];
for(int j=i+1;j<n;j++)
{
if(a[j]>max)
max=a[j];
if(a[j]<min)
min=a[j];
sum+=max-min;
}
}
System.out.println(sum);
}
}
失败的测试用例太大,无法在此处附加。
【问题讨论】:
-
当 n == 0 时,打印 0 后不应该从 main 返回吗?否则程序将继续尝试读取值。当 n == 1 时,您应该读取一个值,打印 0 并返回。另一个问题是指令 sum += max-min 应该在 for 循环之后,而不是在它的主体中。
标签: arrays optimization sub-array