【问题标题】:MaxDiff problem of hackerrank - optimize code as its giving timeouthackerrank 的 MaxDiff 问题 - 优化代码作为它的超时
【发布时间】: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


【解决方案1】:

我看到一个问题。

问题在于处理 n == 0 和 n == 1。您应该在打印 0 后返回:这是您应该拥有的。

if (n==0 || n==1) {
    if (n==1)
        scanner.nextLine();
    System.out.println(0);
    return;
}

【讨论】:

  • 我同意 n==0 和 n==1 但如果你取出嵌套循环的总和,那么你认为你会得到正确的结果吗?你不会错过数字吗?
  • @nanosoft 哎呀,我的错。你说的对。我再次检查了这个例子,你是对的。我会从我的答案中删除它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-17
相关资源
最近更新 更多