这个Kahn学院问题要求从第二个索引开始找到子数组中的最小值,我的算法返回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);
答案 0 :(得分:0)
您需要进行简单的更改并拥有minIndex = i;
您正在扫描整个数组,这可能会在您的起始索引之前返回结果,以提及效率低下。
答案 1 :(得分: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);
&#13;