我在设计一种算法时遇到了问题,该算法几乎可以像蛇游戏中那样使用包含线上所有点的数组来移动线条。我会做类似...
for (int x = 0; i < array.length; i++) {
array[i] = array[i+1]
}
array[array.length] = (the new point)
但这会在一秒钟内发生很多次,而且速度很慢。我想做一些类似的事情,但不是每次都移动每个数字,而是将它们留在数组中的相同位置,但保存了一个 int 以跟踪下一个将被删除的数字以及将包含新数字的数字。 如果你对我刚才说的有任何想法,请帮助我。谢谢
最佳答案
使用 circular buffer .这可以使用一个数组和两个索引(一个用于头,一个用于尾)来实现。如果蛇的长度始终相同,则可以使用单个索引。
使用这样的结构,您需要的整个操作可以在常数时间内完成(即独立于数组的大小)。
关于arrays - 点阵算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18966520/