El tiempo amortizado es la forma de expresar la complejidad temporal cuando un algoritmo tiene la complejidad temporal muy mala sólo de vez en cuando además de la complejidad temporal que ocurre la mayor parte del tiempo. Un buen ejemplo sería un ArrayList que es una estructura de datos que contiene un array y puede ser extendido. Otra definición de Stack Overflow es el tiempo promedio que se toma por operación, si se hacen muchas operaciones.
Cuando ArrayList alcanza la capacidad del array en él, entonces crea un nuevo array con el tamaño duplicado del antiguo array y copia todos los elementos del antiguo array al nuevo array. En ArrayList, existen dos complejidades de tiempo; una es O(1) y la otra es O(n).
Cuando el array en él no ha alcanzado su capacidad y todavía tiene espacio suficiente para insertar elementos
Para insertar un elemento al array en este caso, sólo tenemos que poner el elemento después del último elemento. Todavía tenemos espacio para insertar elementos.
Cuando el array ha alcanzado su capacidad y necesita volver a crearse con el tamaño duplicado
El array ha alcanzado su capacidad y no tenemos ranuras disponibles. Entonces necesitamos crear un nuevo array con el tamaño duplicado. Y luego copiar los elementos de la antigua a la nueva, que toma O(n) donde n es la capacidad de la antigua matriz y el peor caso.