编辑:这是我上一篇文章的继续/扩展,可以在这里找到:Dynamic array add at the end?
从
[5,9,-1,6,4,13,X,X]
和length = 8
的动态数组numElements = 6
开始,在执行(a)3个删除最后一个操作和(b)4个删除最后一个操作时显示该数组。 X表示条目,可以忽略。
我得到的检查点(答案)是(a)[5,X]
和(b)[5,X]
。
现在第一个对我很好。
[5,X]
[5,X]
这就是我应该得到(a)的答案。
但是(b)呢?这是我的尝试:
[5,X]
从这里开始,由于长度为8,等于4 *个数字元素(即4 * 2 = 8),所以我将数组切成两半,将长度减少为4。
[5,X]
但是为什么到此为止/为什么[5,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