这两个代码有什么区别

时间:2017-08-02 10:43:30

标签: javascript algorithm

我刚刚解决了一个黑客等级问题。问题是: https://www.hackerrank.com/challenges/kangaroo/problem

以下解决方案已通过所有30项测试

function kangaroo(x1, v1, x2, v2) {
    var returnVal = "NO";
    if (x2 > x1 && v2 > v1) {
        returnVal = "NO";
    } else if ((x1 - x2) % (v2 - v1) === 0) {
        returnVal = "YES";
    }
    return returnVal;
}

但在我改变代码之后,它没有通过2次测试。

function kangaroo(x1, v1, x2, v2) {
    var returnVal = "NO";
    if ((x1 - x2) % (v2 - v1) === 0) {
        returnVal = "YES";
    }
    return returnVal;
}

returnVal的默认值是" NO"。所以,我认为首先,如果声明不是必要的。那么,为什么第二个代码没有通过两次测试?

4 个答案:

答案 0 :(得分:2)

想象一下

kangoroo(1,1,2,2)

因此,第一个代码将返回,而第二个代码将返回。您可以将第一个条件实现到第二个条件:

function kangaroo(x1, v1, x2, v2){
  if ((x1 - x2) % (v2 - v1) === 0 && !(x2 > x1 && v2 > v1)) {
    return "YES";
  }
 return " No";
}

答案 1 :(得分:0)

第一个代码块中的第二个条件是 else if。它只会在第一个if条件没有通过的情况下运行。

您可以输入与if条件和else if条件匹配的输入。这将导致第一种情况下输出为NO(if匹配且else if永远不会运行),但修改后的代码中的YES(前else if匹配)。

答案 2 :(得分:0)

尝试一下(用Java编写)

x1:袋鼠1的初始位置 &x2:袋鼠2的初始位置

如果给出x2> x1

static String kangaroo(int x1, int v1, int x2, int v2) {

    int i;
    for(i=0; x1<x2; i++){
        x1 = x1 + v1;
        x2 = x2 + v2;
        if(x1 == x2){
            return "YES";
        } 
    }   
    return "NO";
}

以下解决方案涵盖了x1> x2或x1 == x2或x1

static String kangaroo(int x1, int v1, int x2, int v2) {

    int i, flag = 0;

    if(x1 > x2){
        for(i=0; x1>x2; i++){
            x1 = x1 + v1;
            x2 = x2 + v2;
            if(x1 == x2){
                return "YES";
            }
        }
    }else if(x1 < x2){
        for(i=0; x1<x2; i++){
            x1 = x1 + v1;
            x2 = x2 + v2;
            if(x1 == x2){
                return "YES";
            } 
        }   
    }else
        return "YES";

    return "NO";
}

答案 3 :(得分:0)

最简单的解决方案是

if (v1 <= v2 && x2 > x1) {
    return "NO";
} else {
    return (x2 - x1) % (v2 - v1) == 0 ? "YES" : "NO";
}