Статьи по обучению алгоритму - минимальное расстояние между двумя элементами в массиве

внешний интерфейс

Массив: [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
 }