Массив: [1, 2, 3, 4, 2, 3, 2, 2] в нем случайным образом выбираются 2 числа, причем в массиве есть повторяющиеся числа Схема: 2,
Метод жестокого цикла: двойной обход массива, поиск num1 во внешнем цикле, затем поиск ближайшего расстояния во внутреннем цикле, num2, когда цикл заканчивается, вы можете.
функция misDistance(arr,num1,num2){ var len = arr.length; если(!обр||длина
}
} Из-за двух обходов временная сложность n в 2 раза больше квадратаметод динамической циркуляции В приведенном выше методе 1 внутренний цикл неоднократно ищет позицию num2 много раз. Однако динамическое программирование можно использовать для записи результатов каждого обхода, чтобы уменьшить количество обходов. 2 случая: 1. При встрече с числом 1 запишите позицию lastPost1 индекса массива, соответствующую значению числа 1. Вычислив разницу между lastPost1 и позицией lastPost2 последнего обхода индекса числа 2, последнего обхода числа 1 и num2 может быть получено расстояние 2. При обнаружении num2 также запишите позицию lastpost2 соответствующего индекса массива, а затем найдите расстояние между num1 и num2, найдя lastpost2 и последний переход к позиции индекса lastpost1 массива num1.
解答:function minNum(x,y){
return(x<y)?x:y
}
function miniDistance(arr,num1,num2){
var len = arr.length;
if(!arr|| len<= 0){
return
}
var lastpost1 = -1;
lastpost2 = -1
miniDinstance= arr.length;
for(var i =0;i<len ;++i){
if(arr[i] == num1){
lastpost1= i;
if(lastpost2>0){
minidistance = miniNum(miniDinstance,lastPost1-lastpost2)
}
}
if(arr[i] == num2){
lastpost2= i;
if(lastpost1>0){
minidistance = miniNum(miniDinstance,lastPost2-lastpost1)
}
}
}
return miniDis
}