Top 50 de întrebări și răspunsuri la interviu Array (2026)
Te pregătești pentru un interviu Array? E timpul să te concentrezi asupra întrebărilor care ți-ar putea apărea. Înțelegerea {{keyword}} îi ajută pe candidați să își demonstreze eficient atuurile în rezolvarea problemelor, gândirea analitică, logica și capacitatea de a rezolva probleme.
Tablourile de programare stau la baza experienței tehnice și profesionale pentru programatori. De la începători la profesioniști seniori, stăpânirea lor demonstrează o puternică expertiză tehnică și o experiență vastă în manipularea datelor. Angajatorii apreciază astfel de abilități în timpul sesiunilor de întrebări și răspunsuri, ajutând...ping Candidații trec de testele obișnuite, avansate sau orale cu analiză sigură și abilități practice.
Bazată pe informații de la peste 85 de lideri tehnici, manageri și profesioniști, această colecție acoperă perspective diverse din diverse industrii, asigurându-se că fiecare subiect reflectă așteptări autentice de angajare și standarde de evaluare a codării din lumea reală.

Întrebări și răspunsuri de top pentru interviuri Array
1) Explicați ce este un tablou și cum diferă acesta de alte structuri de date.
Un tablou (array) este un bloc continuu de memorie care stochează mai multe elemente de același tip de date. Permite accesul în timp constant la orice element folosind indexul său, ceea ce îl face una dintre cele mai eficiente structuri pentru acces aleatoriu. Spre deosebire de listele înlănțuite, tablourile au o dimensiune fixă și nu necesită supraîncărcare pentru stocarea pointerilor. Tablourile sunt preferate atunci când numărul de elemente este cunoscut în avans, în timp ce structurile dinamice, cum ar fi listele sau vectorii, sunt utilizate atunci când se așteaptă redimensionarea frecventă.
| Caracteristică | Mulțime | Listă legată |
|---|---|---|
| Alocare de memorie | contiguu | Necontiguu |
| Timpul de acces | O (1) | O (n) |
| Inserare/Ștergere | costisitor | Eficient |
| Memorie Overhead | Scăzut | Ridicat (indicii) |
👉 Descărcare gratuită în format PDF: Întrebări și răspunsuri pentru interviul Array
2) Care sunt diferitele tipuri de tablouri? Dați exemple.
Matricele sunt clasificate în funcție de dimensiunile și utilizarea lor. Tipurile principale includ:
- Matrice unidimensională: Stochează elementele liniar, de exemplu,
int arr[5] = {1,2,3,4,5}. - Matrice bidimensională: Reprezintă date tabelare, de exemplu, matrice.
- Matrice multidimensională: Dimensiuni superioare, adesea utilizate în simulări sau procesare de imagini.
- Matrici dinamice: Redimensionează automat când sunt adăugate elemente, de ex.
ArrayListin Java,vectorin C++.
| Tip | Structure | Exemplu |
|---|---|---|
| 1D | Liniar | [1, 2, 3] |
| 2D | Matrice | [[1, 2], [3, 4]] |
| Dinamic | resizable | std::vector<int> |
3) Cum găsești cele mai mari și cele mai mici elemente dintr-un tablou?
Această problemă este adesea rezolvată folosind o traversare liniară. Mențineți două variabile - una pentru minim și una pentru maxim - și le actualizați în timpul iterației.
algoritm:
- inițializa
minșimaxcu primul element. - Parcurgeți matricea și comparați fiecare element.
- Actualizează
minormaxîn consecinţă.
Exemplu (C++):
int arr[] = {5, 2, 9, 1, 7};
int min = arr[0], max = arr[0];
for (int i : arr) {
if (i < min) min = i;
if (i > max) max = i;
}
Complexitatea timpului: Pe).
4) Care sunt avantajele și dezavantajele matricelor?
Matricele oferă performanțe ridicate pentru acces aleatoriu, dar au dimensiune fixă și redimensionare costisitoare.
| Aspect | Avantaje | Dezavantaje |
|---|---|---|
| Performanţă | Indexare rapidă (O(1)) | Inserare/ștergere lentă (O(n)) |
| Memorie | Depozitare compactă | Alocare statică a dimensiunii |
| Punerea în aplicare | Sintaxă simplă | Verificare fără limite în unele limbi |
| Utilizare caz | Potrivit pentru seturi de date fixe | Ineficient pentru modificări frecvente |
5) Descrieți diferența dintre tablourile statice și cele dinamice.
A matrice statică are o dimensiune fixă determinată la momentul compilării, în timp ce un matrice dinamică poate crește sau se poate micșora în timpul execuției. Tablourile statice sunt eficiente în memorie, dar rigide, în timp ce tablourile dinamice oferă flexibilitate cu un cost suplimentar ușor în timpul redimensionării.
| Caracteristică | Matrice statică | Matrice dinamică |
|---|---|---|
| Mărimea | Fixed | Variabil |
| Memorie | Stivui | movilă |
| Exemplu | int arr[5]; |
std::vector<int> |
| redimensionarea | Nu este suportat | Suportat |
Exemplu de caz de utilizare:
Folosește matrice statice în sistemele integrate și matrice dinamice pentru colecții cu dimensiuni imprevizibile.
6) Cum poți inversa o matrice in situ?
RevȘtergerea unui array in-place implică swapping elemente de la ambele capete mișcându-se spre centru.
algoritm:
- Inițializați doi pointeri:
start = 0șiend = n - 1. - Schimbați elementele
arr[start]șiarr[end]. - Creştere
startși decrementareendpână se întâlnesc.
Exemplu (Python):
arr = [1, 2, 3, 4, 5] arr.reverse() # Built-in method # or manually arr = arr[::-1]
Complexitatea timpului: Pe), Complexitatea spațială: O(1).
7) Care este diferența dintre o matrice zimțată și o matrice multidimensională?
A matrice zimțată este o matrice de matrici în care matricele interioare pot avea lungimi diferite, în timp ce o matrice multidimensională are dimensiuni uniforme pentru rânduri și coloane.
| Caracteristică | Matrice zimțată | Matrice multidimensională |
|---|---|---|
| Structure | Neregulate (matrice imbricate) | Dreptunghiular (matrice) |
| Memorie | Necontiguu | contiguu |
| Fără efort | arr[i][j] |
arr[i][j] |
| Exemplu | int[][] jagged = {{1,2}, {3,4,5}}; |
int[,] matrix = {{1,2}, {3,4}}; |
Matricele zimțate sunt mai eficiente din punct de vedere al memoriei atunci când datele sunt neuniforme.
8) Cum găsești numărul lipsă dintr-un tablou de la 1 la n?
Această problemă valorifică proprietățile matematice ale numerelor naturale.
Abordarea 1 (Formula de însumare):
Suma primelor n numere naturale = n*(n+1)/2.
Subtract suma elementelor matricei din acest total.
Abordarea 2 (XOR):
Execută operația XOR pentru toate elementele cu numere de la 1 la n. Valoarea rămasă este numărul lipsă.
Exemplu:
Pentru [1,2,4,5,6] (n=6):
Suma așteptată = 21, Suma reală = 18 → Lipsește = 3.
Complexitatea timpului: Pe), Complexitatea spațială: O(1).
9) Care sunt diferitele modalități de a elimina duplicatele dintr-un array?
Există mai multe abordări în funcție de limbaj și constrângeri:
- Folosind HashSet: Stocați doar elemente unice.
- Folosind sortarea: Sortează matricea și elimină duplicatele adiacente.
- Folosind harta de frecvență: Track numărări ale fiecărui element.
Exemplu (Java):
Set<Integer> unique = new HashSet<>(Arrays.asList(arr));
| Abordarea | Timp | Spaţiu |
|---|---|---|
| HashSet | O (n) | O (n) |
| triere | O (n jurnal n) | O (1) |
| Frecvență | O (n) | O (n) |
10) Cum găsești al doilea cel mai mare element dintr-un tablou?
Puteți găsi al doilea element ca mărime folosind o singură traversare, menținând două variabile.
algoritm:
- inițializa
firstșisecondasINT_MIN. - Traversați matricea.
- Actualizați ambele când se găsește o valoare mai mare.
Exemplu (C++):
int first = INT_MIN, second = INT_MIN;
for (int x : arr) {
if (x > first) {
second = first;
first = x;
} else if (x > second && x < first) {
second = x;
}
}
Complexitatea timpului: Pe), Complexitatea spațială: O(1).
11) Cum poți roti o matrice cu „k” poziții? Explică diferitele abordări.
Rotația matricei deplasează elementele ciclic. Există trei metode principale pentru a o realiza:
- Utilizarea unei matrice temporare: Copiați primele k elemente și adăugați-le la sfârșit după deplasarea celorlalte.
- Utilizarea RevAlgoritmul ersal: Reverse trei părți ale matricei – prima parte, a doua parte, apoi întreaga matrice.
- Folosind algoritmul de jonglerie: Bazat pe cmdc-ul lui n și k (eficient în O(n)).
Exemplu (rotație la dreapta cu 2):
Input: [1,2,3,4,5] Output: [4,5,1,2,3]
| Metodă | Timp | Spaţiu | Descriere |
|---|---|---|---|
| Matrice temporară | O (n) | Bine) | Simplu și intuitiv |
| Reversal | O (n) | O (1) | La fața locului și eficient |
| Jonglerie | O (n) | O (1) | Bazat pe ciclurile GCD |
12) Ce este un subarray și cum diferă de o subsecvență?
A submatrice este o secțiune contiguă a unui tablou, în timp ce un subsecvență menține ordinea, dar poate sări peste elemente.
| Proprietatea | Submatrice | Subsecvență |
|---|---|---|
| contiguu | Da | Nu |
| Comandă păstrată | Da | Da |
| Exemplu (din [1,2,3]) | [1,2] | [1,3] |
Exemplu:
Matrice dată [1,2,3], total submatrici = n*(n+1)/2 = 6.
Subsecvențele, pe de altă parte, sunt 2ⁿ - 1 = 7 combinații nevide.
13) Cum se găsește submatricea cu sumă maximă?
Algoritmul lui Kadane este cea mai eficientă metodă de a găsi submatricea contiguă cu suma maximă.
Pași:
- inițializa
max_current = max_global = arr[0]. - Iterează prin elemente.
- Actualizează
max_current = max(arr[i], arr[i] + max_current). - Track maximul global.
Exemplu:
Intrare: [-2,1,-3,4,-1,2,1,-5,4] → Ieșire: 6 (submatrice [4,-1,2,1]).
Complexitate:
O(n) timp, O(1) spațiu.
14) Cum poți îmbina două tablouri sortate fără a utiliza spațiu suplimentar?
Pentru a îmbina două tablouri sortate la loc, ideea este de a compara de la sfârșitul ambelor matrici.
Abordare:
- Începeți de la ultimul element valid al ambelor tablouri.
- Comparați și mutați-l pe cel mai mare la capătul spațiului combinat.
- Repetați până când toate elementele sunt îmbinate.
Exemplu (C++):
int i = m-1, j = n-1, k = m+n-1;
while (i >= 0 && j >= 0) {
if (A[i] > B[j]) A[k--] = A[i--];
else A[k--] = B[j--];
}
Complexitatea timpului: O(m+n).
15) Care sunt diferitele modalități de a căuta un element într-un tablou?
| Metodă | Tip | Complexitatea timpului | Exemplu de utilizare |
|---|---|---|---|
| Căutare liniară | Nesortat | O (n) | Căutare generală |
| Căutare binară | Sortare | O (jurnal n) | Căutare eficientă |
| hashing | Neordonat | O(1) medie | Seturi mari de date |
Exemplu (Căutare binară – Python):
def binary_search(arr, x):
l, r = 0, len(arr)-1
while l <= r:
mid = (l+r)//2
if arr[mid] == x: return mid
elif arr[mid] < x: l = mid+1
else: r = mid-1
return -1
16) Explicați diferența dintre copierea superficială și copierea profundă în matrice.
A copie superficială copiază referințele la elementele originale, în timp ce un copie adâncă duplică toate datele în noi locații de memorie.
| Tip de copiere | Independența datelor | Exemplu |
|---|---|---|
| Superficial | Nu | arr_copy = arr |
| adâncime | Da | arr_copy = arr[:] (Python) |
Exemplu:
Modificarea unei copii superficiale se reflectă în matricea originală; copierea profundă nu.
17) Cum găsești duplicate într-un array fără a utiliza spațiu suplimentar?
Abordarea 1 (Sortare): Sortează și verifică elementele adiacente.
Abordarea 2 (Metoda de negare pentru valori 1–n): Marchează indexurile vizitate prin negarea elementului de la indexul respectiv.
Abordarea 3 (Detecția ciclului Floyd): Tratați tabloul ca o listă înlănțuită și găsiți ciclul (pentru elemente repetate în intervalul [1..n]).
Exemplu:
Mulțime [3,1,3,4,2] → Duplicat = 3.
Durata evenimentului: Pe), Spaţiu: O(1).
18) Ce sunt tablourile disperse și ce beneficii au acestea?
A matrice dispersă conține în mare parte valori zero sau implicite. În loc să stocăm toate elementele, stocăm doar intrări diferite de zero cu indicii lor.
avantaje:
- Economisește memorie.
- Eficient pentru seturi de date mari, cum ar fi matricele sau frecvențele termenilor din documente.
| Tip | Exemplu | Utilizare caz |
|---|---|---|
| Matrice densă | [0,1,0,2,3] |
Date mici |
| Matrice dispersă | {1:1, 3:2, 4:3} |
Date mari și rare |
Exemplu: Utilizat în modele de învățare automată (matrici TF-IDF).
19) Cum poți găsi eficient intersecția a două tablouri?
Intersecția poate fi găsită folosind tehnici de hashing sau sortare.
- Folosind HashSet: Adăugați elemente ale primului tablou, apoi verificați apartenența la al doilea.
- Folosind doi indicatori: Funcționează pentru tablouri sortate.
Exemplu (Python):
intersection = list(set(arr1) & set(arr2))
Complexitate:
- HashSet: O(n)
- Doi indicatori: O(n log n) datorită sortării.
20) Explicați diferența dintre ordinea pe rânduri majore și ordinea pe coloane majore în tablouri.
Acestea sunt ordine de stocare în memorie utilizate pentru matrici multidimensionale.
| Concept | Rândul major (C/C++) | Coloană-Major (Fortran, MATLAB) |
|---|---|---|
| Ordin de depozitare | Rând cu rând | Coloană cu coloană |
| Formula de adresă | Base + ((i * cols) + j) * size |
Base + ((j * rows) + i) * size |
| Avantaj | Mai rapid pentru parcurgerea rândurilor | Mai rapid pentru traversarea coloanelor |
Exemplu:
Pentru o matrice 2D A[2][3]magazine de rang înalt [A[0][0], A[0][1], A[0][2], A[1][0], ...].
21) Ce este tehnica sumei prefixelor și cum se utilizează în tablouri?
sumă prefix Tehnica implică precalcularea sumelor cumulative ale unui tablou pentru a răspunde eficient la interogările de interval.
Concept:
prefix[i] = prefix[i-1] + arr[i]
Apoi, pentru a obține suma elementelor de la l la r, folosiți:
sum(l, r) = prefix[r] - prefix[l-1]
Exemplu:
Matrice = [2, 3, 5, 7, 1]
Prefix = [2, 5, 10, 17, 18]
Suma(2,4) = prefix[4] - prefix[1] = 15
Aplicații:
Folosit în interogări de sumă a subarray-urilor, tabele de frecvență cumulativă și programare competitivă.
Complexitate:
Preprocesare: O(n), Interogare: O(1)
22) Cum îmbunătățește tehnica ferestrei glisante performanța matricei?
fereastra glisanta Tehnica este utilizată pentru a rezolva eficient probleme care implică segmente contigue (subarray-uri).
Ideea: În loc să recalculați suma sau condiția pentru fiecare fereastră, actualizați rezultatul adăugând următorul element și eliminându-l pe primul.
Exemplu de problemă:
Găsiți submatricea sumei maxime de dimensiune k.
algoritm:
- Calculați suma primelor
kelemente. - Glisați fereastra câte un element pe rând.
- Adăugați noul element, eliminați primul și track maximul.
Complexitatea timpului: O(n) — mult mai rapid decât abordarea naivă O(n×k).
Aplicații:
Folosit în probleme precum submatricea medie maximă, cel mai lung subșir sau primul număr negativ din fiecare fereastră.
23) Care este diferența dintre un tablou și un pointer în limbajul C?
| Caracteristică | Mulțime | Pointer |
|---|---|---|
| Definiție | Colectarea de elemente de date similare | Adresă de memorie pentru stocarea variabilelor |
| Alocare de memorie | contiguu | Dinamic sau arbitrar |
| Mărimea | Fixed | Poate fi redimensionat |
| Exemplu | int a[5]; |
int *p; |
Diferența cheie:
Un nume de matrice acționează ca un pointer constant, dar un pointer poate indica oriunde dinamic.
Exemplu:
int arr[3] = {1,2,3};
int *ptr = arr; // ptr points to first element
24) Cum poți găsi indicele de echilibru într-un tablou?
An indice de echilibru este o poziție în care suma elementelor din stânga este egală cu suma elementelor din dreapta.
algoritm:
- Calculați suma totală a tabloului.
- Parcurgeți și mențineți suma din stânga.
- If
(total_sum - left_sum - arr[i]) == left_sum, returnează indexul.
Exemplu:
Matrice: [1, 3, 5, 2, 2] → Index = 2 (deoarece suma din stânga = suma din dreapta = 4)
Complexitate: Pe), Spaţiu: O (1)
25) Ce sunt matricile rare și cum sunt acestea stocate eficient?
A matrice rară conține în mare parte zerouri. Pentru a economisi memorie, sunt stocate doar elementele diferite de zero și indicii acestora.
Metode de depozitare:
- Listă de coordonate (COO): Stochează (rând, coloană, valoare).
- Rânduri rare comprimate (CSR): Trei tablouri:
values,col_index,row_pointer. - Dicționar de chei (DOK): Hartă hash a (rândului, coloanei) → valorii.
| Metodă | Eficiența memoriei | Exemplu de utilizare |
|---|---|---|
| GÂNGURI | Moderat | Depozitare generală |
| CSR | Înalt | Calcule numerice |
| D.O.K. | Instalare | Inserare dinamică |
Utilizat pe scară largă în masina de învățare (TF-IDF, matrici de adiacență a grafurilor).
26) Cum rearanjezi o matrice astfel încât numerele pare și impare să alterneze?
Scopul este de a intercala numerele pare și impare, menținând în același timp ordinea lor relativă.
algoritm:
- Separă tablourile pare și impare.
- Îmbinați alternativ, începând cu par sau impar.
- Dacă un tip se epuizează, adăugați-l pe cel rămas.
Exemplu:
Input: [3, 6, 12, 1, 5, 8] Output: [6, 3, 12, 1, 8, 5]
Complexitate: O (n)
27) Explicați diferența dintre rotirea matricei și deplasarea matricei.
| Ziua Operației | Rotație | ShiftING |
|---|---|---|
| Definiție | Elementele se mișcă circular | Elementele se mișcă, locurile libere se ocupă (de exemplu, 0s) |
| Exemplu | [1,2,3,4] → [3,4,1,2] |
[1,2,3,4] → [0,1,2,3] |
| Date pierdute | Nu | Da |
| Folosire | Rearanjamente ciclice | Implementări de coadă |
În rezumat:
Rotația este reversibilă; deplasarea, de obicei, nu este.
28) Cum poți găsi submatricea maximă a produsului?
Similar cu algoritmul lui Kadane, dar tu track atât produsele maxime, cât și cele minime datorate valorilor negative.
algoritm:
- inițializa
max_ending_here = min_ending_here = arr[0]. - Iterați și actualizați ambele pe baza elementului curent.
- Track
max_so_far.
Exemplu:
Intrare: [2,3,-2,4] → Ieșire: 6 (submatrice [2,3])
Complexitate: Pe), Spaţiu: O (1)
29) Cum poți număra eficient numărul de submatrici cu o sumă dată?
Abordare (Sumă de prefixe + Hartă hash):
- Mențineți suma curentă în timpul iterării.
- Pentru fiecare sumă de prefixe, verificați dacă
(current_sum - target)există în harta hash. - Incrementați numărul în mod corespunzător.
Exemplu:
arr = [10,2,-2,-20,10], target = -10 Output = 3 subarrays
Complexitatea timpului: O (n)
Complexitatea spațială: O (n)
30) Ce este manipularea biților în problemele de tip matrice și unde se aplică?
Manipularea biților implică efectuarea de operații precum ȘI, SAU, XOR și deplasări pentru a rezolva problemele eficient.
Aplicații comune:
- Găsirea unui singur element nerepetitiv folosind XOR.
- Verificarea existenței unui subset folosind mascarea biturilor.
- Reprezentarea mulțimilor ca vectori de biți.
Exemplu:
Găsiți elementul care apare o dată când celelalte apar de două ori:
int res = 0; for (int num : arr) res ^= num;
avantaje:
- Spațiu constant
- Calcul logic rapid
31) Cum parcurgi o matrice în ordine spiralată?
A traversare în spirală vizitează toate elementele matricei strat cu strat în sensul acelor de ceasornic.
algoritm:
- Definiți patru limite:
top,bottom,leftșiright. - Traversare de la stânga → dreapta, de sus → jos, de dreapta → stânga și de jos → sus.
- Micșorați limitele după fiecare trecere până când toate elementele sunt acoperite.
Exemplu:
Input: 1 2 3 4 5 6 7 8 9 Output: [1,2,3,6,9,8,7,4,5]
Complexitate:
Timp: O(n×m) | Spațiu: O(1)
32) Care sunt diferitele moduri de a sorta o matrice? Explicați cu exemple.
Sortarea rearanjează elementele într-o ordine specifică. Alegerea algoritmului depinde de dimensiunea datelor, distribuția și constrângerile de memorie.
| Algoritm | Cel mai bun caz | Caz mediu | Stabil | Spaţiu |
|---|---|---|---|---|
| Bubble Sortare | O (n) | O(n²) | Da | O (1) |
| Sortare îmbinare | O (n jurnal n) | O (n jurnal n) | Da | O (n) |
| Sortare rapida | O (n jurnal n) | O(n²) | Nu | O (jurnal n) |
| Sortare în grămadă | O (n jurnal n) | O (n jurnal n) | Nu | O (1) |
Exemplu (Python Sortare rapidă):
def quicksort(arr):
if len(arr) <= 1:
return arr
pivot = arr[len(arr)//2]
return quicksort([x for x in arr if x < pivot]) + [x for x in arr if x == pivot] + quicksort([x for x in arr if x > pivot])
33) Explicați tehnica cu doi indicatori în tablouri.
tehnica cu două puncte utilizează doi indici pentru a parcurge o structură de date din capete sau viteze diferite, optimizând timpul și spațiul.
Utilizări uzuale:
- Detectarea perechilor cu o sumă dată în tablouri sortate.
- Eliminarea duplicatelor pe loc.
- Revmatrice de ersing.
- Intervale de îmbinare.
Exemplu (Împerechere cu Target Sumă):
arr = [1,2,3,4,6], target = 6
left, right = 0, len(arr)-1
while left < right:
s = arr[left] + arr[right]
if s == target: print(arr[left], arr[right])
elif s < target: left += 1
else: right -= 1
Complexitate: O (n)
34) Cum poți găsi elementul majoritar într-un tablou?
A element majoritar apare de mai mult de ⌊n/2⌋ ori.
Algoritmul de vot Boyer-Moore rezolvă această problemă în timp liniar și spațiu constant.
Pașii algoritmului:
- inițializa
candidateșicount = 0. - Pentru fiecare element:
- Dacă numărătoarea = 0, setează
candidate = element. - Incrementează/descrește numărătoarea în funcție de egalitate.
- Dacă numărătoarea = 0, setează
- Verificați candidatul.
Exemplu: [3,2,3] → Ieșire: 3
Complexitate: O (n)
35) Care este diferența dintre căutarea binară și căutarea exponențială?
| Caracteristică | Căutare binară | Căutare exponențială |
|---|---|---|
| Cerinţă | Matrice sortată | Matrice sortată |
| Idee cheie | Împărțiți matricea în jumătăți | Găsiți intervalul exponențial înainte de căutarea binară |
| Complexitate | O (jurnal n) | O (jurnal n) |
| Utilizare caz | Dimensiune cunoscută | Tablouri necunoscute sau infinite |
Exemplu:
Pentru seturi de date mari sau tablouri nelimitate (cum ar fi API-urile paginate), căutarea exponențială găsește intervalul eficient.
36) Cum poți găsi al k-lea cel mai mic sau cel mai mare element dintr-un tablou?
Abordari:
- Triere: Sortare și accesare
k-1al doilea indice (O(n log n)). - Heap Min/Max: Eficient pentru interogări frecvente (O(n log k)).
- Selecție rapidă (Algoritmul lui Hoare): O(n) medie.
Exemplu (Python folosind heapq):
import heapq arr = [3,2,1,5,6,4] k = 2 print(heapq.nlargest(k, arr)[-1]) # 5
Utilizare caz: Clasamente, valori de top, analiză percentilă.
37) Cum găsești numărul lipsă și cel care se repetă dintr-un tablou de la 1 la n?
Se dă un tablou care conține numerele de la 1 la n, unul lipsește și unul se repetă:
Abordarea 1 (matematică):
Folosește diferența dintre suma reală și cea așteptată și suma pătratelor.
Abordarea 2 (Metoda XOR):
- Execută operația XOR pentru toate elementele tabloului și 1…n.
- Rezultatul oferă operația XOR pentru numerele lipsă și cele repetitive.
- Împărțiți folosind bitul setat cel mai din dreapta.
Complexitate: Pe), Spaţiu: O (1)
Exemplu:
Input: [4,3,6,2,1,1] Output: Missing = 5, Repeating = 1
38) Ce sunt inversiunile într-o matrice și cum se calculează?
An inversare este o pereche (i, j) astfel încât i < j și arr[i] > arr[j].
Abordare:
- Naiv: Verificați toate perechile → O(n²).
- Optimizat (sortare prin îmbinare): Numără inversiunile în timpul îmbinării → O(n log n).
Exemplu:
Input: [8, 4, 2, 1] Inversions = 6 → (8,4), (8,2), (8,1), (4,2), (4,1), (2,1)
Folosit in tulburare de matrice de măsurare și sisteme de clasare.
39) Cum poți găsi mediana a două tablouri sortate?
Abordare optimă (căutare binară):
Împărțiți ambele tablouri astfel încât jumătățile din stânga să conțină același număr de elemente ca și jumătățile din dreapta.
algoritm:
- Folosește căutarea binară pe un tablou mai mic.
- Comparați marginile partițiilor.
- Returnează mediana pe baza valorilor partițiilor.
Complexitate: O(log(min(n, m)))
Exemplu:
A = [1,3], B = [2] Median = 2.0
40) Care sunt avantajele utilizării tablourilor față de listele înlănțuite?
| Factor | Mulțime | Listă legată |
|---|---|---|
| Memorie | contiguu | Necontiguu |
| Timpul de acces | O (1) | O (n) |
| Inserare/Ștergere | Scump | Eficient |
| Localitate în cache | Excelent | Sărac |
| Deasupra | Nici unul | Stocare suplimentară pentru indicator |
Concluzie:
Matricele sunt optime pentru seturi de date cu dimensiuni fixe care necesită acces aleatoriu, în timp ce listele înlănțuite sunt mai bune pentru inserarea și ștergerea dinamică.
41) Cum se calculează suma maximă a unui submatrice circular?
Într-o matrice circulară, elementele se înfășoară la sfârșit.
Abordare:
- Găsiți suma maximă normală a submatricei folosind Algoritmul lui Kadane.
- Găsiți suma minimă a submatricelor.
- Rezultatul =
max(normal_max, total_sum - min_subarray).
Caz limită: Dacă toate elementele sunt negative, returnează elementul maxim.
Exemplu:
Input: [5, -2, 3, 4] Normal Max = 10, Circular Max = 12 → Output = 12
Complexitate: O (n)
42) Cum cauți un element într-un tablou sortat rotit?
Folosi căutare binară modificată pentru a găsi pivotul și a ajusta comparațiile.
algoritm:
- Găsiți mediu = (jos + înalt) / 2.
- Verifica daca
arr[mid] == target. - Dacă jumătatea stângă este sortată → caută la stânga; altfel, la dreapta.
Exemplu:
Input: [4,5,6,7,0,1,2], target = 0 Output: Index = 4
Complexitatea timpului: O (jurnal n)
43) Explicați abordarea programării dinamice pentru „Subsecvența crescătoare a sumei maxime”.
Scopul este de a găsi suma maximă a unei subșiruri crescătoare.
algoritm:
- inițializa
dp[i] = arr[i]. - Pentru fiecare
i, verificați elementele anterioarej < i:- If
arr[j] < arr[i], Apoidp[i] = max(dp[i], arr[i] + dp[j]).
- If
- Returnează valoarea maximă din
dp.
Exemplu:
Input: [1, 101, 2, 3, 100, 4, 5] Output: 106 (1 + 2 + 3 + 100)
Durata evenimentului: O(n²) | Spaţiu: O (n)
44) Ce este „Capcana”ping Problema „apei de ploaie” și cum poate fi rezolvată?
Această problemă clasică de tip matrice întreabă câtă apă poate fi prinsă între bare după ploaie.
Abordare (Două Indicații):
- inițializa
left,right,left_max,right_max. - Mută indicatorii spre interior, actualizând apa prinsă =
min(left_max, right_max) - height[i].
Exemplu:
Input: [0,1,0,2,1,0,1,3,2,1,2,1] Output: 6
| Abordarea | Timp | Spaţiu |
|---|---|---|
| Brute Force | O(n²) | O (1) |
| Programare dinamică | O (n) | O (n) |
| Două indicii | O (n) | O (1) |
45) Cum poți găsi cel mai lung submatrice cu suma egală cu zero?
Algoritm (Hartă Hash):
- Inițializați o hartă hash pentru a stoca sumele prefixelor.
- Dacă aceeași sumă a prefixului apare din nou, submatricea dintre indici are o sumă zero.
Exemplu:
Input: [15, -2, 2, -8, 1, 7, 10, 23] Output: Length = 5 (Subarray [-2, 2, -8, 1, 7])
Complexitate: O (n)
46) Care este diferența dintre aplatizarea superficială și aplatizarea profundă a tablourilor multidimensionale?
| Tip | Definiție | Exemplu |
|---|---|---|
| Aplatizare superficială | Aplatizează doar un nivel | [[1,2],[3,[4]]] → [1,2,3,[4]] |
| Aplatizare profundă | Aplatizează complet toate matricele imbricate | [[1,2],[3,[4]]] → [1,2,3,4] |
Exemplu (Python):
import itertools shallow = list(itertools.chain.from_iterable(arr))
Utilizare caz: Util în curățarea datelor și normalizarea ierarhică a datelor.
47) Cum se găsește elementul de echilibru într-o matrice (tablou 2D)?
An element de echilibru într-o matrice este un element al cărui sumele pe rânduri și coloane sunt echilibrate.
algoritm:
- Precalculați sumele pe rânduri și coloane.
- Pentru fiecare element, verificați dacă
row_sum[i] - arr[i][j] == col_sum[j] - arr[i][j].
Exemplu:
Matrice:
Matrix: 2 7 5 3 1 1 4 6 8 Output: Element 1 at (1,1)
Complexitate: O(n²)
48) Cum poți partiționa un tablou în două subseturi cu sume egale?
Aceasta este o problema sumei submulțimilor, rezolvată folosind Programare dinamică.
Abordare:
- Calculați suma totală.
- Dacă este impar → returnează False.
- Creați un tabel DP pentru a verifica dacă există un subset cu
sum/2există.
Exemplu:
Input: [1,5,11,5] Output: True (Subsets: [1,5,5] and [11])
Durata evenimentului: O(n × sumă/2) | Spaţiu: O(sumă/2)
49) Cum rotești o matrice cu 90 de grade în sensul acelor de ceasornic?
algoritm:
- Transpuneți matricea.
- Reverse fiecare rând.
Exemplu:
Input: 1 2 3 4 5 6 7 8 9 Output: 7 4 1 8 5 2 9 6 3
Complexitate: O(n²), Pe loc.
Folosit in procesarea imaginii și transformări de vizualizare a datelor.
50) Care sunt cele mai comune aplicații ale tablourilor în lumea reală?
Matricele sunt fundamentale pentru numeroase sisteme computaționale și din lumea reală.
Aplicații:
- Indexarea bazei de date: Stocarea și sortarea înregistrărilor.
- Învățare automată: Vectori de caracteristici, matrici și tensori.
- Procesarea imaginii: Date pixeli 2D și 3D.
- OperaSisteme de alimentare: Memorie și planificare a proceselor.
- Networking: Buffering și rutare a pachetelor.
- Jocuri: Starea jucătorului tracrege și grile.
| domeniu | Rolul matricei |
|---|---|
| AI / ML | Reprezentare tensorală și matricială |
| Baze de date | Indexare și optimizare pentru căutare |
| Sisteme integrate | Datele senzorului în timp real |
| Cloud Computing | Tablouri de distribuție a încărcării |
Matricele oferă coloana vertebrală pentru organizarea, calculul și scalabilitatea eficientă a datelor.
🔍 Întrebări de interviu de top cu scenarii din lumea reală și răspunsuri strategice
1) Ce este un array și cum diferă de alte structuri de date?
Așteptat de la candidat: Intervievatorul dorește să evalueze cunoștințele dumneavoastră fundamentale despre matrice, inclusiv scopul, structura și diferențele dintre acestea și alte tipuri de date, cum ar fi listele înlănțuite sau hărțile hash.
Exemplu de răspuns:
„O matrice este o colecție de elemente stocate în locații de memorie contigue, unde fiecare element poate fi accesat folosind un index. Spre deosebire de listele înlănțuite, matricele oferă acces în timp constant (O(1)) la elemente, dar necesită o dimensiune fixă definită în momentul creării. Acest lucru le face eficiente pentru operațiunile de citire, dar mai puțin flexibile pentru inserții și ștergeri.”
2) Cum găsești eficient cele mai mari și cele mai mici elemente dintr-un tablou?
Așteptat de la candidat: Intervievatorul vrea să vă verifice gândirea algoritmică și capacitatea de a optimiza performanța.
Exemplu de răspuns:
„Pentru a găsi eficient atât cele mai mari, cât și cele mai mici elemente dintr-un tablou, aș itera prin tablou o dată, kee”ping track din maximul și minimul curent. Această abordare are o complexitate temporală de O(n) și o complexitate spațială de O(1), ceea ce este optim pentru această problemă.
3) Descrieți cum ați elimina duplicatele dintr-o matrice nesortată.
Așteptat de la candidat: Intervievatorul dorește să vă evalueze cunoștințele despre manipularea matricelor și structurile de date care vă pot ajuta să îndepliniți această sarcină.
Exemplu de răspuns:
„Aș folosi un set hash pentru a stoca elemente unice în timp ce iterez prin matrice. Dacă un element este deja în set, l-aș sări peste; altfel, l-aș adăuga. Această metodă asigură eliminarea eficientă a duplicatelor cu o complexitate temporală de O(n) și o complexitate spațială de O(n).”
4) Puteți explica cum funcționează sortarea pe tablouri și puteți numi câțiva algoritmi comuni?
Așteptat de la candidat: Intervievatorul așteaptă familiarizarea cu diferiți algoritmi de sortare și cazurile lor de utilizare.
Exemplu de răspuns:
Sortarea prin matrice poate fi realizată folosind diverși algoritmi, cum ar fi sortarea rapidă, sortarea prin îmbinare și BubblSortarea rapidă este eficientă pentru cazurile medii cu complexitate O(n log n), în timp ce sortarea prin îmbinare este preferată pentru seturi de date mari datorită naturii sale stabile. BubblSortarea e, deși simplă, este rar utilizată datorită performanței sale de O(n²).
5) Povestește-mi despre o situație în care ai optimizat un program care folosea intens matrice.
Așteptat de la candidat: Intervievatorul vrea să înțeleagă abordarea ta de rezolvare a problemelor și capacitatea ta de a îmbunătăți performanța.
Exemplu de răspuns:
„În rolul meu anterior, am optimizat un script de procesare a datelor care se baza pe mai multe bucle imbricate pe matrice. Prin implementarea secționării matricelor și utilizarea operațiilor vectorizate încorporate, am redus timpul de execuție cu aproape 60%, ceea ce a îmbunătățit semnificativ timpul de răspuns al sistemului.”
6) Cum ați gestiona o eroare de indexare a unui array în afara limitelor?
Așteptat de la candidat: Intervievatorul verifică înțelegerea ta privind gestionarea erorilor și practicile de codare în siguranță.
Exemplu de răspuns:
„M-aș asigura că toate accesările la index sunt validate înainte de a fi utilizate, verificând dacă se încadrează în intervalul lungimii matricei. În plus, aș implementa mecanisme try-catch sau metode echivalente de gestionare a erorilor pentru a gestiona cu succes erorile neașteptate în afara limitelor.”
7) Cum inversezi o matrice fără a utiliza memorie suplimentară?
Așteptat de la candidat: Intervievatorul dorește să evalueze eficiența algoritmică și înțelegerea operațiunilor la fața locului.
Exemplu de răspuns:
„Aș folosi doi pointeri: unul care începe la începutul tabloului și celălalt la sfârșit. Prin swapping elementele din aceste poziții și mutând ambii indicatori spre centru, matricea poate fi inversată pe loc cu o complexitate temporală de O(n) și o complexitate spațială de O(1).
8) Descrieți o situație în care a trebuit să gestionați un set mare de date de tip matrice. Cum ați asigurat performanța și acuratețea?
Așteptat de la candidat: Intervievatorul dorește să vă evalueze capacitatea de a gestiona datele din lumea reală și de a optimiza performanța.
Exemplu de răspuns:
„La locul meu de muncă anterior, am lucrat cu tablouri numerice mari pentru analiza datelor financiare. Pentru a menține performanța, am folosit tehnici eficiente de gestionare a memoriei și procesare în loturi. De asemenea, am valorificat tablourile NumPy pentru a efectua operații vectorizate, ceea ce a îmbunătățit atât precizia, cât și viteza de execuție.”
9) Ce pași ați urma pentru a căuta o anumită valoare într-un tablou sortat?
Așteptat de la candidat: Intervievatorul se așteaptă să demonstrați cunoștințe despre algoritmii de căutare.
Exemplu de răspuns:
„Pentru o matrice sortată, aș folosi algoritmul de căutare binară, care împarte în mod repetat intervalul de căutare la jumătate. Această abordare reduce complexitatea timpului la O(log n), ceea ce o face mult mai eficientă decât o căutare liniară pentru seturi mari de date.”
10) Cum joacă tablourile un rol în rezolvarea problemelor din lumea reală în dezvoltarea de software?
Așteptat de la candidat: Intervievatorul vrea să înțeleagă cum legați cunoștințele tehnice de aplicațiile practice.
Exemplu de răspuns:
„Matricele sunt fundamentale în dezvoltarea de software, deoarece permit stocarea și recuperarea eficientă a datelor. De exemplu, în ultimul meu rol, am folosit matrice pentru a implementa mecanisme de caching și sortare a datelor pentru tablourile de bord analitice. Acest lucru a îmbunătățit accesibilitatea datelor și a redus timpii de răspuns la interogări.”
