Ca multe sarcini, totul depinde de modul în care vom susține aceste stive. Dacă trebuie să alocăm un anumit spațiu pentru fiecare stiva, puteți face acest lucru. Dar, în acest caz, unul dintre stive poate epuiza resurse, în timp ce altele vor fi aproape goale.
Puteți, desigur, utiliza un sistem mai flexibil de partajare a spațiului, însă acest lucru complică foarte mult sarcina.
Abordare 1. Separare fixă
Puteți împărți matricea în trei părți egale și permiteți stivele să se dezvolte într-un spațiu închis. Rețineți că vom descrie în continuare limitele intervalelor folosind paranteze: parantezele pătrate [] înseamnă că valorile limită sunt în interval și parantezele nu sunt incluse.
• Stivă 1: [0, n / 3).
• Stack 2: [n / 3, 2n / 3).
• Stivă 3: [2n / 3, n].
Codul pentru această soluție este prezentat mai jos:
Dacă avem informații suplimentare despre scopul stivei, putem modifica algoritmul. De exemplu, dacă se presupune că există mai multe elemente în stivă 1 decât în stivă 2, puteți redistribui spațiul în favoarea stivei 1.
Abordare 2. Separare flexibilă
A doua abordare este alocarea flexibilă a spațiului pentru blocurile de stivă. Când unul dintre stive nu se încadrează în spațiul sursă, mărim cantitatea de resurse cerută și, dacă este necesar, mutați elementele.
În plus, puteți crea o matrice în așa fel încât ultimul stiva să înceapă la sfârșitul matricei și să se termine la început - pentru a "loop în jurul" matricei.
Cu toate acestea, la interviu nu veți fi obligați să scrieți un cod atât de complex, așa că ne vom limita la o versiune simplificată (pseudocod).
În astfel de sarcini, este important să vă concentrați pe scrierea unui cod curat și ușor de urmărit. Trebuie să utilizați clase suplimentare, așa cum am făcut-o cu StackData, și trebuie să separați blocurile de coduri în metode separate. Acest sfat este util nu numai pentru interviu, ci poate fi folosit și în activități reale.