【问题标题】:Execution Timed Out (12000 ms) : How can I fix this error执行超时(12000 毫秒):如何修复此错误
【发布时间】:2023-02-05 18:59:01
【问题描述】:

当我试图解决 codewars 上的问题时,出现此错误。

我的代码通过了所有测试但没有优化。你有什么建议吗?

问题:https://www.codewars.com/kata/525e5a1cb735154b320002c8/train/csharp

C#: code

【问题讨论】:

  • 使用系统; public class Kata { public static int Triangular(int n) { string temp = ""; for(int i = 0; i < n; i++){ for(int j = i; j < n; j++){ if(n < 0){ 中断; } else{ 温度 += 1; } } } 返回温度。长度; } }
  • 你得到一个数字,应该输出一个数字。如果要求您将 10000 乘以 10000,您是否也会构建一个 100 MB 的字符串?或者也许使用数学? (轻轻一推)

标签: c# .net


【解决方案1】:

问题是您使用的是蛮力解决方案!当你遇到算法/数学问题时,你应该考虑找到一个可以用公式表示的模式。在这种情况下,三角数已经是一个已知问题并且有解决方案,请查看此 (https://en.wikipedia.org/wiki/Triangular_number) 了解更多详细信息
所以解决方案很简单:

public static int Triangular(int n) 
  { 
    // handle the edge case (out-of-range values)
    if (n <= 0)
      return 0;
    
    // apply the triangular numbers formula:
    return (n * (n + 1)) / 2;
  } 

【讨论】:

  • 不需要边缘情况。您不能在此处获得超出范围的值。你可以用负数来测试它。
  • 他正在尝试解决 codewars.com/kata/525e5a1cb735154b320002c8/train/csharp 上的一个问题,如果你没有设置边缘情况的处理,测试将不会通过
  • 抱歉,您是对的,测试需要负输入为 0。
【解决方案2】:

这是纯数学,不需要任何字符串。 这是计算三角数的单行代码,运行时间为 18 毫秒:

using System;

public class Kata
{
  public static int Triangular(int n)
  {
    return n * (n + 1) / 2;
  }
}

这是三角数的定义,可以解释上面的代码:

Tn=1+2+3+⋯+n=n⋅(n+1)2

【讨论】:

    猜你喜欢
    • 2022-12-07
    • 1970-01-01
    • 2022-12-21
    • 2021-03-09
    • 1970-01-01
    • 2021-12-31
    • 1970-01-01
    • 2018-04-18
    • 2017-04-15
    相关资源
    最近更新 更多