0

这个卡恩学院的问题要求从第二个索引开始找到子数组中的最小值,我的算法返回 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);
4

2 回答 2

0

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

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

于 2016-07-21T05:17:28.547 回答
0

问题在于这两行:

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);

于 2016-07-21T06:24:40.063 回答