【发布时间】:2021-05-16 23:00:24
【问题描述】:
我有 5,000,000 个以这种方式格式化的无序字符串(Name.Name.Day-Month-Year 24hrTime):
"John.Howard.12-11-2020 13:14"
"Diane.Barry.29-07-2020 20:50"
"Joseph.Ferns.08-05-2020 08:02"
"Joseph.Ferns.02-03-2020 05:09"
"Josephine.Fernie.01-01-2020 07:20"
"Alex.Alexander.06-06-2020 10:10"
"Howard.Jennings.07-07-2020 13:17"
"Hannah.Johnson.08-08-2020 00:49"
...
找到时间 t 在某个 n 和 m 之间的所有字符串的最快方法是什么? (即删除所有时间
此过滤将针对不同的范围进行多次。时间范围必须始终在同一天,并且开始时间始终早于结束时间。
在 java 中,这是我当前的方法,给出了一些时间字符串 M 和 N 以及 500 万个字符串列表:
ArrayList<String> finalSolution = new ArrayList<>();
String[] startingMtimeArr = m.split(":");
String[] startingNtimeArr = n.split(":");
Integer startingMhour = Integer.parseInt(startingMtimeArr[0]);
Integer startingMminute = Integer.parseInt(startingMtimeArr[1]);
Integer endingNhour = Integer.parseInt(startingNtimeArr[0]);
Integer endingNminute = Integer.parseInt(startingNtimeArr[1]);
for combinedString in ArraySizeOf5Million{
String[] arr = combinedString.split(".");
String[] subArr = arr[2].split(" ");
String[] timeArr = subArr[1].split(":");
String hour = timeArr[0];
String minute = timeArr[1];
If hour >= startingMhour
&& minute >= startingMminute
&& hour <= endingNhour
&& minute <= endingNminute {
finalSolution.add(hour)
}
}
Java 是我的母语,但任何其他语言也可以。更好/更快的逻辑是我所追求的
【问题讨论】:
-
通常,答案是“视情况而定”。您是否必须在给定的时间内只进行一次过滤,或者您是否需要一次又一次地使用不同的参数进行过滤。对于所问的问题,我想知道您希望什么时间改进,尤其是您已经采用了什么方法。
-
好吧,无论你做什么,你都必须阅读和解析每一行,所以你最好在阅读后测试每一行的“范围内”。 500 个字符串似乎不是很多。
-
@Yunnosch 过滤将使用不同的 m 和 n 值一次又一次地发生。字符串的数量保持不变 5,000,000
-
@iggy 错过了几个零
-
最快的方法是:构造一个DFA并执行。
标签: algorithm sorting data-science mathematical-optimization data-scrubbing