Ich wurde ein Array von Zahlen (Integer) gegeben und ich muss das Element zurückgeben, wenn die Summe der Zahlen auf seiner rechten Seite gleich ist die Summe der Zahlen in seiner linken Größe in o (n).Prüfe, ob die Summe der linken Seite des Arrays gleich der rechten Seite des Arrays in o (n) ist
Zum Beispiel kann die Anordnung {1,2,2,9,3,2} sollte das Programm 9 drucken, da 1 + 2 + 2 = 5 und 3 + 2 = 5
ich meinen Code angehängt, aber es ist nicht o (n) Komplexität. schätze deine Hilfe.
Danke.
public class Program {
public static void checkIfEqualOption1(int[] arr){
int sumRight = 0;
int sumLeft=0;
//sumRight+=numbers[0];
for (int i=0; i < arr.length; i++){
if (i>0){
sumRight+=arr[i-1];
for (int j=i+1; j<arr.length; j++){
sumLeft+=arr[j];
}
if (sumRight==sumLeft){
System.out.println("\nFound = "+arr[i]);
break;
}
}
}
}
public static void print(int[] arr){
for (int i=0; i < arr.length; i++){
System.out.print(arr[i] + " ");
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("Hi");
int[] numbers = {1,2,2,9,3,2};
System.out.println("Array numbers:");
for (int i=0; i < numbers.length; i++){
System.out.print(numbers[i] + " ");
}
System.out.println("\n");
checkIfEqualOption1(numbers);
}
}
Ich würde nur den Mittelpunkt finden und dann zwei separate Schleifen haben. Die erste for-Schleife summiert die Werte bis zum Mittelpunkt und die zweite for-Schleife summiert die Werte nach dem Mittelpunkt. Dann vergleichen Sie einfach die beiden Summen und geben Sie, wenn sie gleich sind, den Mittelwert des Arrays zurück. –
Teilen und erobern, und überprüfen Sie die letzten beiden Summen vor dem Zusammenführen der letzten Zeit. – MeetTitan
Die Frage ist o (n) oder O (n), kleine oder große O-Notation? – cuongptnk