Fonte: https://risorse.workable.com/
Ci siamo tutti preparati per un colloquio di programmazione ad un certo punto della nostra vita. Se stai leggendo questo post oggi, per lo più rilascia presto un'intervista. Buona fortuna! Che la forza sia con te!
Che cos'è un test di codifica? Se stai facendo un test di codifica per la prima volta, lascia che ti dica cosa aspettarti. Il test di codifica generalmente consiste in domande algoritmiche che mettono alla prova le tue abilità nelle strutture dati e nell'ottimizzazione del codice.
Le domande poste in questo segmento potrebbero non essere direttamente associate al tuo lavoro.. In realtà, quasi sicuramente non scriverai mai codici per verificare se un numero è primo, un codice per trovare il palindromo o un codice per trovare la sottostringa comune più lunga di 1000 catene da corsa. Lo scopo di questo test è misurare la tua procedura di pensiero e il tuo livello di programmazione.
Ricorda una cosa prima di iniziare qualsiasi test di codifica. Questo suggerimento è valido nei casi in cui il tuo intervistatore sia presente durante lo svolgimento del test o abbia i dettagli di contatto del tuo intervistatore.
Nello sfortunato caso in cui avevi in mente un algoritmo ma non sei riuscito a scrivere il programma, spiega la tua procedura di pensiero (algoritmo) al tuo intervistatore. Non è una situazione in bianco e nero. Pensare ad alta voce o esprimere le tue idee all'intervistatore potrebbe dare all'intervistatore una migliore comprensione delle tue capacità.
Come prepararsi per il test di codifica?
Molti programmatori esperti suggeriscono che la pratica di molti problemi aiuterà a sviluppare l'intuizione e fornirà strumenti per risolvere nuovi problemi.. Molti siti Web come HackerRank e LeetCode ti consentono di fare pratica con il tuo codice e capire quanto sia ottimizzata la tua soluzione..
Ora sai cosa aspettarti da questa fase della procedura di assunzione e conosci alcuni siti per aiutarti lungo il percorso.. Nonostante questo, Come si risolvono questi problemi?? Spiegherò il treno di passi da seguire che mi ha aiutato personalmente.
È impossibile prepararsi per un colloquio di programmazione e non testare questa dichiarazione del problema.
“Dato un numero intero x
, Ritorno true
e x
è un intero palindromo.“
Mi sono imbattuto in questo problema mentre mi esercitavo per una delle mie interviste di programmazione utilizzando LeetCode. qui. Userò questo problema per spiegare i passaggi.
Come volevo divertirmi mentre programmavo, Ho deciso di sperimentare con le liste. Non so se questo codice è stato scritto prima, nonostante questo, questo è stato il mio sforzo personale.
Dopo aver visto alcuni video e aver compreso l'approccio adottato da alcuni programmatori per risolvere questi problemi algoritmici, Ho consolidato i seguenti passaggi per risolvere questo problema. I passaggi menzionati di seguito possono essere utilizzati per qualsiasi problema algoritmico. Il problema palindromo viene utilizzato solo come esempio per mostrare i passaggi per affrontare qualsiasi problema di codifica.
1. Ho capito la domanda? – Cos'è un palindromo??
Secondo Merriam-Webster, un palindromo è stabilito come segue:
una parola, verso o frase (Che cosa “Potrei essere lì prima di vedere l'Elba”) o un numero (Che cosa 1881) che legge lo stesso all'indietro o in avanti
Consideriamo solo numeri interi in questo problema.
Esempi: 12321, 22, 56877865
2. Quali sono le limitazioni da considerare prima di iniziare a scrivere il codice?
Le restrizioni qui si riferiscono alle assunzioni che facciamo prima di scrivere il codice. Non controlleremo se queste condizioni sono soddisfatte. Si presume che gli argomenti passati alla funzione soddisfino le seguenti condizioni. Le restrizioni variano in base alle affermazioni del problema. Ho ridotto le seguenti limitazioni per concentrarmi sull'argomento principale della discussione: utilizzando un elenco in questo problema.
io. Solo numeri interi vengono passati come argomenti.
ii. Gli interi negativi non sono considerati palindromi.
3. Metodo della forza bruta
L'approccio della forza bruta è stabilito in Merriam-Webster come-
fidarsi o ottenere attraverso l'applicazione della forza, sforzo o potere in quantità generalmente grandi piuttosto che metodi più efficienti, pianificato con cura o mirato con precisione
L'approccio della forza bruta è di solito il primo approccio che viene in mente quando si affronta un problema di programmazione..
Qui, l'approccio che ho considerato è stato quello di invertire il numero intero e confrontarlo con il numero intero originale.
#Approccio della forza bruta
def isPalindrome(X):
#Prima assicurati che il risultato sia False quando l'intero è negativo
se x<0:
ritorno Falso
#Inizializzazione della stringa invertita su 0
giro = 0
#Assegnando x all'originale poiché modificheremo x nei passaggi seguenti
originale = x
#Questo ciclo while viene utilizzato per ottenere il contrario di un numero intero.
mentre x>0:
# x (promemoria quando x è diviso per 10) darà l'ultima cifra di x
giro = giro*10 + x%10
#Remove the last digit from x to use if for the next step of the while loop
x = int(x/10)
#Controlla se l'intero invertito è uguale all'intero originale
se int(rev) == originale:
ritorna Vero
altro:
ritorno Falso
Il codice può essere spiegato come segue:
io. Se il numero intero è negativo, restituisce false.
II. Inizializzare un intero (rev) un 0. è variabileIn statistica e matematica, un "variabile" è un simbolo che rappresenta un valore che può cambiare o variare. Esistono diversi tipi di variabili, e qualitativo, che descrivono caratteristiche non numeriche, e quantitativo, che rappresentano quantità numeriche. Le variabili sono fondamentali negli esperimenti e negli studi, poiché consentono l'analisi delle relazioni e dei modelli tra elementi diversi, facilitare la comprensione di fenomeni complessi.... se utilizará para guardar el reverso del entero que se va a chequear.
III. Inizia un ciclo di tempo. Nel ciclo while, otteniamo l'inverso dell'intero originale
IV. Controlla se l'elenco creato nel passaggio II e III è lo stesso. Se è così, il numero è palindromo.
Questo codice è di complessità temporale OPPURE (log n).
4. Il divertimento inizia qui
Il quarto passo è l'ottimizzazione. Nonostante questo, Ho deciso di utilizzare le liste per lo stesso e controllare il loro risultato.
Il mio codice era il seguente:
#Soluzione utilizzando le liste def isPalindrome(X): #Prima assicurati che il risultato sia False quando l'intero è negativo se x<0: ritorno Falso #Converti l'intero in una lista : 123 diventa [1, 2, 3] lst_int = [int(nessuno) per num in str(X)] #Inverti la lista : [1,2,3] diventa [3,2,1] reverse_lst = lst_int[::-1] #Controlla se l'elenco invertito è lo stesso dell'elenco originale if lst_int == reverse_lst: ritorna Vero altro: ritorno Falso
Il codice può essere spiegato come segue:
io. Se il numero intero è negativo, restituisce false
II. Converti l'intero x in una lista: 123 diventa [1,2,3]
III. Invertire la lista: [1,2,3] diventa [3,2,1]
IV. Controlla se l'elenco creato nel passaggio II e III è lo stesso. Se è così, il numero è palindromo.
Potrebbe sembrare che avremmo potuto usare direttamente la funzione stringa sull'intero e invertire la stringa invece di usare l'elenco. Nonostante questo, se vedi la domanda in LeetCode, dado: non memorizzare l'intero come una stringa. Da qui la risposta.
Ogni riga di questo codice è di complessità OR (n). Aggiungi più istruzioni di complessità OPPURE (n) non aumenta la complessità dell'algoritmo. Perché, questa è la risposta OPPURE (n).
Chiaramente, questa soluzione è peggiore del metodo della forza bruta che ha una complessità di O (log n). Questo passaggio è il più difficile per un motivo. Perché dobbiamo pensare molto per assicurarci di non peggiorare le cose di quanto già non siano.. Il quarto passaggio è un passaggio iterativo che viene ripetuto finché non si osserva un miglioramento nella complessità temporale o spaziale del codice..
Visitare qui per guardare le discussioni dei tuoi colleghi programmatori e trarre ispirazione per ottenere il massimo dal codice sopra
conclusione
Questa non è la risposta ottimizzata che dovresti provare nella tua prossima intervista.. È solo un trampolino di lancio per dirti come pensare. Sono uno studente come te e imparo qualcosa di nuovo ogni giorno. Allo stesso tempo, Non voglio aspettare di diventare un esperto per condividere ciò che imparo.
Ti esorto a provare tutte le idee che ti vengono in mente. Forse hai la prossima grande idea!!
Codifica felice!
Il supporto mostrato in questo post non è di proprietà di DataPeaker e viene utilizzato a discrezione dell'autore.