1 回答
TA贡献1810条经验 获得超5个赞
没有外部包的帮助,有没有更有效的方法?节省任何时间都是很好的,因为这种计算经常发生。
那么这里是一种使用映射而不是数组的方法。
int categorizer = 10_000;
// Assume this is your array of ints.
int[] arrayOfInts = r.ints(4_000, 10_000, 1_400_000).toArray();
您可以像这样将它们分组在地图中。
Map<Integer, List<Integer>> ranges =
Arrays.stream(arrayOfInts).sorted().boxed().collect(
Collectors.groupingBy(n -> n / categorizer));
现在,当你想找到下一个更高的元素时,你可以获得包含该数字的列表。
假设您想要下一个大于 982,828 的数字
int target = 982,828;
List<Integer> list = map.get(target/categorizer); // gets the list at key = 98
现在只需使用您喜欢的方法处理列表即可。一张纸条。在某些情况下,您的最高数字可能会出现在紧随其后的其他列表中,具体取决于差距。您需要考虑到这一点,也许可以通过调整数字的分类方式或搜索后续列表来解决。但这可以大大减少您正在使用的列表的大小。
添加回答
举报