2016-05-21 4 views
-1

Also muss ich einige komplizierte Array-Manipulation tun und habe einige Schwierigkeiten. Ich dachte, ich könnte euch um Hilfe bitten.Array-Manipulation - Verschieben Sie Elemente und fügen Sie ähnlich in Java

Wie auch immer, was ich versuche zu tun ist im Grunde Folgendes. Nehmen wir an, ich habe eine Reihe von Zahlen, mit Nullen gepfeffert. Also, was ich tun möchte, ist, alle Elemente bis zum Anfang des Arrays zu bewegen und daher die Elemente mit Zereos in ihnen zu füllen.

Ich werde ein Beispiel verwenden, um zu erklären; Sagen wir das Array: {4,4,0,2,0,2}

Was ich tun möchte, ist: {4,4,2,2,0,0}

Also, alle Zahlen sind in einem Bereich grundsätzlich und sortiert. Nun wird die zweite Sache, die ich tun möchte, ist es, alle ähnliche Zahlen addieren, so dass, wenn wir mit dem obigen Beispiel fortzufahren: {8,4,0,0,0,0}

Nun, was ich versucht haben, im Grunde durch die gesamte Schleife ausgeführt wird und das nächste Element bewegen zurück, wenn Ich sehe eine Null und ersetze das durch eine Null, aber das führt zu einigen Problemen.

Einige Vorschläge wären genial. Thansk

Edit:

ich herausgefunden, wie die Sortierung usw. zu tun und ein wenig von der Zugabe ist hier, was ich habe. Bitte lassen Sie mich wissen, wenn Sie Vorschläge machen, um es besser zu machen.

Die Sortierung ist jedoch in Ordnung, aber es gibt ein kleines Problem mit der Zugabe von ähnlichen Elementen. Also, wenn wir etwas wie {2,2,2,2,0,0} nach dem Sortieren dann meine Addition Teil wird dies tun: {8,0,0,0,0,0} was ist nicht das, was ich will. Was es sein sollte ist {4,4,0,0,0,0}

+0

Ist es wie 2048 oder nicht? Das heißt, mit dem Array {2,4,2,0,4}, sollte es {8,4,0,0,0} oder {2,4,2,4,0} ergeben? Oder etwas anderes ? –

+0

Gut. Für ein Array wie {2,4,2,0,4} sollte es {2,4,2,4,0} ergeben. Deshalb ist eine Bestellung notwendig. Auch ich habe es gerade bemerkt. Es ist im Grunde wie 2048. Hatte keine Ahnung. Vielleicht schaue ich mir mal an, was jemand davon gemacht hat. : P – Azazel

Antwort

1

Eine einfache Möglichkeit, das zu tun, ist die Arbeit in zwei Teile zu teilen: Kombinieren Sie Paare, und schieben Sie Elemente nach links. Über die Reihenfolge der Operationen:

pushLeft then combine 
Orignal array: {4,2,0,2,0,4} 
After pushLeft: {4,2,2,4,0,0} 
After combine: {4,4,4,0,0,0} 

Bei dieser Reihenfolge müssen Sie auf die Löcher achten, die Sie beim Kombinieren von Werten erstellen.

combine then pushLeft 
Orignal array: {4,2,0,2,0,4} 
After combine: {4,4,0,0,0,4} 
After pushLeft: {4,4,4,0,0,0} 

Diese können mit einer einfachen Schleife für jede Funktion implementiert werden. Es gibt auch die Möglichkeit, alles in einer einzigen Schleife zu tun (zusammenfügen und nach links drücken), aber es ist schwieriger.

Mein Code ist unten (2. Methode), aber man kann sich geben wollen ein versuchen es vor:

public static int[] goLeft(int[] a) { 
    int[] arr = a.clone(); 
    for (int j = 0, i = 0; j < arr.length; j++) { 
     if (arr[j] != 0) { 
      arr[i] = arr[j]; 
      if (i++ != j) arr[j] = 0; 
     } 
    } 
    return arr; 
} 

public static int[] combine(int[] a) { 
    int[] arr = a.clone(); 
    for (int j = 1, i = 0; j < arr.length; j++) { 
     if (arr[i] == 0 && arr[j] != 0) { 
      i = j; 
     } else if (arr[j] != 0 && i != j) { 
      if (arr[j] == arr[i]) { 
       arr[i] *= 2; 
       arr[j] = 0; 
       i = j; 
      } else { 
       i = j; 
      } 
     } 
    } 
    return arr; 
} 

public static void main(String[] args) { 
    int[] a1 = new int[] {4,2,0,2,4}; 
    System.out.println(Arrays.toString(a1)); 
    System.out.println(Arrays.toString(Main.goLeft(Main.combine(a1)))); 
    // [4, 4, 4, 0, 0] 
} 
Verwandte Themen