gpt4 book ai didi

java - 如何创建一个对应于从 2 到 100 的每个数字的列表,该列表将包含数组中的数字及其倍数?

转载 作者:行者123 更新时间:2023-11-29 04:08:58 29 4
gpt4 key购买 nike

最近我遇到了这个问题,但找不到最佳解决方案。

假设我们有一个任意范围的数字数组,例如 9,-3,0,4,11,2,-8,.....我们需要打印从 2 到 100 的数字,并且对应于每个数字,我们需要打印数组中的数字列表,以便数组中的数字可以被它整除。例子:在示例中使用现有数组,2 -> 4,2,-8,...3 -> -3,9,...4 -> 4,-8,...像这样直到 100。

我尝试通过将数组中的每个数字除以 2 到 100 之间的数字来得出解决方案,然后创建与每个数字对应的列表。但在我看来,这并不是最佳解决方案。

我什至尝试过对数字进行分组,例如可以被 8 整除的数字可以被 2 和 4 整除,因此我们不需要再次除以它。这将减少一些操作和复杂性,但反过来又需要创建此类组。

任何人都可以通过减少将每个数字除以 2 到 100 的需要来帮助找到此问题的最佳解决方案。

最佳答案

为了解决给定的问题,我会选择以下两种方法之一:

版本 1

两个简单的嵌套循环结合方法 map.computeIfAbsent

int[] myArray = {3,5,1,-7,6,34,88,2,-8,9,10,4,33};
Map<Integer,List<Integer>> version1 = new HashMap<>();
for(int i = 2; i< 100; i++){
for(int x : myArray){
if(x%i==0)
version1.computeIfAbsent(i, k -> new ArrayList<>()).add(x);
}
}
System.out.println(version1);

版本 2

只有流操作的解决方案

    Map<Integer,List<Integer>> version2 = Arrays.stream(myArray).distinct().boxed()
.flatMap(p -> IntStream.range(2, 100).filter(i -> p%i ==0).boxed()
.map(l->new AbstractMap.SimpleEntry<>(l,p)))
.collect(Collectors.groupingBy(Map.Entry::getKey,
Collectors.mapping(Map.Entry::getValue, Collectors.toList())));

System.out.println(version2);

肯定有更优雅的解决方案或在复杂性方面最优的解决方案。但我认为这里的方法简短易读。

关于java - 如何创建一个对应于从 2 到 100 的每个数字的列表,该列表将包含数组中的数字及其倍数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56336140/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com