【问题标题】:How do you add all elements in an 2d array, circularly?如何循环添加二维数组中的所有元素?
【发布时间】:2020-05-03 10:53:52
【问题描述】:

给定一个二维字符串数组,我如何将所有元素相加,以使数组中的每个索引都是数组其余部分的总和?例如,对于数组[[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”。当我说循环时,我的意思是循环,没有额外的内存空间。所以也许在第一次迭代之后它可能看起来像 [[a], [a + b], [a+b+c], [a+b+c+d], [a+b+c+d+e]] 。这样的代码是什么?答案可以是伪代码或任何语言

类似这样的:https://andrew.gibiansky.com/blog/machine-learning/baidu-allreduce/

【问题讨论】:

  • 选择一种语言标签。我们对你知道什么语言名称不感兴趣。
  • 只做一次迭代,把它们全部相加,然后用这个值填充整个数组
  • 你说的是字符串数组,顺序重要吗?所有项目都必须相同吗?
  • @azro 那是不可能的,有没有一种方法可以让我看到该数组在每次迭代时都被“填满”?
  • 为什么不可能?

标签: java arrays algorithm


【解决方案1】:

根据您附加的链接,我认为以下解决方案将对您有所帮助:

        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();

【讨论】:

    【解决方案2】:

    我不太确定你想要实现什么。但是,如果您查看 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]
    

    【讨论】:

      【解决方案3】:

      您可以通过将所有元素添加到其中一项,然后将结果复制到其他项来获取此类字符串。

          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));
      

      【讨论】:

      • 它不像建议的操作链接
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-03
      • 1970-01-01
      • 1970-01-01
      • 2022-01-25
      • 1970-01-01
      • 2011-03-07
      相关资源
      最近更新 更多