Una dintre cele mai populare întrebări din interviu pentru java-dezvoltator este o cerere de a transforma matrice. Acest lucru este foarte similar cu întrebarea de la ultimul articol, despre linia de cotitură. dar un pic despre altceva. Problema nu pare complicat, tot ce trebuie să faceți este să creați o nouă matrice de aceeași dimensiune, du-te prin matrice originală de la capăt pentru a lovi un nou umplere. Totul este pregătit. Dar nu, am creat, de asemenea, o serie suplimentară de aceeași dimensiune ca originalul, ceea ce complică decizia noastră O (n). Nu putem folosi soluția noastră în cazul în care dimensiunea matrice este foarte mare (de exemplu, 10 de milioane de articole), și mici dimensiuni heap. Ce putem face aici? Cum de a îmbunătăți decizia noastră? Putem transforma peste o matrice fără a crea un tampon suplimentar? Pentru problema noastră, presupunem că avem o serie de întreg (în general, pentru un interviu este o bună practică de a pune întrebările potrivite în locurile potrivite, așa cum spun oamenii din știu este o trăsătură de programator bun). Cheia aici pentru a realiza că aveți nevoie pentru a transforma matricea originală, nu putem folosi alte matrice, dar pentru a utiliza una sau două variabile suplimentare, este foarte posibil. De asemenea, este inacceptabil de a utiliza biblioteci terțe părți sau API-ul Java, care poate face treaba pentru noi, precum și metode de clasă java.util.Arrays. cu excepția Arrays.toString () pentru a afișa matrice. Atunci când cerințele noastre clarificate începe să rezolve problema.
Primul lucru care vine în minte este de a itera peste toate elementele de matrice și de a le schimba. Primul element și ultimul, al doilea element cu penultima, etc. In acest caz, toate elementele de matrice vor fi întoarse fără a utiliza buffer suplimentar. Lucrul cel mai important aici este că trebuie să țină cont de acest lucru este doar ceea ce avem nevoie pentru a rearanja elementele până când vom ajunge la mijlocul de matrice, altfel vom obține aceeași matrice. Se pune întrebarea, ce se întâmplă dacă matricea are un număr par de elemente? În acest caz, în mijlocul matrice va fi cele două elemente, și avem nevoie pentru a le schimba, astfel încât starea noastră de sortare va conține un index de expresie <= middle а не index Așa cum se spune, mai bine să vezi o dată decât să citească de 100 de ori.
Mai jos este un exemplu de programul meu, care inversează matrice într-o singură trecere, doar o idee bună să te uiți la testele unitare pentru acest cod de mai jos pentru o mai bună înțelegere.
Mai jos este setul meu de teste JUnit pentru (int [] de intrare), metoda inversă noastre. Testele noastre ar trebui să acopere cazurile în care un array gol atunci când matrice în loc de nul. matrice conține un element, matrice are chiar și un număr impar de elemente.
În timp ce toate. Pentru a fi continuat.