Показать сообщение отдельно
  #9 (permalink)  
Старый 27.09.2013, 20:11
Аватар для Demath
Профессор
Отправить личное сообщение для Demath Посмотреть профиль Найти все сообщения от Demath
 
Регистрация: 22.06.2012
Сообщений: 168

Сообщение от Demath Посмотреть сообщение
Сообщение от Anna77
подскажите, как вставить в массив после каждого его отрицательного элемента элемент, равный нулю
Например, так

function Array1(A)
{   var n = A.length;    
    for (var i = 0; i < n; i++)
     { if (A[i] < 0)
        { for (var j = n-1; j >= i; j--) A[j+1] = A[j];
          A[i+1] = 0;
          i++; n++;
        }
     }
    return A;
}
alert( Array1([-1,1,2,-6,7,1,6,-7]) );
Эта функция не сохраняет входной массив. Если же нужно, чтобы входной массив не изменялся, то так (даже лучше, т.к. без вложенного цикла, сложность алгоритма O(n))

function Array2(A)
{
    var n = A.length, B = [];
    
    for (var i = 0, j = 0; i < n; i++)
     { if (A[i] < 0)
        { B[j++] = A[i]; B[j++] = 0; }
       else B[j++] = A[i];
     }
    
    return B;
}

alert( Array2([-1,1,2,-6,7,1,6,-7]) );
Ответить с цитированием