2016-04-29 8 views
2

Ich schreibe eine Funktion, die das Maximum jeder Zeile in einem 2D-Array abruft und ein 1D-Array zurückgibt, wobei jeder Index relativ zur Spalte des 2D-Arrays ist Zeilenindex.java So finden Sie das Maximum jeder Zeile in einem 2D-Array

Zum Beispiel, wenn ich eine 2D-Array habe:

{1,2,3} 
{4,5,6} 
{7,8,9} 

es eine Reihe von

{3,6,9} 

hier zurückkehren sollte mein Code so weit:

double[] rowMaxes(double[][] nums) { 
    double [] count = new double [nums.length]; 
    for(int i = 0; i < count.length; i++){ 
     for(int x = 0; x < nums[0].length; x++){ 
      for(int n = 0; n < nums.length; n++){ 
       if(nums[x][n] > count[i]){ 
        count[i] = nums[x][n]; 
       } 
      } 
     } 
    } 
    return count; 
} 
+0

verweisen auf meine Java 8 einzeiler Lösung –

Antwort

1

Es gibt keine Notwendigkeit für 3 verschachtelte Schleifen. Sie benötigen nur zwei Schleifen:

for(int i = 0; i < count.length; i++){ 
    for(int x = 0; x < nums[0].length; x++){ 
     if(nums[i][x] > count[i]){ 
      count[i] = nums[i][x]; 
     } 
    } 
} 
+1

das Problem ist, dass dies nicht funktioniert mit negativen Zahlen, die das Maximum des 2d-Arrays sind; nur für Positives –

+0

@RandyHuang Wenn Ihr Array negative Zahlen enthalten könnte, sollten Sie alle Elemente des Array 'count' auf Integer.MIN_VALUE – Eran

+0

@RandyHuang initialisieren, wobei 'count [i] = nums [i] [0]; ' in der ersten Schleife –

0

Sie sollten Zeilen- und Spaltenlänge finden, bevor Sie in die Schleife gehen. Wenn Sie negative Zahlen berücksichtigen möchten, definieren Sie zuerst max als minimalen negativen Wert. diese Weise können Sie

public static void main(String[] args) { 
     double count[][] = {{1,2,3,8},{4,6,5,9},{0,8,9,1}}; 
     int r = count.length; 
     int c= count[0].length; 
     double out[] = new double[r]; 
     for(int i = 0; i < r; i++){ 
      double max = Integer.MIN_VALUE; 
      for(int x = 0; x < c; x++){ 
       if(count[i][x] > max) 
        max = count[i][x]; 
      } 
      out[i] = max; 
     } 
     for(int i=0;i<r;i++) 
      System.out.println(out[i]); 

    } 
0
public static int[] getMaxOfRow(int arr[][]){ 
    int grtr[]=new int[arr.length]; 
    grtr[0]=arr[0][0]; 
    for(int i=0;i<arr.length;i++){ 
     for(int j=0;j<arr[0].length;j++){ 
      if(arr[i][j]>grtr[i]){ 
       grtr[i]=arr[i][j]; 
      } 
     } 
    } 
    return grtr; 
}                         
+0

Willkommen zu Stackflow, empfehlen wir Ihnen dringend, den Leitfaden (hier) [https://StackOverflow.com/Help/how-to-answer] zu lesen, wie Sie die Frage beantworten. –

0

Seien Sie sich bewusst, dass Ihr Code wird nicht funktionieren, wenn alle Werte in einer Reihe sind kleiner als Null ist.
Wenn Sie ein neues Array erstellen, wird es mit dem Standardwert gefüllt - es ist Null.
Da müssen Sie in der ersten Schleife count[i] = nums[i][0] hinzufügen.

So etwas wie dieses

double[] rowMaxes(double[][] nums) { 
    double[] count = new double[nums.length]; 

    for (int i = 0; i < nums.length; i++) { 
     count[i] = nums[i][0]; 
     for (int j = 1; j < nums[i].length; j++) { 
      if (count[i] < nums[i][j]) { 
       count[i] = nums[i][j]; 
      } 
     } 
    } 

    return count; 
} 

Wenn Sie Java verwenden 8 können Sie innere Schleife mit Strom und max Methode ersetzen.

for (int i = 0; i < nums.length; i++) { 
    count[i] = Arrays.stream(nums[i]).max().getAsDouble(); 
} 
0

Wenn Sie bevorzugen es eine Zeile zu machen, das ist die Lösung mit jedem expliziten Looping:

Arrays.stream(nums).mapToInt((row) -> Arrays.stream(row).max().getAsInt()).max().getAsInt() 
Verwandte Themen