2016-10-30 3 views
0

Mit einem Array von positiven ganzen Zahlen a und einer ganzen Zahl k versuche ich einen Algorithmus zu finden, der mir die Länge des längsten Subarrays gibt, dessen Summe ist weniger als oder gleich zu k. Ich habe herausgefunden, wie man es in O (n^2) -Zeit löst, versuche aber, mich so nah wie möglich an O (n) zu lösen.Längstes Subarray mit einer Summe kleiner als gleich

Für eine O (n) -Lösung versuche ich einen Startindex und einen Endindex zu erstellen, die mir ein Fenster geben. Ich möchte überprüfen, ob die Summe in diesem Fenster < = k UND ist, wenn die Länge dieses Fensters größer ist als die zuletzt aufgezeichnete Länge. Beim Eintippen bricht jedoch meine Logik zusammen.

+0

Manchmal müssen Sie den Start mehrmals für ein einzelnes "i" verschieben. Versuchen Sie also, Ihren 'else'-Fallkörper in ein 'while (sum> k)' einzufügen. – Gassa

+2

Ich habe nicht sehr genau hingeschaut, aber ein kurzer Blick zeigt, dass Sie "maxLen" nie etwas zuweisen. Ich vermute 'currLen = maxLen' ist rückwärts. Haben Sie versucht, einen Debugger und einen einfachen Testfall zu verwenden? – The111

+1

Es scheint, maxLen wird nie aktualisiert und wird jedes Mal als 0 ausgegeben. Ich habe ein paar Probleme, da ich für beide maximale Länge UND Summe <= k überprüfen muss. – FlameDra

Antwort

1

Ich glaube, Sie

maxLen = currLen; 

meine ich glaube nicht, seinen Teil des Problems, aber sie nicht verwenden end und ich glaube nicht, dass es richtig aktualisiert wird. Einfach entfernen.

+0

Behoben, es funktioniert jetzt! – FlameDra

Verwandte Themen