矩阵中最大的行或列

时间:2018-09-16 08:24:29

标签: java arrays

`鉴于NxM 2D阵列,您需要找出所有行和列中哪一行或一列总体上具有最大的总和(其元素之和)。

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

第2行:单行包含N * M个元素,这些元素以行方式输入,每个元素之间用空格隔开。

输出格式:  如果行总和最大,则-“行” 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);
}

4 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

假设您将数组数据作为字符串,其中元素之间用空格分隔,并且将维数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;
}

答案 2 :(得分:0)

最后,我用相同的代码进行编码,并假设N * M个Matrix元素被空格分隔,并且其输出是行和列之间的最大和,并打印相应的行或列。

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

答案 3 :(得分:0)

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