【问题标题】:Largest Row or Column in Matrix矩阵中最大的行或列
【发布时间】:2018-09-16 08:24:28
【问题描述】:

`给定一个 NxM 2D 数组,您需要找出所有行和列中总和(元素之和)最大的行或列。

输入格式: 第 1 行:2 个整数 N 和 M 分别用空格分隔

第 2 行:一行包含 N*M 个元素,按行方式输入,每个元素用空格分隔。

输出格式: 如果行总和最大,则 - "row" row_num max_sum 如果列总和最大,则 - "column" col_num max_sum

注意: 如果有一个以上的行/列具有最大总和,请考虑 首先出现的行/列。如果第 i 行和第 j 列的总和相同(其中 最大),将第 i 行视为答案。

下面是我的代码

public static void findLargest(int input[][]){
  int m=input.length;
  int n=input[0].length;
  int max = Integer.MIN_VALUE;
  int q = 0;
  int sum=0;
  String s = "";
 // int a[]=new int [m+n];
  //for row sum
  for(int i=0; i<n; i++)
  {
    sum=0;
    for(int j=0; j<m; j++)
    {
      sum =sum +input[i][j];

    }
    if(sum>max){
      max = sum;
      q = i;
      s = "row";
    }
    }
  // for col
  for(int i=0; i<m; i++)
  {
    sum=0;
    for(int j=0; j<n; j++)
    {
      sum=sum+input[j][i];

    }
  if(sum>max){
    max = sum;
    q = i;
    s = "column";
  } 
  }
  System.out.println(s + " "  + q + " " + max);
}

【问题讨论】:

  • 好像你在问一个家庭作业问题:请先看看How do I ask and answer homework questions。 Tl;dr:展示你的实现并询问你遇到的具体问题。
  • 您好,欢迎来到 StackOverflow!你的问题很不清楚。你能解释一下你的代码的哪一部分不起作用吗?创建minimal reproducible example 将是一个好的开始。另外,您可能想看看how-to-ask page
  • 嗨,我的代码在 MM 方阵上运行良好,但在 MN 型矩阵数组的情况下它会失败???我发现自己陷入了困境。

标签: java arrays


【解决方案1】:

你几乎得到了解决方案,唯一的问题是你没有在分别计算每一行和每一列的总和之前重置sum1sum2。在每种情况下,您都应该在第二个循环之前执行此操作。

【讨论】:

  • 我已经检查过了,但是在 M * N 类型的矩阵数组的情况下它会失败,它适用于方形矩阵数组@NiVeR
  • 嗯,你确定吗?
  • 是的,我确定。 3 4 1 2 3 4 5 6 7 8 9 10 11 12 线程“main”中的异常 java.lang.ArrayIndexOutOfBoundsException: 3 at javalangcharacter/javalangcharacter.checkkk.findLargest(checkkk.java:22) at javalangcharacter/javalangcharacter.checkkk.main (checkkk.java:61) @NiVeR
  • 好的,你最初切换了n,m。只需在初始化阶段 n 用 m 更改即可。
  • 真为方阵@NiVeR 4 4 6 7 8 9 6 5 7 8 5 6 8 8 1 2 3 4 row 0 30
【解决方案2】:

假设您将数组数据作为字符串,其中元素由空格分隔,并且您已将维度 N、M 保存为整数,那么以下代码应该可以解决您的问题。

private int findMax(String s, int N, int M) {
    return findMaxSum(s.split(" "), N, M);
}

private int findMaxSum(String[] data, int N, int M) {
    int max = 0;

    for (int i = 0; i < M; i++) {
        max = Math.max(columnSum(data, i, N, M), max);
        max = Math.max(rowSum(data, i, N, M), max);
    }

    return max;
}

private int columnSum(String[] data, int columnIndex, int N, int M) {
    int sum = 0;
    for (int i = 0; i < M; i++) {
        sum += Integer.parseInt(data[i * N + columnIndex]);
    }
    return sum;
}

private int rowSum(String[] data, int rowIndex, int N, int M) {
    int sum = 0;
    System.out.println("row");
    for (int i = 0; i < N; i++) {
        sum += Integer.parseInt(data[rowIndex * N + i]);
        System.out.println(data[rowIndex * N + i]);
    }
    return sum;
}

【讨论】:

    【解决方案3】:

    最后我编写相同的代码并假设 N*M 矩阵元素由空格分隔,其输出是行和列之间的最大总和,并打印相应的行或列。

    enter code here
    
    
    public static void findLargest(int input[][]){
      int m=input.length;
      int n=input[0].length;
      int max = Integer.MIN_VALUE;
      int q = 0;
      String s = "";
      for(int i=0; i<m; i++)
      {
        int sum=0;
        for(int j=0; j<n; j++)
        {
          sum =sum +input[i][j];
    
        }
        if(sum>max){
          max = sum;
          q = i;
          s = "row";
        }
      }
      for(int i=0; i<n; i++)
      {
       int sum=0;
        for(int j=0; j<m; j++)
        {
          sum=sum +input[j][i];
    
        }
      if(sum>max){
        max = sum;
        q = i;
        s = "column";
      } 
      }
      System.out.println(s + " "  + q + " " + max);
    }
    

    【讨论】:

      【解决方案4】:
      This code will work for every case, rather it be a square matrix or not -->
      ( The code has been written in 
      
      public static void rowOrColumn(int[][] input) {
              int rows = input.length;
              int columns = input[0].length;
              int largest = Integer.MIN_VALUE;
              int x = 0;
              int sum1 = 0;
              int sum2 = 0;
              String s = "";
              for(int i=0;i<rows;i++) {
                  sum1 = 0;
                  int j = 0;
                  for(;j<columns;j++) {
                      sum1 += input[i][j];
                  }
                  if(sum1>largest) {
                      largest = sum1;
                      x = i;
                      s = "row";
                  }
              }
              for(int i=0;i<columns;i++) {
                  sum2 = 0;
                  int j = 0;
                  for(;j<rows;j++) {
                      sum2 += input[j][i];
                  }
                  if(sum2>largest) {
                      largest = sum2;
                      x = i;
                      s = "column";
                  }
              }
          System.out.println(s + " " + x + " " + largest);
          }
      
          public static int[][] takeInput(){
              Scanner sc = new Scanner(System.in);
              int rows = sc.nextInt();
              int columns = sc.nextInt();
              int[][] arr = new int[rows][columns];
              for(int i=0;i<rows;i++) {
                  for(int j=0;j<columns;j++) {
                      arr[i][j] = sc.nextInt();
                  }
              }
              return arr;
          }
      
          public static void main(String[] args) {
              int[][] arr = takeInput();
              rowOrColumn(arr);
          }
      

      【讨论】:

        【解决方案5】:
        # LARGEST COLUMN SUM IN A 2-D ARRAY
        def lar_Col_Sum1(li):
            n = len(li) 
            m = len(li[0]) 
            max_sum = -1  
            max_sum = -1 
            for j in range(m):
                sum = 0
                for ele in li:
                    sum += ele[j]
                if sum>max_sum:
                    max_sum = sum
                    max_index = j
        
            max_rindex = -1
            max_rsum = -1
            for i in range(n):
                sum = 0
                for j in range(m):
                    sum += li[i][j]
                if sum > max_rsum:
                    max_rsum = sum
                    max_rindex = i
            if max_sum> max_rsum:
                print('column', max_index, max_sum)
            else:
                print('row', max_rindex, max_rsum)
        
        
        
        li = [[6,9,8,5],[9,2,4,1],[8,3,9,3],[8,7,8,6]]
        lar_Col_Sum1(li)
        

        【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-03-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多