Come posso trovare in modo efficiente il più grande intervallo positivo in un array non orientato? [duplicare

cs.stackexchange https://cs.stackexchange.com/questions/102724

  •  05-11-2019
  •  | 
  •  

Domanda

Questa domanda ha già una risposta qui:

Dato un insieme di valori come [4, 8, 1, 5, 2, 6, 9, 2, 3, 5, 11, 9], come posso trovare il più grande intervallo positivo tra due di essi? Ad esempio in quello che ho appena elencato, l'indice da 0 a indice 1 ha un intervallo di 4 perché 8 - 4 = 4. Ma il più grande intervallo positivo è tra l'indice 2 e l'indice 10, perché 11 - 1 = 10.

Vedo che c'è un modo per farlo in tempo lineare, ma non riesco a capire di cosa si tratta. La soluzione N^2 Brute Force è semplice, ma voglio capire il modo migliore.


Per essere chiari, il più grande intervallo positivo in [20, 1, 4] sarebbe 3, non 19, perché 20 -> 1 è un intervallo di -19.


La soluzione che vorrei avanzare è quella di tradurre l'array in tempo lineare in una serie di differenze, ad esempio [20, 1, 7, 4, 2] diventa [0, -19, 6, -3, -2] e quindi Usa l'algoritmo di Kadane per trovare la massima sottosequenza contigua. La più grande sottosequenza sarebbe 6 Da solo, implicando indici 1 e 2 hanno fornito la risposta.

Nessuna soluzione corretta

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a cs.stackexchange
scroll top