想象我们有两个数组:
String[] arr1 = {"a", "b"};
String[] arr2 = {"1", "2", "3"};
获取包含两者相乘值的第三个String数组的更好方法是什么?比如:
String[] arr3 = {"a1", "a2", "a3", "b1", "b2", "b3"};
我知道,我可以使用循环并将1中的每个元素与2中的每个元素连接起来,并将结果放入3中。但实际上arr1
和arr2
中的元素要多得多。Java中是否有专门的工具使其更有效?
如果你的意思是渐近复杂性意义上的“有效”,那么没有比嵌套循环更有效的方法了。不管怎样,您都需要生成并记录对arr1.length*arr2.length
字符串的引用,在最好的情况下,这需要与元素数量成比例的工作;也就是说,它是o(arr1.length*arr2.length)
。嵌套循环方法已经显示出最佳情况的复杂性。
但是,您也可以使用Java 8流解决问题,它可以更紧凑地表达,并且(对某些人来说)更清晰。这也为并行化操作提供了一个入口,所以虽然它不会降低渐近的复杂性(并且它可能具有更高的总体成本),但如果你的意思是“高效”,即更少的墙壁时间,那么流可能是你正在寻找的。另一个答案已经提供了详细信息。
int z = 0;
String[] suit_arr = {"C", "D", "H", "S"};
String[] rank_arr = {"A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"};
String[] pack = new String[52];
for (int i = 0; i < suit_arr.length; i++) {
for (int j = 0; j < rank_arr.length; j++) {
pack[z] = suit_arr[i] + rank_arr[j];
z++;
}
}
for (int y = 0; y < pack.length; y++) {
System.out.println(pack[y]);
}
}
这是用来装卡片的。所以这不仅仅是连接,就像我必须得到数组中每个元素之间所有可能的混合。顺便问一下,为什么我的问题是负的?是愚蠢的问题还是什么?
如果您可以使用Java 8,这是一个单行程序:
public static void main(String[] args) {
String[] arr1 = {"a", "b"};
String[] arr2 = {"1", "2", "3"};
String[] result = Arrays.stream(arr1).flatMap(s1 -> Arrays.stream(arr2).map(s2 -> s1 + s2)).toArray(String[]::new);
System.out.println(Arrays.toString(result));
}
逻辑是,第一个数组的每个元素都映射到第二个数组的所有元素的流,该流由该元素前缀。然后将此流展平并收集到一个数组中。
否则,尽管您没有发布当前拥有的代码,但这听起来是一种很好的方法,而且Java中没有任何神奇的方法可以更简单地实现。
我解决了一个编程问题,如果有两个数字A和B,我必须在乘积的二进制形式中找到1的个数。A和B的范围是[0,10^9]包括在内。这是我写的代码。 这对输入(3,4)很有效,但当我尝试(323294746475)作为输入时,代码不起作用,结果显示0作为答案。我在不同的地方放了几个输出语句进行调试,发现有了这个输入,乘法的结果是-1170032381(这是错误的),因此while循环的条件失败。所以,我像
有人请解释一下。为什么下面的程序产生16个?
我有一个PySpark数据帧,df1,看起来像: 我有第二个PySpark数据帧,df2 我想将df1的所有列(我有两列以上)与客户ID上的df2连接值相乘
问题内容: 我有一张桌子 提供值后,需要计算为 我想乘和列并将结果存储在同一表的列中。 我已经试过了: 但是失败了! 有人请帮助我实现这一目标。 问题答案: 尝试更新表格
该方法通过用户的输入获取给定数据集中的两个最大整数,并计算它们的乘积。它对每个输入都很有效,直到我尝试了两个整数和的数组,它返回。 这是我的Java方法: 这是我的方法:
我正在尝试将数组的每个“列”乘以一个特定的数字,然后对每个“行”的结果求和。 我能够找出如何在单个阵列中执行此操作,但在2d阵列中却很难找到。 我需要递归地做这件事,所以没有循环。有人能提供一个伪代码,或者解释我应该为每列采取什么步骤吗? 如何将此代码转换为2d数组版本?