Überprüfen Sie, ob die Werte des Javascript-Arrays in aufsteigender Reihenfolge sind

8

Angenommen, ich habe ein Array von ganzen Zahlen in Javascript, das ich überprüfen möchte, ob alle seine Werte in aufsteigender Reihenfolge sind. Ich möchte den Array-Schlüssel in einem anderen Array speichern, falls der Algorithmus einen Wert findet, der niedriger (oder gleich) ist und nicht nur den unmittelbar vorherigen vergleicht, sondern auch einen Wert, der davor liegt. Was ich getan habe, war folgendes:

%Vor%

Offensichtlich überprüft das obige Algorightm nur die Werte, die niedriger sind als die vorhergehende.

Ein Array könnte folgende Werte enthalten:

arr = 1, 2, 3, 10, 5, 11, 12, 2, 4, 25

Die ungültigen Werte sind fett. Wenn ich die obige Schleife ausfühle, "fängt" sie nicht die zweitletzte ( 4 ), weil sie höher ist als ihr nächster linker Bruder , aber nicht so hoch wie seine alle linken Brüder .

BEARBEITEN:

Es wurden die folgenden Lösungen versucht, und keines gibt alle ungültigen Werte für dieses Array außer mir zurück. : (

Sie haben die letzten zwei Werte korrigiert, aber nicht die zweite. Ich verstehe aber nicht warum.

[24398, 24397 , 25004, 25177, 26302, 28036, 29312, 29635, 29829, 30476, 32595, 33732, 34995, 36047, 36363, 37310, 38022, 38882, 40746, 41212 42846, 43588, 44029, 44595, 44846, 45727, 46041, 47293, 48002, 48930, 49858, 51184, 51560, 53895, 54247, 54614, 55713, 56813, 57282, 57480, 57875, 58073, 58403, 60321, 61469 62051, 62310, 62634, 63217, 64505, 65413, 65677, 65940, 66203, 66572, 67957, 68796, 68964, 69098, 69233, 69435, 69759, 71496, 72577, 72823, 73007, 73252, 73743, 73866, 76405 77037, 77416, 77669, 79691, 80885, 81339, 81794, 82067, 82431, 83244, 84861, 86836, 88632, 89877, 90296, 91049, 91885, 92351, 92614, 93141, 93733, 93930, 94531, 95206, 95882 , 96895, 97732, 97973, 99261, 99422, 99583, 100332, 100599, 101666, 102066, 102600, 103504, 104432, 105174, 107216, 109085, 110181, 110679, 111177, 111988, 112553, 113005, 113457, 600 , 600 ]

    
Ricardus 29.04.2013, 19:09
quelle

8 Antworten

2

Wenn Sie ein Element nicht in der richtigen Reihenfolge finden, sehen Sie sich die nächsten Elemente an, bis sie nicht mehr in der Reihenfolge relativ zum Element vor der nicht ordnungsgemäßen Einheit sind.

Fügen Sie dem zweiten Array die Out-of-Order-Elemente hinzu und fahren Sie mit dem neuen In-Order-Element fort.

%Vor%     
kennebec 29.04.2013, 20:06
quelle
9

Behalte den größten Wert, den du gesehen hast ( siehe die Geige ):

%Vor%     
cdhowie 29.04.2013 19:15
quelle
3
Joseph 29.04.2013 19:16
quelle
1

DEMO

%Vor%     
Roko C. Buljan 29.04.2013 19:50
quelle
1

eine einfache Funktion, um es inline ohne Schleifen oder Variablen zu tun:

%Vor%     
dandavis 29.04.2013 20:38
quelle
1

Eine andere sehr nette, funktionale Art, dies zu tun, könnte sein:

%Vor%
    
Redu 08.10.2017 23:30
quelle
0

Kopieren Sie zuerst das Array, entfernen Sie alle Elemente, die nicht in Ordnung sind mit array.splice(index, 1) , und fahren Sie fort. Auf diese Weise muss jedes Element größer als das vorherige sein, aber das Recht davor wird immer das Maximum sein.

    
dave 29.04.2013 19:14
quelle
0

Nachdem ich meine eigenen Fragen beantwortet habe, habe ich folgendes Algorightm versucht. Es scheint seinen Job zu machen, aber es ist ein bisschen übertrieben.

  

für (var i = 0; i & lt; arr.length; i ++) {

%Vor%
    
Ricardus 29.04.2013 19:22
quelle

Tags und Links