我正在尝试解决一个有趣的编程难题
电影租赁店有几位访客,想租电影。每个人最多可以租2部电影。然而,租赁代理商只能租用每部电影的1份。为了解决这个问题,租赁机构要求每个人提供他们想租的电影愿望清单。每个人可以提供多达10个愿望。 根据人们提供的愿望清单,租赁代理商想要提出一个解决方案,以便每个人都可以给出独特的电影租赁。
输入:
包含两列的文本文件
column1有perosn Id,column2有他们想租的电影ID 每个人最多可以有10个条目,文件可能无法排序。解决方案
- 逐行阅读整个文件,并创建人物与所要求的电影列表的地图。
- 根据所请求的电影数量对地图中的条目进行排序。
- 遍历已排序的列表,如果该特定影片未分配给其他任何人,则从列表中为一个人分配最多2部电影(为此目的使用HashSet)。
醇>
此算法适用于合理大小的文件。但是如果输入文件非常大,我会收到内存不足的错误。具体来说,在尝试将数据存储在地图中时。 我可以采取其他方法吗?可能会在内存中读取整个文件。
答案 0 :(得分:1)
可能会在内存中读取整个文件。
是的,当然。逐行阅读。
BufferedReader br = new BufferedReader(new FileReader(file));
while(br.ready()) {
String line = br.readline();
// do something with line
}
br.close();
现在,如果你的地图不适合内存,那么你有一个非常不同的问题。但你没有说是这种情况,所以我认为不是。
编辑:如果您无法将整个地图存储在内存中,请使用轻量级本地数据库,例如SQLite。这就是他们的目的。