实际问题如下:您将使用什么数据结构在有数百万个点的停车场找到免费停车位?
我的想法:
LinkedHashMap
并继续将自由点移动到队列的前面,但我认为这不是正确的解决方案。有什么想法吗?
答案 0 :(得分:2)
您已经知道停车结构的大小(一百万个插槽),这在物理上是有意义的。所以如果你需要的所有信息都是空的,那么使用一个位数组,其中空位是假的并且被占用是真的
boolean slots[] = new boolean[1000000];
如果您需要存储更多信息,例如插槽中的汽车信息,插槽距离最近入口的距离等,请使用:
Slot[] slots = new Slot[1000000];
和Slot类类似于
public class Slot{
Car car;//object for car in slot
boolean occupied;//whether slot is vacant: may be redundant
Cost cost;//a set of fields: distance from entrance; parking fee for "good" slots, etc.
}
所以你继续......
答案 1 :(得分:0)
PriorityQueue,其中优先级定义为停车位和入口之间的距离。
答案 2 :(得分:0)
我会使用一套位,其中每一位代表停车位。值1表示免费,0表示已使用。对自由点进行线性搜索应该可以胜任。非常容易实现,并且asm足够快。
答案 3 :(得分:0)
改进kasavbere的解决方案,如果您有选择,我建议使用BitSet / BitArray类。 BitSet使用long数组,每个long值代表64个插槽。与布尔 [Arrays of booleans typically occupy 1 byte per element]相比,这有效地将阵列的总大小减少了8倍。 BitSet还提供了从特定索引获取下一组或空闲槽的方法,因此您不必为此编写自己的方法。
答案 4 :(得分:0)
我们可以使用队列。
队列在开始时包含所有百万条目。如果停车位 需要 ,出列。如果停车位变为 免费 , enque 。
答案 5 :(得分:0)
一旦汽车离开现场,将该点添加回队列。未来的民意调查将返回下一个最近的停车场。