0

我正在尝试解决一个有趣的编程难题

有几个访客到电影租赁店并想租电影。每人最多可租借 2 部电影。然而,租赁公司只能租用每部电影的 1 份。为了解决这个问题,租赁公司要求每个人提供他们想要租用的电影的愿望清单。每个人最多可以提供10个愿望。根据人们提供的愿望清单,租赁公司希望提出一个解决方案,以便每个人都可以得到一个独特的电影租赁。

输入:
一个包含两列的文本文件,
column1 有 perosn Id,column2 有他们想要租借的电影 ID。
每个人最多可以有 10 个条目,并且文件可能未排序。

解决方案

  1. 逐行读取整个文件并创建一个人与请求电影列表的地图。
  2. 根据请求的电影数量对地图中的条目进行排序。
  3. 遍历排序列表,然后如果该特定电影没有分配给其他人(为此目的使用 HashSet),则从列表中将最多 2 部电影分配给一个人。

该算法适用于合理的文件大小。但如果输入文件非常大,我会收到内存不足错误。具体来说,在尝试将数据存储在地图中时。我还有其他方法可以采取吗?可能不需要读取内存中的整个文件。

4

1 回答 1

1

可能不需要读取内存中的整个文件。

嗯,当然咯。逐行阅读。

BufferedReader br = new BufferedReader(new FileReader(file));
while(br.ready()) {
    String line = br.readline();
    // do something with line
}
br.close();

现在,如果您的地图不适合内存,那么您将遇到一个非常不同的问题。但是你没有说是这样,所以我假设不是。

编辑:如果您不能将整个地图存储在内存中,请使用像SQLite这样的轻量级本地数据库。这就是他们的目的。

于 2013-07-11T00:38:31.530 回答