【问题标题】:Implementing Insert Function实现插入功能
【发布时间】:2014-11-19 12:07:48
【问题描述】:

我目前正在学习可汗学院的算法课程,该课程使用 JS 教授基本算法。我目前正在实现插入排序,但发现了一个问题。

我们正在编写一个函数,它接收一个数组、起始索引和值,以便在正确的有序位置插入一个数字。我在这里写了所说的功能:

var insert = function(array, rightIndex, value) {
for (var i = rightIndex; array[i] >= value; i--) {
    array[i+1]=array[i];
    array[i] = value;
}
return array;
};

这可以正常工作,并且可以正常执行,但是它没有通过 KA 的自动标记系统。他们为代码提供指导并建议这样做:

for(var ____ = _____; ____ >= ____; ____) {
    array[____+1] = ____;
}
____;

有谁知道我如何重申我的代码以符合这些标准?

【问题讨论】:

  • 我会说在那个网站上问更有意义。

标签: javascript algorithm


【解决方案1】:

我有一个和你类似的解决方案,但没有通过他们的自动化测试。如果您稍后查看“挑战:实现插入排序”,他们实际上会继续为您实现该功能:

var insert = function(array, rightIndex, value) {
    for(var j = rightIndex; j >= 0 && array[j] > value; j--) {
        array[j + 1] = array[j];
    }
    array[j + 1] = value; 
};

顺便说一句,你不需要在 for 循环之前声明 j (稍后使用)的原因是因为 JavaScript 没有块范围(TIL):See here

【讨论】:

    【解决方案2】:

    来自challenge

    这个函数的写法虽然有很多种,但还是要按照提示代码的方式来写。

    严格检查:

    var ___;
    for(___ = ___; ___; ___) {
        array[___ + 1] = ___;
    } 
    

    所以即使这两个替代项是正确的:

    while(array[rightIndex] > value && rightIndex >= 0) {
        array[rightIndex + 1] = array[rightIndex];
        rightIndex--;
    }
    array[rightIndex + 1] = value;
    

    尤其是这个几乎相同的语句(在 for 循环中切换了中间语句):

    for(var i = rightIndex; array[i] > value && i >= 0; i--) {
        array[i + 1] = array[i];
    }
    
    array[i + 1] = value;
    

    这就是答案:

    for(var i = rightIndex; i >= 0 && array[i] > value; i--) {
        array[i + 1] = array[i];
    }
    
    array[i + 1] = value;
    

    讽刺的是,它并不关心提示中无用的第一个变量...

    var ___;
    

    【讨论】:

      【解决方案3】:

      不需要返回数组,因为它是通过引用传递的。只需将每个元素向右移动 1 即可。最后一条语句只是在正确的位置插入值。

      var insert = function(array, rightIndex, value) {
          for (var i = rightIndex; array[i] >= value; i--) {
              array[i+1] = array[i];
          }
         array[rightIndex] = value;
      };
      

      【讨论】:

      • @Bergi 我同意,但它不适合他的代码模板。我认为这样的模板在任何方面都没有用,因为总会有更好的解决方案不适合这样的模板。此外,不鼓励学生寻找其他解决方案。
      • 我认为array[rightIndex] = value; 是错误的。
      • 你是@Felix,这是错误的。他一定是指array[i]for 范围内
      【解决方案4】:

      这里发布的大多数答案都是正确的。但这并没有让我们进入可汗学院的下一步。可能是因为可汗学院需要某个变量名称、缩进设置等。我不确定为什么它不能让我们进入下一步。

      这段代码帮助我进入下一步:

      var insert = function(array, rightIndex, value) {
          for(var j = rightIndex;
              j >= 0 && array[j] > value;
              j--) {
              array[j + 1] = array[j];
          }   
          array[j + 1] = value; 
      };
      

      在我发现这段代码之前,我使用 i 作为变量名而不是 j,但这并没有让我进入下一步。但确实如此。

      【讨论】:

        【解决方案5】:

        这已经奏效了:

        var insert = function(array, rightIndex, value) {

        var j = rightIndex;
        
        for(var j = rightIndex; j >= 0 && array[j] > value; j--) {
            array[j + 1] = array[j];
        }   
        array[j + 1] = value;
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-11-29
          • 1970-01-01
          • 2014-08-12
          • 2022-09-22
          • 2022-01-18
          • 1970-01-01
          • 2017-02-07
          相关资源
          最近更新 更多