【问题标题】:find the minimum value of subarray kahn Academy找到子数组可汗学院的最小值
【发布时间】:2016-11-24 11:48:53
【问题描述】:

这个卡恩学院问题要求从第二个索引开始找到子数组中的最小值,我的算法返回 4,但它没有提示我说我是正确的。

我想知道我的代码在哪里存在缺陷或可能会更好。谢谢:)
//////////////////////////////////////////

var indexOfMinimum = function(array, startIndex) {

// Set initial values for minValue and minIndex,
// based on the leftmost entry in the subarray:

var minValue = array[startIndex];
var minIndex = startIndex;

for ( var i = minIndex + 1; i < array.length; i++){

 //iterate through array
    if (array[i] < minValue) { 
        minValue = array[i];
        minIndex = array[minValue];
        minIndex = array.indexOf(minValue);  
    }
}
// Loop over items starting with startIndex, updating minValue and minIndex     as needed:
return minIndex;
}; 
var array = [18, 6, 66, 44, 9, 22, 14];   
var index = indexOfMinimum(array, 2);

【问题讨论】:

  • 你用minIndex在那里做什么?看来它应该是循环内的minIndex = i;

标签: javascript algorithm sorting computer-science sub-array


【解决方案1】:

你想要一个简单的改变并拥有minIndex = i;

您当前正在扫描整个数组,这可能会在您的起始索引 nit 之前返回结果以提及效率低下。

【讨论】:

    【解决方案2】:

    问题出在这两行:

    minIndex = array[minValue];
    minIndex = array.indexOf(minValue);
    

    您设置了两次minIndex。一次使用数组中的值,另一次在下一行搜索索引。并且虽然已经有了实际位置的索引,但是可以直接赋值给minIndex

    minIndex = i;
    

    var indexOfMinimum = function (array, startIndex) {
        var minValue = array[startIndex],
            minIndex = startIndex,
            i;
    
        for (i = minIndex + 1; i < array.length; i++) {
            if (array[i] < minValue) {
                minValue = array[i];
                minIndex = i;                                    // assign here the index
            }
        }
        return minIndex;
    };
    
    var array = [18, 6, 66, 44, 9, 22, 14],
        index = indexOfMinimum(array, 2);
    
    console.log(index);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-31
      • 2014-03-30
      • 2015-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多