为什么我的解决山谷计数问题的解决方案超时?

时间:2020-11-11 21:00:13

标签: c#

这是在HackerRank上计算谷底的问题:

一个狂热的徒步旅行者会仔细记录他们的徒步旅行。在最后一次远足中,该远足正好走了一步,每走一步,都要注意是上坡还是下坡。远足总是在海平面上开始和结束,每次上或下一步代表高度的单位变化。我们定义以下术语:

一座山是一系列从海平面上升的连续步骤,从从海平面上升到从海平面下降到结束。 山谷是指一系列从海平面以下的连续台阶,从海平面向下的台阶开始,直至海平面的台阶结束。 给定远足过程中上下台阶的顺序,找到并打印步行穿过的山谷数。

示例

徒步旅行者首先进入一个山谷单位深处。然后他们爬上山,爬上高高的山脉。最后,远足者返回海平面并结束远足。

功能说明

在下面的编辑器中完成countingValleys函数。

countingValleys具有以下参数:

int步数:远足的步数 字符串路径:描述路径的字符串 退货

int:经过的山谷数 输入格式

第一行包含一个整数,即加息的步数。 第二行包含一个字符串,其中包含描述路径的字符。

我的解决方案通过了前13个测试,但由于超时而未能通过最后7个测试。

    public static int countingValleys(int steps, string path)
    {
        int valleys = 0;

        int elevation = 0;

        foreach(Char step in path)
        {
            Console.WriteLine(step);

            if (step == 'U')
                elevation++;
            else if (step == 'D')
            {
                elevation--;

                if (elevation == -1)
                    valleys++;
            }
        }

        return valleys;
    }

我检查了HackerRank C#环境的设置,C#的时间限制为3个部分,足够了。我不明白为什么要花3秒钟以上的时间?

但是,如果可能的话,我该如何优化解决方案?

我还想知道这是否是让我购买的营销技巧,以便我可以看到失败的隐藏测试并对其进行调试?

2 个答案:

答案 0 :(得分:1)

我认为您的解决方案因线路原因而超时

Console.WriteLine(step);

打印实际上非常耗时,在提交最终解决方案之前,您应该清除所有调试打印。

答案 1 :(得分:0)

您从不使用int steps。如果加息仅23步,但您得到2 GB的字符串怎么办?

删除

foreach(Char step in path)

并使用

for(int i=0 ; i<steps ; i++)
{
    Char step = path[i];

代替