【问题标题】:Java : Summing the N series fails due to timeoutJava:由于超时,对 N 系列求和失败
【发布时间】:2019-05-26 08:14:35
【问题描述】:

在hackerrank 网站上,有一个任务叫做Summing the N series Under Mathematics 部分。这是相同https://www.hackerrank.com/challenges/summing-the-n-series/problem的链接

我尝试了很多东西。终于到了我的一些测试用例通过了一些不是由于超时异常的地方。

这是完整的代码。请告诉我什么是解决方案。

public class Solution {

    static int mod = 1000000007;

    static int summingSeries(long t) { 
        long sum = 0;
        for (int i = 0; i < t; i++) {
            sum = ((t%mod)*(t%mod))%mod;
        }
        return (int)sum;
    }

    private static final Scanner scanner = new Scanner(System.in);

    public static void main(String[] args) throws IOException {
        BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(System.getenv("OUTPUT_PATH")));

        int t = Integer.parseInt(scanner.nextLine().trim());

        for (int tItr = 0; tItr < t; tItr++) {
            long n = Long.parseLong(scanner.nextLine().trim());

            int result = summingSeries(n);

            bufferedWriter.write(String.valueOf(result));
            bufferedWriter.newLine();
        }

        bufferedWriter.close();
    }
} 

【问题讨论】:

  • 你失败了什么测试用例?
  • 这是几个例子 5351871996120528,2248813659738258... 在测试用例 3、4、5、6 中。
  • 很多 Hachernak 测试不仅仅是关于编写算法,而是关于思考它们及其问题。你的测试失败了,因为你在暴力破解它,试着找到更多关于算术和、模和给定值 (10^7 + 7) 背后的数学信息。
  • 你能告诉我们有什么问题吗?如果我猜的话,您正在使用int 来评估一个非常大的数字。也就是说,n.intValue() 调用。请注意,输入 n 可以等于 10^16,而 int 最大值仅介于 10^9 和 10^10 之间
  • 此外,还有一种更好的方法可以解决系列问题,而无需遍历整个系列。我不确定分享解决方案是否合乎道德,因为您的问题的性质似乎来自竞争网站

标签: java biginteger


【解决方案1】:

终于解决了。看看吧。

public class Solution {
    static int mod = 1000000007;
    static int summingSeries(long n) { 
        return (int)(((n % mod) * (n % mod)) % mod);
    }

    private static final Scanner scanner = new Scanner(System.in);

    public static void main(String[] args) throws IOException {
        BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(System.getenv("OUTPUT_PATH")));

        int t = Integer.parseInt(scanner.nextLine().trim());

        for (int tItr = 0; tItr < t; tItr++) {
            long n = Long.parseLong(scanner.nextLine().trim());

            int result = summingSeries(n);

            bufferedWriter.write(String.valueOf(result));
            bufferedWriter.newLine();
        }

        bufferedWriter.close();
    }
} 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-17
    • 1970-01-01
    • 2012-06-22
    • 2016-07-03
    • 1970-01-01
    • 1970-01-01
    • 2020-12-26
    • 2014-08-22
    相关资源
    最近更新 更多