从黑客排名计算谷底问题

时间:2019-04-20 19:38:39

标签: python-3.x

加里(Gary)是一个狂热的徒步旅行者。他精心跟踪自己的远足,并密切关注地形等小细节。在他的最后一次远足中,他采取了确切的步骤。对于他采取的每一个步骤,他都指出这是上坡还是下坡。加里(Gary)的远足在海平面开始和结束,每次上或下的步数代表高度的单位变化。我们定义以下术语: 一座山是一系列从海平面上升的连续步骤,从从海平面上升到从海平面下降到结束。 山谷是指一系列从海平面以下的连续台阶,从海平面向下的台阶开始直至海平面的上升。 考虑到加里上次徒步旅行时上下的顺序,找到并打印出他走过的山谷数。 例如,如果加里(Gary)的路径是,则他首先进入一个深谷单位。然后,他爬上一个高高的山脉。最后,他回到海平面并结束了远足。

功能说明 在下面的编辑器中完成countingValleys函数。它必须返回一个整数,该整数表示加里所遍历的谷数。

我尝试用python编写此代码,并且运行良好,但无法从逻辑上找出代码

#n is the number of steps and s is the sequence of steps taken

def countingValleys(n, s):

    level=valley=0
    for i in range(n):
        if(s[i]=='U'):
            level+=1
            if(level==0):
                valley+=1
        else:
            level-=1

    return valley

结果很好

问题:有人可以向我解释一下从if(level == 0)开始的逻辑。如果我们在人上山时将水平面增加一个单位,那么我们不应该将山谷增加1。当电平为零时,为什么谷值要增加一。对逻辑感到困惑-有人可以帮我理解这一点

5 个答案:

答案 0 :(得分:1)

如果台阶上坡if(s[i]=='U')

级别为0 if(level==0)

那就是山谷valley+=1

此功能的工作原理是对从谷中出来时的谷数进行计数,并告诉您从谷中出来是因为您到达海平面后会上坡。

答案 1 :(得分:0)

<a class="link-right verbtable" data-text="+" old_onclick="expandfullverbtable();" onclick="expandfullverbtable();">Full verb table</a> <a class="link-right verbtable" data-text="+" old_onclick="expandfullverbtable();" onclick="expandfullverbtable();">Full verb table</a> <a class="link-right verbtable" data-text="+" old_onclick="expandfullverbtable();" onclick="expandfullverbtable();">Full verb table</a> 有所不同,它们都是相似的level=0 valley=0

逻辑很简单,您只需计算是否将“ U”上坡分配为“ 1”,将“ D”下坡编号分配为“ -1”,并且在将两个计数相加后得出“如[DDDUUU]中的0,将使谷值增加“ 1”。

答案 2 :(得分:0)

php中的数谷黑客解决方案

function countingValleys($steps, $path) {
     
  $valley = 0;
  $sealevel = 0;
  $newPath =  str_split($path);
  $c = count($newPath);
  
  if ($steps == $c && $c >= 2) {
  
      for($i = 0; $i < $c; $i++) {
          
          if ($newPath[$i] == "D") {
             $sealevel -= 1;
          } else {
              $sealevel += 1;
          }
          if ($sealevel == 0 && $newPath[$i] == "U") {
             $valley += 1;
          
          }
      } 
  return $valley;
  }     


}

答案 3 :(得分:0)

很简单,

代码的意思是,如果您遇到向上的符号,则表示您已攀爬。现在,如果你从飞机或山上爬过,你的等级会大于 0。但如果你从山谷爬到水平,那么只有你的等级会变成 0。

基本上,如果level<0 表示您仍在山谷中,level>0 表示您在山上,level 0 表示您在海平面。

所以如果您遇到一个表示攀爬动作的向上符号,然后您的等级为 0,则意味着您已经爬上了一个山谷。

答案 4 :(得分:0)

我们可以将上坡和下坡的值指定为 uphill=1downhill=-1sea level=0,而山谷可以定义为我们从下坡到达海平面时,即从负值归零

因此,如果我们处于负水平并通过添加下一步移动到海平面,我们可以增加山谷。

找到下面的代码片段

def returnCode(step):
        if step=='U':
            return 1;
        return -1;

def countingValleys(steps, path):
    # Write your code here
    level=valley=0
    for element in path:
        code = returnCode(element)
        if level< 0 and level+code == 0:
            valley=valley+1
        level = level+code
    return valley