输入1:带有长整数列表的.csv文件。例如:
1
10
23
2450
12
560
320
705
...
输入2:带有整数列表的.csv文件,以及每个整数旁边的空白位置
5 -
12 -
15 -
13 -
350 -
输出:从输入1中查找输入2整数大于或等于的整数计数,并将该数字附加到.csv文件中。
问题在于这涉及DNA测序,输入1有超过一百万个数据条目。什么是解决这个问题的有效方法?
我的想法是将输入1的所有条目读入一个大型数组并对其进行排序,但这似乎既低效又需要大量内存。任何指导都将不胜感激。
修改
输出(与输入2相同的文件):
int,count
5 1
12 3
15 3
13 3
350 5
答案 0 :(得分:0)
将第二个文件中的数字放入有序地图中,值为零:
TreeMap<Integer, Integer> counts = new TreeMap<>();
for (Integer i : fromFile2) {
counts.put(i, 0);
}
然后,对于从第一个文件中读取的每个数字,将计数增加到该数字:
for (Integer i : fromFile1) {
counts.headMap(i).replaceAll((k, v) -> v + 1);
}
请注意,第二个循环并不需要您将整个文件读入内存:您可以一次只读取一个。
另请注意,headMap(i)
会返回密钥严格小于i
的条目。假设i < Integer.MAX_VALUE
,您只需将1添加到该值即可。