Betrachten Sie ein Stück Schnur (wie in "Seil", nicht wie in "eine Reihe von Zeichen"), das auf der realen Linie hin und her gefaltet wird. Wir können die Form der Zeichenkette mit einer Liste von Punkten beschreiben, die sie durchläuft (in der Reihenfolge). Der Einfachheit halber nehmen wir an, dass alle diese Punkte ganze Zahlen sind.
Nehmen Sie als Beispiel [-1, 3, 1, -2, 5, 2, 3, 4]
(beachten Sie, dass nicht jeder Eintrag eine Falte impliziert):
Die Zeichenfolge, die sich in vertikaler Richtung erstreckt, dient nur zu Visualisierungszwecken. Stellen Sie sich vor, die Zeichenfolge ist auf die reale Linie abgeflacht.
Hier ist die Frage: In wie viele Stücke kann diese Saite mit einem einzigen Schnitt geschnitten werden (was im obigen Bild vertikal sein müsste)? In diesem Fall lautet die Antwort 6 mit einem Schnitt zwischen 2
und 3
:
Mehrdeutigkeiten zu vermeiden, der Schnitt muss bei einer nicht ganzzahligen Position durchgeführt werden.
Die Herausforderung
Wenn eine Liste von Ganzzahlpositionen angegeben wird, durch die eine Zeichenfolge gefaltet wird, müssen Sie die größte Anzahl von Teilen bestimmen, in die die Zeichenfolge mit einem einzelnen Schnitt an einer nicht ganzzahligen Position geschnitten werden kann.
Sie können ein vollständiges Programm oder eine Funktion schreiben. Sie können Eingaben über STDIN, Befehlszeilenargument, Eingabeaufforderung oder Funktionsparameter vornehmen. Sie können die Ausgabe in STDOUT schreiben, in einem Dialogfeld anzeigen oder von der Funktion zurückgeben.
Sie können davon ausgehen, dass die Liste in einem beliebigen geeigneten Listen- oder Zeichenfolgenformat vorliegt.
Die Liste enthält mindestens 2 und höchstens 100 Einträge. Die Einträge sind ganze Zahlen, jeweils im Bereich -2 31 ≤ p i <2 31 . Sie können davon ausgehen, dass keine zwei aufeinander folgenden Einträge identisch sind.
Ihr Code muss solche Eingaben (einschließlich der folgenden Testfälle) in weniger als 10 Sekunden auf einem vernünftigen Desktop-PC verarbeiten.
Testfälle
Alle Testfälle werden einfach eingegeben, gefolgt von der Ausgabe.
[0, 1]
2
[2147483647, -2147483648]
2
[0, 1, -1]
3
[1, 0, -1]
2
[-1, 3, 1, -2, 5, 2, 3, 4]
6
[-1122432493, -1297520062, 1893305528, 1165360246, -1888929223, 385040723, -80352673, 1372936505, 2115121074, -1856246962, 1501350808, -183583125, 2134014610, 720827868, -1915801069, -829434432, 444418495, -207928085, -764106377, -180766255, 429579526, -1887092002, -1139248992, -1967220622, -541417291, -1617463896, 517511661, -1781260846, -804604982, 834431625, 1800360467, 603678316, 557395424, -763031007, -1336769888, -1871888929, 1594598244, 1789292665, 962604079, -1185224024, 199953143, -1078097556, 1286821852, -1441858782, -1050367058, 956106641, -1792710927, -417329507, 1298074488, -2081642949, -1142130252, 2069006433, -889029611, 2083629927, 1621142867, -1340561463, 676558478, 78265900, -1317128172, 1763225513, 1783160195, 483383997, -1548533202, 2122113423, -1197641704, 319428736, -116274800, -888049925, -798148170, 1768740405, 473572890, -1931167061, -298056529, 1602950715, -412370479, -2044658831, -1165885212, -865307089, -969908936, 203868919, 278855174, -729662598, -1950547957, 679003141, 1423171080, 1870799802, 1978532600, 107162612, -1482878754, -1512232885, 1595639326, 1848766908, -321446009, -1491438272, 1619109855, 351277170, 1034981600, 421097157, 1072577364, -538901064]
53
[-2142140080, -2066313811, -2015945568, -2013211927, -1988504811, -1884073403, -1860777718, -1852780618, -1829202121, -1754543670, -1589422902, -1557970039, -1507704627, -1410033893, -1313864752, -1191655050, -1183729403, -1155076106, -1150685547, -1148162179, -1143013543, -1012615847, -914543424, -898063429, -831941836, -808337369, -807593292, -775755312, -682786953, -679343381, -657346098, -616936747, -545017823, -522339238, -501194053, -473081322, -376141541, -350526016, -344380659, -341195356, -303406389, -285611307, -282860017, -156809093, -127312384, -24161190, -420036, 50190256, 74000721, 84358785, 102958758, 124538981, 131053395, 280688418, 281444103, 303002802, 309255004, 360083648, 400920491, 429956579, 478710051, 500159683, 518335017, 559645553, 560041153, 638459051, 640161676, 643850364, 671996492, 733068514, 743285502, 1027514169, 1142193844, 1145750868, 1187862077, 1219366484, 1347996225, 1357239296, 1384342636, 1387532909, 1408330157, 1490584236, 1496234950, 1515355210, 1567464831, 1790076258, 1829519996, 1889752281, 1903484827, 1904323014, 1912488777, 1939200260, 2061174784, 2074677533, 2080731335, 2111876929, 2115658011, 2118089950, 2127342676, 2145430585]
2
a reasonable desktop PC
mehrdeutig?