这是在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秒钟以上的时间?
但是,如果可能的话,我该如何优化解决方案?
我还想知道这是否是让我购买的营销技巧,以便我可以看到失败的隐藏测试并对其进行调试?
答案 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];
代替