Le 50 migliori domande e risposte per l'intervista sugli array (2026)
Ti stai preparando per un colloquio Array? È il momento di concentrarti sulle domande che potrebbero sorgere. Comprendere {{keyword}} aiuta i candidati a mettere in luce efficacemente il loro pensiero analitico, la loro logica e la loro capacità di problem solving.
Gli array costituiscono la base dell'esperienza tecnica e professionale dei programmatori. Dai neolaureati ai professionisti senior, la loro padronanza dimostra una solida competenza tecnica e un'esperienza di base nella manipolazione dei dati. I datori di lavoro apprezzano tali competenze durante le sessioni di domande e risposte,ping I candidati superano le fasi comuni, avanzate o orali grazie a un'analisi sicura e a competenze pratiche.
Basata sulle intuizioni di oltre 85 leader tecnici, manager e professionisti, questa raccolta copre diverse prospettive in tutti i settori, garantendo che ogni argomento rifletta aspettative di assunzione autentiche e standard di valutazione della codifica reali.

Domande e risposte per i colloqui di lavoro su Array
1) Spiega cos'è un array e in che modo si differenzia dalle altre strutture dati.
Un array è un blocco di memoria contiguo che memorizza più elementi dello stesso tipo di dati. Consente l'accesso a tempo costante a qualsiasi elemento utilizzando il suo indice, rendendolo una delle strutture più efficienti per l'accesso casuale. A differenza delle liste concatenate, gli array hanno dimensione fissa e non richiedono l'archiviazione dei puntatori. Gli array sono preferiti quando il numero di elementi è noto in anticipo, mentre le strutture dinamiche come liste o vettori vengono utilizzate quando si prevede un ridimensionamento frequente.
| Caratteristica | Italia | Lista collegata |
|---|---|---|
| Allocazione della memoria | contiguo | Non contiguo |
| Tempo di accesso | O (1) | O (n) |
| Inserimento/Eliminazione | costoso | Routing |
| Sovraccarico di memoria | Basso | Alto (puntatori) |
👉 Download gratuito del PDF: Domande e risposte per il colloquio Array
2) Quali sono i diversi tipi di array? Fornisci degli esempi.
Gli array sono classificati in base alle loro dimensioni e al loro utilizzo. Le tipologie principali includono:
- Matrice unidimensionale: Memorizza gli elementi in modo lineare, ad esempio,
int arr[5] = {1,2,3,4,5}. - Array bidimensionale: Rappresenta dati tabulari, ad esempio matrici.
- Array multidimensionale: Dimensioni superiori, spesso utilizzate nelle simulazioni o nell'elaborazione delle immagini.
- Array dinamici: Ridimensiona automaticamente quando vengono aggiunti elementi, ad esempio,
ArrayListin Java,vectorin C++.
| Tipo | Structure | Esempio |
|---|---|---|
| 1D | Lineare | [1, 2, 3] |
| 2D | Matrice | [[1, 2], [3, 4]] |
| Dinamico | ridimensionabile | std::vector<int> |
3) Come si trovano gli elementi più grandi e più piccoli in un array?
Questo problema viene spesso risolto utilizzando un attraversamento lineare. Si mantengono due variabili, una per il minimo e una per il massimo, e le si aggiorna durante l'iterazione.
Algoritmo:
- Inizializzare
minandmaxcon il primo elemento. - Attraversa l'array e confronta ogni elemento.
- Aggiornanento
minormaxdi conseguenza.
Esempio (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;
}
Complessità temporale: SU).
4) Quali sono i vantaggi e gli svantaggi degli array?
Gli array garantiscono elevate prestazioni per l'accesso casuale, ma hanno dimensioni fisse e un ridimensionamento costoso.
| Aspetto | Vantaggi | Svantaggi |
|---|---|---|
| Cookie di prestazione | Indicizzazione veloce (O(1)) | Inserimento/eliminazione lento (O(n)) |
| Memorie | Memoria compatta | Assegnazione statica delle dimensioni |
| Implementazione/Attuazione | Sintassi semplice | Nessun limite di controllo in alcune lingue |
| Usa caso | Adatto per set di dati fissi | Inefficiente per modifiche frequenti |
5) Descrivi la differenza tra array statici e dinamici.
A matrice statica ha una dimensione fissa determinata in fase di compilazione, mentre a matrice dinamica possono crescere o ridursi durante l'esecuzione. Gli array statici sono efficienti in termini di memoria ma rigidi, mentre gli array dinamici offrono flessibilità con un leggero sovraccarico durante il ridimensionamento.
| Caratteristica | Array statico | Matrice dinamica |
|---|---|---|
| Taglia | Fisso | Variabile |
| Memorie | pila | Heap |
| Esempio | int arr[5]; |
std::vector<int> |
| Ridimensionamento | Non supportato | Supporto |
Caso d'uso di esempio:
Utilizzare array statici nei sistemi embedded e array dinamici per raccolte con dimensioni imprevedibili.
6) Come è possibile invertire un array sul posto?
Revlo scambio di un array in loco comporta lo scambioping elementi provenienti da entrambe le estremità che si muovono verso il centro.
Algoritmo:
- Inizializza due puntatori:
start = 0andend = n - 1. - Scambia elementi
arr[start]andarr[end]. - Incremento
starte decrementoendfinché non si incontrano.
Esempio (Python):
arr = [1, 2, 3, 4, 5] arr.reverse() # Built-in method # or manually arr = arr[::-1]
Complessità temporale: SU), Complessità spaziale: O(1).
7) Qual è la differenza tra un array frastagliato e un array multidimensionale?
A matrice frastagliata è un array di array in cui gli array interni possono avere lunghezze diverse, mentre un matrice multidimensionale ha dimensioni uniformi di righe e colonne.
| Caratteristica | Array frastagliato | Array multidimensionale |
|---|---|---|
| Structure | Irregolare (array annidati) | Rettangolare (matrice) |
| Memorie | Non contiguo | contiguo |
| accesso a | arr[i][j] |
arr[i][j] |
| Esempio | int[][] jagged = {{1,2}, {3,4,5}}; |
int[,] matrix = {{1,2}, {3,4}}; |
Gli array frastagliati sono più efficienti in termini di memoria quando i dati non sono uniformi.
8) Come si trova il numero mancante in un array da 1 a n?
Questo problema sfrutta le proprietà matematiche dei numeri naturali.
Approccio 1 (Formula della somma):
Somma dei primi n numeri naturali = n*(n+1)/2.
Subtract la somma degli elementi dell'array da questo totale.
Approccio 2 (XOR):
Esegui l'operazione XOR su tutti gli elementi con numeri da 1 a n. Il valore rimanente è il numero mancante.
Esempio:
Per [1,2,4,5,6] (n=6):
Somma prevista = 21, Somma effettiva = 18 → Mancante = 3.
Complessità temporale: SU), Complessità spaziale: O(1).
9) Quali sono i diversi modi per rimuovere i duplicati da un array?
Esistono diversi approcci a seconda della lingua e dei vincoli:
- Utilizzo di HashSet: Memorizza solo elementi univoci.
- Utilizzo dell'ordinamento: Ordina l'array e rimuovi i duplicati adiacenti.
- Utilizzo della mappa delle frequenze: Track conteggi di ciascun elemento.
Esempio (Java):
Set<Integer> unique = new HashSet<>(Arrays.asList(arr));
| Approccio | Ora | lo spazio |
|---|---|---|
| Set di hash | O (n) | O (n) |
| ordinamento | O (n log n) | O (1) |
| Frequenza | O (n) | O (n) |
10) Come si trova il secondo elemento più grande in un array?
È possibile trovare il secondo elemento più grande utilizzando una sola traversata mantenendo due variabili.
Algoritmo:
- Inizializzare
firstandsecondasINT_MIN. - Attraversa la matrice.
- Aggiornare entrambi quando viene trovato un valore maggiore.
Esempio (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;
}
}
Complessità temporale: SU), Complessità spaziale: O(1).
11) Come si può ruotare un array di 'k' posizioni? Spiega i diversi approcci.
La rotazione dell'array sposta gli elementi ciclicamente. Ci sono tre metodi principali per raggiungerlo:
- Utilizzo di un array temporaneo: Copia i primi k elementi e aggiungili alla fine dopo aver spostato gli altri.
- utilizzando RevAlgoritmo ersale: Reverse tre parti dell'array: prima parte, seconda parte, poi l'intero array.
- Utilizzo dell'algoritmo di giocoleria: Basato sul MCD di n e k (efficiente in O(n)).
Esempio (rotazione a destra di 2):
Input: [1,2,3,4,5] Output: [4,5,1,2,3]
| Metodo | Ora | lo spazio | Descrizione |
|---|---|---|---|
| Array temporaneo | O (n) | OK) | Semplice e intuitivo |
| Reversale | O (n) | O (1) | In loco ed efficiente |
| Giocoleria | O (n) | O (1) | Basato sui cicli MCD |
12) Che cos'è un sottoarray e in che cosa si differenzia da una sottosequenza?
A sottoarray è una sezione contigua di un array, mentre un sottosequenza mantiene l'ordine ma può saltare degli elementi.
| Proprietà | sottoarray | Sottosequenza |
|---|---|---|
| contiguo | Si | Nodo |
| Ordine conservato | Si | Si |
| Esempio (da [1,2,3]) | [tredici] | [tredici] |
Esempio:
Array dato [1,2,3], sottoarray totali = n*(n+1)/2 = 6.
Le sottosequenze, d'altra parte, sono 2ⁿ - 1 = 7 combinazioni non vuote.
13) Come si trova il sottoarray con somma massima?
Migliori Algoritmo di Kadane è il modo più efficiente per trovare il sottoarray contiguo con la somma massima.
Passi:
- Inizializzare
max_current = max_global = arr[0]. - Eseguire l'iterazione attraverso gli elementi.
- Aggiornanento
max_current = max(arr[i], arr[i] + max_current). - Track il massimo globale.
Esempio:
Ingresso: [-2,1,-3,4,-1,2,1,-5,4] → Uscita: 6 (sottoarray [4,-1,2,1]).
Complessità:
Tempo O(n), spazio O(1).
14) Come è possibile unire due array ordinati senza utilizzare spazio extra?
Per unire due array ordinati a posto, l'idea è di confrontare dalla fine di entrambi gli array.
Approccio:
- Inizia dall'ultimo elemento valido di entrambi gli array.
- Confronta e sposta quello più grande alla fine dello spazio combinato.
- Ripetere l'operazione finché tutti gli elementi non saranno uniti.
Esempio (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--];
}
Complessità temporale: O(m+n).
15) Quali sono i diversi modi per cercare un elemento in un array?
| Metodo | Tipo | Complessità temporale | Esempio di utilizzo |
|---|---|---|---|
| Ricerca lineare | Non ordinato | O (n) | Ricerca generale |
| Ricerca binaria | ordinato | O (log n) | Ricerca efficiente |
| hashing | Non ordinato | O(1) media | Grandi set di dati |
Esempio (Ricerca binaria – 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) Spiega la differenza tra copia superficiale e copia profonda negli array.
A copia superficiale copia i riferimenti agli elementi originali, mentre un copia profonda duplica tutti i dati in nuove posizioni di memoria.
| Tipo di copia | Indipendenza dai dati | Esempio |
|---|---|---|
| Superficiale | Nodo | arr_copy = arr |
| In profondità | Si | arr_copy = arr[:] (Python) |
Esempio:
La modifica di una copia superficiale si riflette nell'array originale; la copia profonda no.
17) Come si trovano i duplicati in un array senza utilizzare spazio extra?
Approccio 1 (Ordinamento): Ordina e controlla gli elementi adiacenti.
Approccio 2 (metodo di negazione per valori 1–n): Mark ha visitato gli indici negando l'elemento in quell'indice.
Approccio 3 (Rilevamento del ciclo di Floyd): Tratta l'array come una lista concatenata e trova il ciclo (per gli elementi ripetuti nell'intervallo [1..n]).
Esempio:
Italia [3,1,3,4,2] → Duplica = 3.
Orari: SU), Spazio: O(1).
18) Cosa sono gli array sparsi e i loro vantaggi?
A matrice sparsa contiene principalmente valori pari a zero o predefiniti. Invece di memorizzare tutti gli elementi, memorizziamo solo le voci diverse da zero con i relativi indici.
vantaggi:
- Risparmia memoria.
- Efficiente per grandi set di dati come matrici o frequenze di termini di documenti.
| Tipo | Esempio | Usa caso |
|---|---|---|
| Array denso | [0,1,0,2,3] |
Piccoli dati |
| Array sparso | {1:1, 3:2, 4:3} |
Grandi dati sparsi |
Esempio: Utilizzato nei modelli di apprendimento automatico (matrici TF-IDF).
19) Come puoi trovare in modo efficiente l'intersezione di due array?
L'intersezione può essere trovata utilizzando tecniche di hashing o di ordinamento.
- Utilizzo di HashSet: Aggiungere elementi del primo array, quindi verificare l'appartenenza del secondo.
- Utilizzando due puntatori: Funziona per array ordinati.
Esempio (Python):
intersection = list(set(arr1) & set(arr2))
Complessità:
- HashSet: O(n)
- Due puntatori: O(n log n) a causa dell'ordinamento.
20) Spiega la differenza tra l'ordine per riga e quello per colonna negli array.
Si tratta di ordini di archiviazione della memoria utilizzati per array multidimensionali.
| Idea | Riga-Maggiore (C/C++) | Colonna-Maggiore (Fortran, MATLAB) |
|---|---|---|
| Ordine di stoccaggio | Riga per riga | Colonna per colonna |
| Formula dell'indirizzo | Base + ((i * cols) + j) * size |
Base + ((j * rows) + i) * size |
| Vantaggio | Più veloce per l'attraversamento delle righe | Più veloce per l'attraversamento delle colonne |
Esempio:
Per una matrice 2D A[2][3], grandi magazzini [A[0][0], A[0][1], A[0][2], A[1][0], ...].
21) Che cos'è la tecnica della somma dei prefissi e come viene utilizzata negli array?
Migliori somma prefisso La tecnica prevede il precalcolo delle somme cumulative di un array per rispondere in modo efficiente alle query di intervallo.
Concept:
prefix[i] = prefix[i-1] + arr[i]
Quindi, per ottenere la somma degli elementi da l a r, utilizzare:
sum(l, r) = prefix[r] - prefix[l-1]
Esempio:
Matrice = [2, 3, 5, 7, 1]
Prefisso = [2, 5, 10, 17, 18]
Somma(2,4) = prefix[4] - prefix[1] = 15
applicazioni:
Utilizzato nelle query di somma dei sottoarray, nelle tabelle di frequenza cumulativa e nella programmazione competitiva.
Complessità:
Pre-elaborazione: O(n), Query: O(1)
22) In che modo la tecnica della finestra scorrevole migliora le prestazioni dell'array?
Migliori finestra scorrevole La tecnica viene utilizzata per risolvere in modo efficiente problemi che coinvolgono segmenti contigui (sottoarray).
Idea: Invece di ricalcolare la somma o la condizione per ogni finestra, aggiorna il risultato aggiungendo l'elemento successivo e rimuovendo il primo.
Problema di esempio:
Trova il sottoarray di somma massima di dimensione k.
Algoritmo:
- Calcola la somma del primo
kelementi. - Fai scorrere la finestra un elemento alla volta.
- Aggiungi il nuovo elemento, rimuovi il primo e track il massimo.
Complessità temporale: O(n) — molto più veloce dell'approccio ingenuo O(n×k).
applicazioni:
Utilizzato in problemi quali il sottoarray medio massimo, la sottostringa più lunga o il primo numero negativo in ogni finestra.
23) Qual è la differenza tra array e puntatore nel linguaggio C?
| Caratteristica | Italia | Pointer |
|---|---|---|
| Definizione | Raccolta di elementi di dati simili | Indirizzo di memoria di memorizzazione variabile |
| Allocazione della memoria | contiguo | Dinamico o arbitrario |
| Taglia | Fisso | Può essere ridimensionato |
| Esempio | int a[5]; |
int *p; |
Differenza chiave:
Il nome di un array funge da puntatore costante, ma un puntatore può puntare ovunque in modo dinamico.
Esempio:
int arr[3] = {1,2,3};
int *ptr = arr; // ptr points to first element
24) Come si può trovare l'indice di equilibrio in un array?
An indice di equilibrio è una posizione in cui la somma degli elementi a sinistra è uguale alla somma a destra.
Algoritmo:
- Calcola la somma totale dell'array.
- Attraversare e mantenere la somma sinistra.
- If
(total_sum - left_sum - arr[i]) == left_sum, restituisce l'indice.
Esempio:
Array: [1, 3, 5, 2, 2] → Indice = 2 (poiché la somma a sinistra = la somma a destra = 4)
Complessità: SU), Spazio: O (1)
25) Cosa sono le matrici sparse e come vengono memorizzate in modo efficiente?
A matrice sparsa contiene principalmente zeri. Per risparmiare memoria, vengono memorizzati solo gli elementi diversi da zero e i loro indici.
Metodi di archiviazione:
- Elenco delle coordinate (COO): Memorizza (riga, colonna, valore).
- Riga sparsa compressa (CSR): Tre array:
values,col_index,row_pointer. - Dizionario delle chiavi (DOK): Mappa hash di (riga, colonna) → valore.
| Metodo | Efficienza della memoria | Esempio di utilizzo |
|---|---|---|
| COO | Moderato | stoccaggio generale |
| CSR | Alto | Calcoli numerici |
| DOK | Flessibile | Inserimento dinamico |
Ampiamente utilizzato in machine learning (TF-IDF, matrici di adiacenza dei grafi).
26) Come si riorganizza un array in modo che i numeri pari e dispari si alternino?
L'obiettivo è quello di alternare numeri pari e dispari mantenendo il loro ordine relativo.
Algoritmo:
- Separare gli array pari e dispari.
- Unisci alternativamente partendo da pari o da dispari.
- Se un tipo si esaurisce, aggiungi il rimanente.
Esempio:
Input: [3, 6, 12, 1, 5, 8] Output: [6, 3, 12, 1, 8, 5]
Complessità: O (n)
27) Spiega la differenza tra rotazione e spostamento di un array.
| Funzionamento | Rotazione | ShiftING |
|---|---|---|
| Definizione | Gli elementi si muovono circolarmente | Gli elementi si muovono, i posti lasciati liberi vengono riempiti (ad esempio, 0) |
| Esempio | [1,2,3,4] → [3,4,1,2] |
[1,2,3,4] → [0,1,2,3] |
| Dati persi | Nodo | Si |
| Impiego | Riarrangiamenti ciclici | Implementazioni della coda |
In sintesi:
La rotazione è reversibile; lo spostamento in genere non lo è.
28) Come puoi trovare il sottoarray del prodotto massimo?
Simile all'algoritmo di Kadane, ma tu track sia il prodotto massimo che quello minimo a causa dei valori negativi.
Algoritmo:
- Inizializzare
max_ending_here = min_ending_here = arr[0]. - Ripeti e aggiorna entrambi in base all'elemento corrente.
- Binario
max_so_far.
Esempio:
Ingresso: [2,3,-2,4] → Uscita: 6 (sottoarray [2,3])
Complessità: SU), Spazio: O (1)
29) Come puoi contare in modo efficiente il numero di sottoarray con una data somma?
Approccio (somma prefisso + mappa hash):
- Mantenere la somma corrente durante l'iterazione.
- Per ogni somma di prefisso, controlla se
(current_sum - target)esiste nella mappa hash. - Aumentare il conteggio di conseguenza.
Esempio:
arr = [10,2,-2,-20,10], target = -10 Output = 3 subarrays
Complessità temporale: O (n)
Complessità spaziale: O (n)
30) Che cosa è la manipolazione dei bit nei problemi di array e dove viene applicata?
Manipolazione dei bit comporta l'esecuzione di operazioni come AND, OR, XOR e turni per risolvere i problemi in modo efficiente.
Applicazioni comuni:
- Ricerca di un singolo elemento non ripetuto utilizzando XOR.
- Verifica dell'esistenza di un sottoinsieme mediante mascheramento dei bit.
- Rappresentazione degli insiemi come vettori di bit.
Esempio:
Trova l'elemento che appare una volta quando gli altri appaiono due volte:
int res = 0; for (int num : arr) res ^= num;
vantaggi:
- Spazio costante
- Calcolo logico veloce
31) Come si attraversa una matrice in ordine a spirale?
A attraversamento a spirale visita tutti gli elementi della matrice strato per strato in senso orario.
Algoritmo:
- Definisci quattro confini:
top,bottom,lefteright. - Attraversare da sinistra → destra, dall'alto → dal basso, da destra → sinistra e dal basso → dall'alto.
- Ridurre i confini dopo ogni passaggio fino a coprire tutti gli elementi.
Esempio:
Input: 1 2 3 4 5 6 7 8 9 Output: [1,2,3,6,9,8,7,4,5]
Complessità:
Tempo: O(n×m) | Spazio: O(1)
32) Quali sono i diversi modi per ordinare un array? Spiegalo con degli esempi.
L'ordinamento riorganizza gli elementi in un ordine specifico. La scelta dell'algoritmo dipende da dimensioni dei dati, distribuzione e vincoli di memoria.
| Algoritmo | Caso migliore | Caso medio | Stabile | lo spazio |
|---|---|---|---|---|
| Bubble Ordina | O (n) | O(n²) | Si | O (1) |
| Unisci ordinamento | O (n log n) | O (n log n) | Si | O (n) |
| Ordinamento rapido | O (n log n) | O(n²) | Nodo | O (log n) |
| Ordinamento heap | O (n log n) | O (n log n) | Nodo | O (1) |
Esempio (Python Ordinamento rapido):
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) Spiega la tecnica dei due puntatori negli array.
Migliori tecnica a due puntatori utilizza due indici per attraversare una struttura dati da estremità o velocità diverse, ottimizzando tempo e spazio.
Usi comuni:
- Rilevamento di coppie con una data somma in array ordinati.
- Rimozione dei duplicati sul posto.
- Revarray di ersing.
- Unione di intervalli.
Esempio (accoppiare con Target Somma):
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
Complessità: O (n)
34) Come puoi trovare l'elemento di maggioranza in un array?
A elemento di maggioranza appare più di ⌊n/2⌋ volte.
Algoritmo di voto Boyer-Moore risolve questo problema in tempo lineare e spazio costante.
Passaggi dell'algoritmo:
- Inizializzare
candidateandcount = 0. - Per ogni elemento:
- Se conteggio = 0, imposta
candidate = element. - Incrementa/decrementa il conteggio in base all'uguaglianza.
- Se conteggio = 0, imposta
- Verificare il candidato.
Esempio: [3,2,3] → Uscita: 3
Complessità: O (n)
35) Qual è la differenza tra ricerca binaria e ricerca esponenziale?
| Caratteristica | Ricerca binaria | Ricerca esponenziale |
|---|---|---|
| Requisito | Array ordinato | Array ordinato |
| Idea chiave | Dividi l'array in due metà | Trova l'intervallo in modo esponenziale prima della ricerca binaria |
| Complessità | O (log n) | O (log n) |
| Usa caso | Dimensioni note | Array sconosciuti o infiniti |
Esempio:
Per set di dati di grandi dimensioni o array illimitati (come le API paginate), la ricerca esponenziale trova l'intervallo in modo efficiente.
36) Come puoi trovare il k-esimo elemento più piccolo o più grande in un array?
Approcci:
- Ordinamento: Ordina e accedi
k-1indice-esimo (O(n log n)). - Heap min/max: Efficiente per query frequenti (O(n log k)).
- QuickSelect (algoritmo di Hoare): Media O(n).
Esempio (Python utilizzando heapq):
import heapq arr = [3,2,1,5,6,4] k = 2 print(heapq.nlargest(k, arr)[-1]) # 5
Caso d'uso: Classifiche, parametri più performanti, analisi percentile.
37) Come si trova il numero mancante e ripetuto in un array da 1 a n?
Dato un array contenente numeri da 1 a n, con uno mancante e uno ripetuto:
Approccio 1 (matematico):
Utilizzare la differenza tra la somma effettiva e quella prevista e la somma dei quadrati.
Approccio 2 (metodo XOR):
- Esegue l'operazione XOR su tutti gli elementi dell'array e 1…n.
- Il risultato fornisce l'XOR dei numeri mancanti e ripetuti.
- Dividere utilizzando il bit più a destra.
Complessità: SU), Spazio: O (1)
Esempio:
Input: [4,3,6,2,1,1] Output: Missing = 5, Repeating = 1
38) Cosa sono i conteggi di inversione in un array e come calcolarli?
An inversione è una coppia (i, j) tale che i < j and arr[i] > arr[j].
Approccio:
- Ingenuo: Controlla tutte le coppie → O(n²).
- Ottimizzato (ordinamento per unione): Conta le inversioni durante la fusione → O(n log n).
Esempio:
Input: [8, 4, 2, 1] Inversions = 6 → (8,4), (8,2), (8,1), (4,2), (4,1), (2,1)
Usato in misurazione del disordine della matrice and sistemi di classificazione.
39) Come puoi trovare la mediana di due array ordinati?
Approccio ottimale (ricerca binaria):
Dividere entrambi gli array in modo che le metà sinistre contengano lo stesso numero di elementi delle metà destre.
Algoritmo:
- Utilizzare la ricerca binaria su array più piccoli.
- Confronta i confini delle partizioni.
- Restituisce la mediana in base ai valori di partizione.
Complessità: O(log(min(n, m)))
Esempio:
A = [1,3], B = [2] Median = 2.0
40) Quali sono i vantaggi dell'utilizzo degli array rispetto alle liste concatenate?
| Fattore | Italia | Lista collegata |
|---|---|---|
| Memorie | contiguo | Non contiguo |
| Tempo di accesso | O (1) | O (n) |
| Inserimento/Eliminazione | Costoso | Routing |
| Località della cache | Ottimo | povero |
| Costi indiretti | Nona | Memoria di archiviazione aggiuntiva per i puntatori |
Conclusione:
Gli array sono ottimali per set di dati di dimensioni fisse che richiedono un accesso casuale, mentre le liste concatenate sono più adatte per l'inserimento e l'eliminazione dinamici.
41) Come si trova la somma massima di un sottoarray circolare?
In un matrice circolare, gli elementi si avvolgono alla fine.
Approccio:
- Trova la somma massima normale del sottoarray usando Algoritmo di Kadane.
- Trova la somma minima dei sottoarray.
- Il risultato =
max(normal_max, total_sum - min_subarray).
Caso limite: Se tutti gli elementi sono negativi, restituisce l'elemento massimo.
Esempio:
Input: [5, -2, 3, 4] Normal Max = 10, Circular Max = 12 → Output = 12
Complessità: O (n)
42) Come si cerca un elemento in un array ordinato ruotato?
Utilizzare ricerca binaria modificata per trovare il perno e regolare i confronti.
Algoritmo:
- Trova medio = (basso + alto) / 2.
- Controlla se
arr[mid] == target. - Se la metà sinistra è ordinata → cerca a sinistra; altrimenti, a destra.
Esempio:
Input: [4,5,6,7,0,1,2], target = 0 Output: Index = 4
Complessità temporale: O (log n)
43) Spiega l'approccio di programmazione dinamica per la "Sottosequenza a somma massima crescente".
L'obiettivo è trovare la somma massima di una sottosequenza crescente.
Algoritmo:
- Inizializzare
dp[i] = arr[i]. - Per ciascun
i, controlla gli elementi precedentij < i:- If
arr[j] < arr[i], poidp[i] = max(dp[i], arr[i] + dp[j]).
- If
- Restituisce il valore massimo in
dp.
Esempio:
Input: [1, 101, 2, 3, 100, 4, 5] Output: 106 (1 + 2 + 3 + 100)
Orari: O(n²) | Spazio: O (n)
44) Cos'è la “Trappola”?ping Il problema dell'acqua piovana: come si può risolvere?
Questo classico problema di array chiede quanta acqua può rimanere intrappolata tra le barre dopo la pioggia.
Approccio (due puntatori):
- Inizializzare
left,right,left_max,right_max. - Sposta i puntatori verso l'interno, aggiornando l'acqua intrappolata =
min(left_max, right_max) - height[i].
Esempio:
Input: [0,1,0,2,1,0,1,3,2,1,2,1] Output: 6
| Approccio | Ora | lo spazio |
|---|---|---|
| Brute Force | O(n²) | O (1) |
| Programmazione dinamica | O (n) | O (n) |
| Due puntatori | O (n) | O (1) |
45) Come puoi trovare il sottoarray più lungo con somma uguale a zero?
Algoritmo (mappa hash):
- Inizializza una mappa hash per memorizzare le somme dei prefissi.
- Se ricompare la stessa somma di prefissi, il sottoarray tra gli indici ha somma zero.
Esempio:
Input: [15, -2, 2, -8, 1, 7, 10, 23] Output: Length = 5 (Subarray [-2, 2, -8, 1, 7])
Complessità: O (n)
46) Qual è la differenza tra appiattimento superficiale e profondo di array multidimensionali?
| Tipo | Definizione | Esempio |
|---|---|---|
| Appiattimento superficiale | Appiattisce solo un livello | [[1,2],[3,[4]]] → [1,2,3,[4]] |
| Appiattimento profondo | Appiattisce completamente tutti gli array annidati | [[1,2],[3,[4]]] → [1,2,3,4] |
Esempio (Python):
import itertools shallow = list(itertools.chain.from_iterable(arr))
Caso d'uso: Utile per la pulizia dei dati e la normalizzazione gerarchica dei dati.
47) Come si trova l'elemento di equilibrio in una matrice (array 2D)?
An elemento di equilibrio in una matrice è un elemento il cui somme di righe e colonne sono equilibrati.
Algoritmo:
- Precalcola le somme di righe e colonne.
- Per ogni elemento, controlla se
row_sum[i] - arr[i][j] == col_sum[j] - arr[i][j].
Esempio:
Matrice:
Matrix: 2 7 5 3 1 1 4 6 8 Output: Element 1 at (1,1)
Complessità: O(n²)
48) Come si può suddividere un array in due sottoinsiemi con la stessa somma?
Questo è problema della somma dei sottoinsiemi, risolto usando Programmazione dinamica.
Approccio:
- Calcola la somma totale.
- Se dispari → restituisce False.
- Crea una tabella DP per verificare se il sottoinsieme è con
sum/2esiste.
Esempio:
Input: [1,5,11,5] Output: True (Subsets: [1,5,5] and [11])
Orari: O(n × somma/2) | Spazio: O(somma/2)
49) Come si ruota una matrice di 90 gradi in senso orario?
Algoritmo:
- Trasporre la matrice.
- Reverse ogni riga.
Esempio:
Input: 1 2 3 4 5 6 7 8 9 Output: 7 4 1 8 5 2 9 6 3
Complessità: O(n²), Sul posto.
Usato in elaborazione delle immagini and trasformazioni della visualizzazione dei dati.
50) Quali sono le applicazioni più comuni degli array nel mondo reale?
Gli array sono fondamentali per numerosi sistemi computazionali e reali.
applicazioni:
- Indizzazione del database: Archiviazione e ordinamento dei record.
- Machine Learning: Vettori di caratteristiche, matrici e tensori.
- Elaborazione delle immagini: Dati pixel 2D e 3D.
- OperaSistemi di automazione: Pianificazione della memoria e dei processi.
- Networking: Buffering e routing dei pacchetti.
- Giochi: stato del giocatore tracre e griglie.
| Domini | Ruolo dell'array |
|---|---|
| AI / ML | Rappresentazione tensore e matrice |
| DBMS | Indicizzazione e ottimizzazione della ricerca |
| Embedded Systems | Dati dei sensori in tempo reale |
| Cloud Computing | Array di distribuzione del carico |
Gli array forniscono il struttura portante per un'organizzazione efficiente dei dati, un calcolo e una scalabilità.
🔍 Le migliori domande per i colloqui di lavoro con scenari reali e risposte strategiche
1) Che cos'è un array e in che cosa differisce dalle altre strutture dati?
Requisiti richiesti al candidato: L'intervistatore vuole valutare la tua conoscenza di base degli array, incluso il loro scopo, la loro struttura e le differenze rispetto ad altri tipi di dati, come le liste collegate o le mappe hash.
Esempio di risposta:
"Un array è una raccolta di elementi memorizzati in locazioni di memoria contigue, dove ogni elemento è accessibile tramite un indice. A differenza delle liste concatenate, gli array forniscono un accesso a tempo costante (O(1)) agli elementi, ma richiedono una dimensione fissa definita al momento della creazione. Questo li rende efficienti per le operazioni di lettura, ma meno flessibili per inserimenti ed eliminazioni."
2) Come si trovano in modo efficiente gli elementi più grandi e più piccoli in un array?
Requisiti richiesti al candidato: L'intervistatore vuole verificare il tuo pensiero algoritmico e la tua capacità di ottimizzare le prestazioni.
Esempio di risposta:
"Per trovare in modo efficiente sia l'elemento più grande che quello più piccolo in un array, itererei attraverso l'array una volta, mantenendoping track del massimo e del minimo correnti. Questo approccio ha una complessità temporale di O(n) e una complessità spaziale di O(1), che è ottimale per questo problema."
3) Descrivi come rimuoveresti i duplicati da un array non ordinato.
Requisiti richiesti al candidato: L'intervistatore vuole valutare la tua conoscenza della manipolazione degli array e delle strutture dati che possono aiutarti a raggiungere questo obiettivo.
Esempio di risposta:
"Utilizzerei un set di hash per memorizzare elementi univoci durante l'iterazione dell'array. Se un elemento è già presente nel set, lo salterei; altrimenti, lo aggiungerei. Questo metodo garantisce che i duplicati vengano rimossi in modo efficiente con una complessità temporale di O(n) e una complessità spaziale di O(n)."
4) Puoi spiegare come funziona l'ordinamento degli array e nominare alcuni algoritmi comuni?
Requisiti richiesti al candidato: L'intervistatore si aspetta che abbia familiarità con i diversi algoritmi di ordinamento e con i loro casi d'uso.
Esempio di risposta:
“L'ordinamento degli array può essere ottenuto utilizzando vari algoritmi come Quick Sort, Merge Sort e Bubble Ordina. L'ordinamento rapido è efficiente per i casi medi con complessità O(n log n), mentre l'ordinamento per unione è preferito per i set di dati di grandi dimensioni per la sua natura stabile. Bubble Sort, sebbene semplice, è raramente utilizzato a causa delle sue prestazioni O(n²).
5) Raccontami di quando hai ottimizzato un programma che utilizzava molto gli array.
Requisiti richiesti al candidato: L'intervistatore vuole capire il tuo approccio alla risoluzione dei problemi e la tua capacità di migliorare le prestazioni.
Esempio di risposta:
"Nel mio ruolo precedente, ho ottimizzato uno script di elaborazione dati basato su più cicli annidati su array. Implementando lo slicing degli array e utilizzando operazioni vettoriali integrate, ho ridotto i tempi di esecuzione di quasi il 60%, migliorando significativamente la reattività del sistema."
6) Come gestiresti un errore di indice di array fuori limite?
Requisiti richiesti al candidato: L'intervistatore verificherà la tua comprensione della gestione degli errori e delle pratiche di codifica sicura.
Esempio di risposta:
"Mi assicurerei che tutti gli accessi agli indici siano convalidati prima di essere utilizzati, verificando che rientrino nell'intervallo di lunghezza dell'array. Inoltre, implementerei meccanismi try-catch o metodi equivalenti di gestione degli errori per gestire in modo efficiente gli errori imprevisti fuori limite."
7) Come si inverte un array senza utilizzare memoria aggiuntiva?
Requisiti richiesti al candidato: L'intervistatore vuole valutare la tua efficienza algoritmica e la tua comprensione delle operazioni in atto.
Esempio di risposta:
“Userei due puntatori: uno che parte dall'inizio dell'array e l'altro dalla fine. Tramite scambioping posizionando gli elementi in queste posizioni e spostando entrambi i puntatori verso il centro, l'array può essere invertito sul posto con complessità temporale O(n) e complessità spaziale O(1).
8) Descrivi una situazione in cui hai dovuto gestire un ampio set di dati array. Come hai garantito prestazioni e accuratezza?
Requisiti richiesti al candidato: L'intervistatore vuole valutare la tua capacità di gestire dati reali e di ottimizzare le prestazioni.
Esempio di risposta:
"Nel mio precedente lavoro, lavoravo con grandi array numerici per l'analisi di dati finanziari. Per mantenere le prestazioni, utilizzavo tecniche di gestione della memoria efficienti e l'elaborazione batch. Ho anche sfruttato gli array NumPy per eseguire operazioni vettorializzate, migliorando sia la precisione che la velocità di esecuzione."
9) Quali passaggi dovresti seguire per cercare un valore specifico in un array ordinato?
Requisiti richiesti al candidato: L'intervistatore si aspetta che tu dimostri di conoscere gli algoritmi di ricerca.
Esempio di risposta:
"Per un array ordinato, userei l'algoritmo di ricerca binaria, che divide ripetutamente a metà l'intervallo di ricerca. Questo approccio riduce la complessità temporale a O(log n), rendendolo molto più efficiente di una ricerca lineare per grandi set di dati."
10) In che modo gli array svolgono un ruolo nella risoluzione di problemi reali nello sviluppo del software?
Requisiti richiesti al candidato: L'intervistatore vuole capire come colleghi le conoscenze tecniche alle applicazioni pratiche.
Esempio di risposta:
"Gli array sono fondamentali nello sviluppo software perché supportano l'archiviazione e il recupero efficienti dei dati. Ad esempio, nel mio ultimo ruolo, ho utilizzato gli array per implementare meccanismi di caching e ordinamento dei dati per i dashboard di analisi. Questo ha migliorato l'accessibilità dei dati e ridotto i tempi di risposta alle query."
