Angenommen, zwei Elemente fehlen in einer Folge aufeinanderfolgender Ganzzahlen und die fehlenden Elemente liegen zwischen dem ersten und letzten Element. Ich habe einen Code geschrieben, der die Aufgabe erfüllt. Ich wollte es jedoch effizienter machen, wenn es möglich ist, weniger Schleifen zu verwenden. Jede Hilfe wird geschätzt. Auch was ist mit der Bedingung, wenn wir mehr fehlende Elemente (sagen wir nahe bei n/4) statt 2 finden müssen. Ich denke, dann sollte mein Code effizient sein, weil ich früher aus der Schleife ausbricht?Effiziente Methode, um fehlende Elemente in einer Ganzzahl zu finden
def missing_elements(L,start,end,missing_num):
complete_list = range(start,end+1)
count = 0
input_index = 0
for item in complete_list:
if item != L[input_index]:
print item
count += 1
else :
input_index += 1
if count > missing_num:
break
def main():
L = [10,11,13,14,15,16,17,18,20]
start = 10
end = 20
missing_elements(L,start,end,2)
if __name__ == "__main__":
main()
Ich habe den Code jetzt bearbeitet. Vielen Dank. – vkaul11
Wie genau benutze ich in diesem Fall die binäre Suche, wenn ich den fehlenden Wert, den ich suche, nicht kenne? – vkaul11
nicht genau binäre Suche, aber Sie können daraus schließen, dass der Teil der Liste zwischen unten und Index vollständig aufeinander folgend ist, wenn L [Index] == L [unten] + (Index - unten). Dies kombiniert mit der Aufspaltung der Liste in zwei sollte eine sublineare Lösung ergeben. –