Geben Sie für ein Array von ganzen Zahlen eine maximale Summe nicht benachbarter Elemente an. Zum Beispiel sollten die Eingänge [1, 0, 3, 9, 2, -1] 10 (1 + 9) zurückgeben.Maximale Summe nicht benachbarter Elemente in 1D-Array
sollte es 3,2 vermeiden, da 9 für 3,2 angrenzt. Maximum in Array + Maximum in Nicht angrenzenden Elementen von 9 (maximales Element in Array).
Da maximale Element ist 9 und nächste maximale, die nicht nebeneinander sein sollte. Daraus ergibt sich 9 + 1 = 10 (da 1 im nicht benachbarten Element des Maximums maximal ist).
Ich versuchte diesen Weg in O (n) + O (Max_Index-1) + O (Array.Length-Max_Index + 2).
Gibt es einen anderen Weg, so dass ich diesen Code in Bezug auf die zeitliche Komplexität optimieren kann.
import java.io.*;
import java.util.*;
//Maximum Sum of Non-adjacent Elements
public class Test{
public static void main(String args[])
{
int[] a={1, 0, 3, 9, 2,-1,-2,-7};
int max=a[0];
int max_index=0;
for(int i=1;i<a.length;++i)
{
if(max<a[i])
{
max=a[i];
max_index=i;
}
}
int m1=a[0];
for(int i=1;i<max_index-1;++i) //get maximum in first half from 0 to max_index-1
{
if(m1<a[i])
m1=a[i];
}
int m2=a[max_index+2];
for(int i=max_index+2;i<a.length;i++)//get maximum in second half max_index+2 to end in array.
{
if(a[i]>m2)
m2=a[i];
}
int two_non_adj_max=max+Math.max(m1,m2);
System.out.println(two_non_adj_max);
}
}
Die Lösung enthält nicht immer das maximale Element. Betrachten Sie die Reihenfolge "0, 8, 9, 8, 0". Suchen Sie nach der Summe von genau zwei Elementen oder einer beliebigen Anzahl nicht benachbarter Elemente? –
@NicoSchertler Vielen Dank für Ihre Antwort, aber im Falle von {0, 8, 9, 8, 0} ist das Maximum 9 und das nicht benachbarte Maximum in beiden Hälften ist 0, so dass die Antwort 0 + 9 = 9 ist. – ShreePool
Aber die maximale Summe wäre 8 + 8, oder? –