Редактировать: Это продолжение / расширение моего предыдущего поста, которое можно найти здесь: Добавление динамического массива в конце?
Начиная с динамического массива [5, 9, -1, 6, 4, 13, X, X]
из length = 8
и numElements = 6
, показать массив, когда мы выполняем (а) 3 удаления последних операций и (б) 4 удаления последних операций. X обозначает записи, которые можно игнорировать.
Контрольная точка (ответ), которую я получил, была (a) [5, 9, -1, X, X, X, X, X]
и (b) [5, 9, X, X]
.
Теперь первыйсо мной все в порядке.
[5, 9, -1, 6, 4, 13, X, X]
[5, 9, -1, 6, 4, X, X, X]
[5, 9, -1, 6, X, X, X, X]
[5, 9, -1, X, X, X, X, X]
Так что именно поэтому я должен получить ответ (а).
А как насчет (б)? Вот моя попытка:
[5, 9, -1, X, X, X, X, X]
[5, 9, X, X, X, X, X, X]
Отсюда, поскольку длина равна 8 и равна 4 * числовым элементам (то есть 4 * 2 = 8), поэтому я урежу массив наполовину,сокращение длины составляет 4.
[5, 9, X, X]
Но почему это останавливается здесь / почему [5, 9, X, X]
был окончательным ответом? Это было только 2 операции удаления, и у нас их всего 4, что будет дальше?
Вот псевдокод, который я пытаюсь сделать:
function deleteLast()
if (numElements == 0) then
print “Cannot delete from an empty array”
else if (numElements == 1) then
set numElements to 0
set length to 1
resize array A to 1
else
decrement numElements
if (4 ∗ numElements == length) then
update length to 2 ∗ numElements
create an array B of size length
use a loop to copy first numElements numbers from A to B
set A to B