[英]How do you add all elements in an 2d array, circularly?
給定一個二維字符串數組,我如何將所有元素相加,以便數組中的每個索引都是數組的 rest 的總和? 例如數組[[a], [b], [c], [d], [e]]
我最終得到
[[a+b+c+d+e], [a+b+c+d+e], [a+b+c+d+e], [a+b+c+d+e],[a+b+c+d+e]]
。 我想它不一定是二維數組,它可以是一維字符串數組,我最終在每個索引中都有一個字符串“a+b+c+d+e”。 當我說循環時,我的意思是循環,沒有額外的 memory 空間。 所以也許在第一次迭代之后它可能看起來像[[a], [a + b], [a+b+c], [a+b+c+d], [a+b+c+d+e]]
。 這樣的代碼是什么? 答案可以是偽代碼或任何語言
像這樣的東西: https://andrew.gibiansky.com/blog/machine-learning/baidu-allreduce/
我不太確定你想要實現什么。 但是如果您查看Arrays#parallelPrefix
可能值得,您可以使用它來累積數組的單個元素。
public static void main(String[] args) {
String[] str = {"a","b","c","d","e"};
Arrays.parallelPrefix(str, (s1,s2) -> s1+s2);
System.out.println(Arrays.toString(str));
}
//[a, ab, abc, abcd, abcde]
您可以通過將所有元素添加到其中一個項目然后將結果復制到其他項目來獲取此類字符串。
String[] arr = new String[] {"a", "b", "c", "d", "e"};
for(int i = 1; i < arr.length; ++i) {
arr[0] += arr[i];
}
for(int i = 1; i < arr.length; ++i) {
arr[i] = arr[0];
}
System.out.println(Arrays.toString(arr));
根據您附加的鏈接,我認為以下解決方案將對您有所幫助:
int n = 5, i, j;
String[][] gpu = new String[n][n];
//here generate initial gpu....
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
char ch = (char) (97 + j);
gpu[i][j] = ""+ch+i;
}
}
System.out.println("Initial Gpu: ");
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
System.out.print(gpu[i][j] + "|");
}
System.out.println();
}
// here calculated your expected logic
for (i = 0; i < n-1; i++) {
for (j = 0; j < n; j++) {
gpu[(i+j+1)%n][j] = gpu[(i+j)%n][j] + gpu[(i+j+1)%n][j];
}
}
System.out.println("Final Gpu: ");
for (i = 0; i < n; i++) {
System.out.print(gpu[n-1][i] + "|");
}
System.out.println();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.