Edukien aurkibidea[Ezkutatu][Erakutsi]
- 1. Nola definitzen duzu Array bat?
- 2. Array dinamikoak: zer dira? Zerk bereizten ditu Basic Arrayetatik?
- 3. Nola aldatzen dira array bat eta hiztegi bat bata bestearengandik?
- 4. Zerrenda ezazu array-en onura eta eragozpen batzuk.
- 5. Zeri egiten dio erreferentzia "Sparse Array"?
- 6. Noiz aukeratuko zenuke estekatutako zerrenda bat array baten gainetik?
- 7. Zerk bereizten du indexatutako array bat array elkartu batetik?
- 8. Zer abantaila ditu Heap-ek ordenatutako arrayekiko?
- 9. Defini al dezakegu matrizearen tamaina negatiboa izateko?
- 10. Nola kokatzen duzu falta den zenbaki osoa 1 eta 100 elementu arteko array batean?
- 11. Nola aurkitzen duzu elementu baten indizea array batean?
- 12. Nola ken dezakezu array batetik elementu zehatz bat?
- 13. Nola egiaztatu daiteke bi matrizeen berdintasuna?
- 14. Matrizei buruz hitz egiten dugunean, zer esan nahi duzu "Dimensioa" eta "Azpiindizea" esaldiekin?
- Kodeketa Elkarrizketa Galderak
- 15. Bilatu pare bat zehaztutako batura duen array batean
- 16. Array bitar ordenatzea denbora linealarekin
- 17. Aurkitu bi int produktu handiena array batean.
- 18. Nola eraman arrayaren zero guztiak amaierara
- 19. Nola ordenatu eragiketa batean aldatzen diren bi sarrera dituen array bat.
- 20. Nola konbinatu ordenatutako bi array lekuan.
- 21. Nola ordenatu elementu sorta bat goi eta beheko posizioetan txandakatuz?
- 22. Nola ordezkatu matrize bateko elementu bakoitza zatiketa-operadorerik erabili gabe matrizeko elementu bakoitzaren produktuarekin?
- 23. Aurkitu array bateko elementurik bitxiena denbora logaritmikoan
- 24. Nola lortu elementu bakoitzaren ondorengo elementu handiagoa matrize zirkular batean?
- 25. Aurkitu matrize baten inbertsio-zenbaketa?
- 26. Zein da euri-ura harrapatzeko arazoa?
- Ondorioa
Kodetze-elkarrizketek DSA galdera sorta bat dute. Array-ekin trebea izan beharko zenuke FAANG-ekin edo Tier-1-ko beste enpresa teknologiko batekin egingo duzun teknologia-elkarrizketarako prestatzen ari bazara.
Kodeketa-elkarrizketa gehienetan Strings-en bigarren postuan dago. Array bat memorian elkarrengandik hurbil mantentzen diren erlazionatutako datu-elementuen multzoa da.
Programazio lengoaia guztietara konektatuta daudenez, hala nola C, C++, Java, Python, Perl eta Ruby, nonahi daude. Jarraitu irakurtzen praktikan kodetzeko erronka batzuk eta elkarrizketen galdera eta erantzunak arrayetan oinarrituta.
Argitalpen honetan Python erabiliko da kodeketa-arazoei aurre egiteko, erabiltzeko erraza delako, eta gutako gehienentzat ezaguna izan behar delako.
Dezagun hasteko.
1. Nola definitzen duzu Array bat?
- Erlazionatutako datu-moten talde bat array bat da.
- Arrayak beti finkoak dira.
- Aldagai mota bera hainbat lekutan gordetzen dute array-objektuek.
- Mota primitiboak eta objektuen erreferentziak bateragarriak dira biak.
2. Array dinamikoak: zer dira? Zerk bereizten ditu Basic Arrayetatik?
Array dinamikoek (matrize handigarriak, tamaina aldagarriak, array aldagarriak edo ArrayLists) eskaintzen duten eskala automatikoa abantaila nabarmena da.
Beti jakin behar duzu zure array-ak zenbat elementu gordeko dituen aldez aurretik, matrizeek tamaina finkoa baitute. Array dinamiko bat, berriz, hazten da kide gehigarriak gehitzen dizkiozun heinean, beraz, ez duzu bere tamaina zehatza aldez aurretik jakin beharrik.
3. Nola aldatzen dira array bat eta hiztegi bat bata bestearengandik?
Oinarrietan oinarritutako aldian-aldian egiten diren elkarrizketa-galderen sorta bat da. Honako hauek dira matrizeen eta hiztegien arteko bereizketa nagusiak:
- Array bat antzeko elementuen zerrenda ordenatua da. Hiztegiak, berriz, gako-balio bikoteak ditu.
- Array-tamainak dinamikoki alda daitezke. Horrelako ideia dinamikoak ez dira hiztegietan existitzen.
- Array bat erabili aurretik, bere tamaina zehaztu behar da. Hiztegien tamainak ez dira pertsonalizatu behar.
- Erabili Redim adierazpena matrizearen tamaina zabaldu nahi baduzu. Hiztegietan, elementu bat gehi daiteke deklaraziorik gabe.
4. Zerrenda ezazu array-en onura eta eragozpen batzuk.
Abantailak:
- Arrayek hainbat elementu ordena ditzakete aldi berean.
- Bestelakoa datu egiturak, pilak, ilarak, estekatutako zerrendak, zuhaitzak, grafikoak, etab. bezala, array batean inplementa daitezke.
- Indize bat erabil daiteke array bateko elementu batera iristeko.
Desabantailak ditu:
- Array baten tamaina aldez aurretik deklaratu behar da. Array-a deklaratzeko unean, agian ez ginateke behar dugun tamainaz jabetuko.
- Array-aren egitura estatikoa da. Horrek esan nahi du matrizearen tamaina beti finkoa dela eta memoriaren esleipena ezin dela handitu edo txikitu.
5. Zeri egiten dio erreferentzia "Sparse Array"?
Array urri bat zero balio duten sarrera asko dituen datu-matrize bat da. Aitzitik, array trinko batek bere elementu gehienak balio ez diren balioak ditu. Zenbakiak objektu bihurtzen dituen matrize urri baten indizeek hutsuneak izan ditzakete. HashMap batekin alderatuta, memoria eraginkorragoak dira.
6. Noiz aukeratuko zenuke estekatutako zerrenda bat array baten gainetik?
Estekatutako zerrendak erabiltzean matrizeen ordez, kontuan hartu:
- Ez duzu elementurik behar ausazko sarbidea izateko.
- Denbora-iragarpena ezinbestekoa den lekuetan, etengabeko txertaketak eta zerrendatik kendu behar dituzu.
- Lehentasun-ilara bat sortzeko, baliteke elementuak zerrendaren erdian jarri behar izatea.
- Ez dakizu zenbat luze izango den zerrenda. Matrizearen tamaina handitzen bada, memoria berriro deklaratu eta bikoiztu behar duzu, array sinpleekin bezala.
7. Zerk bereizten du indexatutako array bat array elkartu batetik?
Array elkartuen eta indexatuen arteko bereizketa nagusiak hurrengo taulan ageri dira.
- Gako-balio bikotea testu edo zenbaki formatuan erabiltzen da elkartze-matrize bat ordenatzeko. Indexatutako matrizearen gakoak guztiak zenbakizkoak dira, eta gako bakoitza balio ezberdin bati lotuta dago.
- Array elkartu batean, gakoa kate bat izan daiteke. Array indexatua 0tik hasten diren gako osoekin.
- Bi zutabeko taula batek array elkartu baten portaera imitatzen du. Zutabe bakarreko taula baten antzera indexatutako matrizeak dira.
- Mapak array mota elkartuak dira. Indize-matrize bat ez da mapa bat.
8. Zer abantaila ditu Heap-ek ordenatutako arrayekiko?
Sorted Arrays baino gehiago Heap erabiltzearen denbora-eraginkortasuna funtsezko abantaila da. Heap eragiketak azkarragoak diren arren, array bat ordenatzeak denbora asko behar du. Heap batek elementu txikiena aurki dezake array bat ordenatu daitekeen baino dezente azkarrago.
Zenbaki-bilduma jakin bat bi modutan antolatu daiteke Sorted Arrays erabiliz. Bestalde, zenbaki-bilduma jakin baterako, potentzial meta bat baino gehiago egon daiteke.
9. Defini al dezakegu matrizearen tamaina negatiboa izateko?
Ez, ezin dugu zenbaki oso negatiborik definitu matrize baten tamaina izan dezan. Ez da konpilazio garaiko errorerik egongo deklaratzen badugu. Exekuzioan, ordea, NegativeArraySizeException aurkituko dugu.
10. Nola kokatzen duzu falta den zenbaki osoa 1 eta 100 elementu arteko array batean?
Seriearen guztirako funtzio hau aplikatuz kalkula daiteke: n (n + 1) / 2
Arrayak bikoizturik ez badu edo zenbaki oso bat baino gehiago falta badu bakarrik funtzionatuko du funtzio honek. Array batek elementu bikoiztuak dituen ala ez, matrizea ordena dezakezu baliokide den elementurik dagoen ikusteko.
11. Nola aurkitzen duzu elementu baten indizea array batean?
Elementu baten indizea bilaketa lineal edo bitar baten bidez aurki daiteke. Beharrezko elementuaren bat-etortzea aurkitzen duen arte, bilaketa-funtzio lineal batek array bateko elementu bakoitzaren gainean ibiltzen da. Bat datorren elementua aurkitzen duenean indizea itzultzen du. Ondorioz, bilaketa linealaren denborazko konplexutasuna O. (n) da. Ordenatu eta ordenatu gabeko matrize batek bilaketa lineala erabil dezakete.
Bilaketa bitar bat erabiliz, zeinak etengabe zatitzen du matrizea erditik tartearen mediana behar den elementuarekin bat datorren arte eta indizea ematen duen arte, elementuaren indizea lor dezakezu matrizea ordenatuta badago. Ondorioz, bilaketa bitarraren denborazko konplexutasuna O. (log n) da.
12. Nola ken dezakezu array batetik elementu zehatz bat?
Ezin dituzunez jatorrizko arrayko elementuak ezabatu, tamaina zehaztutako multzo finkoak direnez, elkarrizketatzaileak beste ikuspegi bat iradoki eta galderak sortzen duen arazoari aurre egiteko bilatzen du. Ekintza onena array berri bat egitea da elementu bat ezabatzeko. Array honetako lehen arrayko elementuak bikoiztu ditzakezu eta ezabatu nahi duzun elementua bakarrik sartu.
Beste estrategia bat xede-elementua matrizean aurkitzea eta, ondoren, xede-elementuaren eskuinaldean dauden elementu guztien ordena alderantzikatzea dakar.
13. Nola egiaztatu daiteke bi matrizeen berdintasuna?
Lehenik eta behin, emandako bi matrizeen luzerak egiaztatu behar dituzu. Bi matrizeen bat datozen elementuak haien luzerak berdinak direnean konparatzen dira. Bi arrayak berdintzat hartuko dira. korrespondentzia guztietan osagai bikote bakoitza berdina bada. Ikuspegi hau ez da gomendatzen bi matrizeen berdintasuna egiaztatzea matrizeak tamaina handikoak badira, denbora asko beharko baitu. Arrays klasean sartutako equals() metodoa ere erabil dezakezu, hala ere, elkarrizketatzaileak bi array konparatzeko eskatzen badizu integratutako metodoak erabili gabe, modu hau erabilgarria izango da.
14. Matrizei buruz hitz egiten dugunean, zer esan nahi duzu "Dimensioa" eta "Azpiindizea" esaldiekin?
Array baten "Dimentsioa" kide bakoitza identifikatzeko behar diren indize edo azpiindize kopurua da. Baliteke harpidetzak eta dimentsioak argi ez egotea. Dimentsioa baimendutako gakoen barrutiaren deskribapena da, eta azpiindizea zenbaki bat da. Array-dimentsio bakoitzeko azpiindize bakarra behar da.
Adibidez, arr[10][5] arrayak bi dimentsio ditu. Batean 10 neurriak eta bestean 5. Bere osagaiak zuzentzeko, bi azpiindize behar dituzu. Biak 0 eta 4 artean daude; bat 0 eta 9 artean, biak barne.
Kodeketa Elkarrizketa Galderak
15. Bilatu pare bat zehaztutako batura duen array batean
Esate baterako,
Sarrera:
- zenbakiak = [8, 7, 2, 5, 3, 1]
- helburua = 10
Irteera:
- Bikotea aurkitu da (8, 2)
- Or
- Bikotea aurkitu da (7, 3)
Sarrera:
- zenbakiak = [5, 2, 6, 8, 1, 9]
- helburua = 12
Irteera:
- Ez da bikotea aurkitu
16. Array bitar ordenatzea denbora linealarekin
Ordenatu matrize bitar bat denbora linealean eta eremu finko batean. Irteerak zero guztiak bistaratu behar ditu lehenik, gero guztiak.
Esate baterako,
- Sarrera: {1, 0, 1, 0, 1, 0, 0, 1}
- Irteera: {0, 0, 0, 0, 1, 1, 1, 1}
Planteamendu sinple bat izango litzateke matrizearen 0-kopuru osoa kalkulatzea, demagun k, eta gero matrizeko lehen k indizeak 0-z eta gainerako indizeak 1-z betetzea. Alternatiba gisa, zenbat 1 diren guztira kalkula genezake. k array, bete arrayko azken k indizeak 1ez, eta utzi gainerako indizeak 0z beteta.
Emandako ikuspegiak O(n) denbora-konplexutasuna du eta ez du biltegiratze gehigarririk erabiltzen, non n sarreraren tamaina den.
17. Aurkitu bi int produktu handiena array batean.
Aurkitu osoko matrize bateko bi zenbakiren produktu handiena.
Pentsa 10 3 5 6 2 array-a adibide gisa. (-10, -3) edo (5, 6) bikotea da produkturik altuena.
Elementu konbinazio guztietan pentsatzea eta haien produktua irudikatzea zentzugabekeria da. Uneko bikotearen produktua orain arte lortutako gehieneko produktua baino handiagoa bada, eguneratu gehienez produktua. Inprimatu azken produktuaren osagaiak.
Goiko soluzioak, non n sarreraren zenbatekoa den, O(n2) denboraren konplexutasuna du eta ez du espazio gehiago hartzen.
18. Nola eraman arrayaren zero guztiak amaierara
Eraman matrize oso bateko zero guztiak amaierara. Erantzunak espazio konstantea erabiltzea saihestu behar du eta array-ren osagaien ordena erlatiboa gorde behar du.
Sarrera: {1,2,3,0,8,0,4,7}
Irteera {1,2,3,8,4,7,0,0} izango da
Jarri elementua array-ko posizio erabilgarri honetan uneko elementua zero ez bada. Bete gainerako indize guztiak 0rekin matrizearen elementu guztiak prozesatu ondoren.
Aurreko soluzioak O(n) denbora-konplexutasuna du, non n sarreraren tamaina den.
19. Nola ordenatu eragiketa batean aldatzen diren bi sarrera dituen array bat.
Ordenatu matrize bat denbora linealean trukaturiko bi elementu eta bere elementu guztiak goranzko ordenan ordenatuta dituen array bat emanda. Itxura ezazu arrayak bikoizturik ez duela.
Sarrera:= [1,9,3,4,7,2] edo [9,3,7,2,1,4] edo [2,4,1,7,3,9]
Irteera: = [1,2,3,4,7,9]
Arrayko bigarren elementutik hasita, elementu bakoitza bere aurrekoarekin alderatzea da helburua. Gatazkaren posizioa bi erakusle hartuz gordetzen da, x eta y.
Eguneratu x aurreko elementuaren indizera eta y uneko elementuaren indizera, lehenengoa bigarrena baino handiagoa bada. Eguneratu y uneko elementuaren indizera aurreko elementua uneko elementua baino handiagoa dela ikusten bada.
Azkenik, aldatu x eta y indizeetako elementuak aldameneko elementu-pare bakoitza prozesatzen amaitu dugunean.
Aipatutako metodoak n tamainako sarrerako arrayaren eskaneatu bakarra egiten duelako, bere denbora konplexutasuna O(n) da. Ez da gela gehigarririk behar konponbiderako.
20. Nola konbinatu ordenatutako bi array lekuan.
Batu X[] eta Y[] matrizeen elementuak —m eta n tamainako bi matrize ordenatu bakoitza— ordena ordenatua mantenduz, hau da, X[] lehenengo m elementu txikienekin betez eta Y[] betez. gainerako elementuak.
X[] array-ko elementu bat dagoeneko posizio egokian badago (hau da, gainerako elementuen artean txikiena dena), alde batera utzi; bestela, ordezkatu elementu txikienarekin, eta hori ere Y[]-ren lehen kidea da. Trukatu ondoren ordenatutako ordena mantentzeko, transferitu elementua (orain Y[0]-n) bere kokapen egokia Y[]-n.
Lehenengo matrizearen tamaina m da eta bigarren matrizearen tamaina n da, eta denboraren konplexutasuna O(mn).
21. Nola ordenatu elementu sorta bat goi eta beheko posizioetan txandakatuz?
Berrantolatu matrize oso bat ondorengo kide bakoitza aurreko eta ondorengo elementuak baino handiagoa izan dadin. Demagun arrayak ez duela elementu bikoizturik sartzen.
Array-a ordenatzea edo espazio gehigarria erabiltzea ez da beharrezkoa hurbilketa eraginkorra izateko. Plana, hasteko, arrayko bigarren kidea da eta bi igotzen da begizta iterazio bakoitzeko.
Trukatu osagaiak azken elementuak lehenengoa gainditzen badu. Ildo beretik, aldatu bi elementuak hurrengo elementua uneko elementua baino handiagoa bada. Begizta amaitzean zehaztutako murrizketak betetzen dituen nahi den matrizea lortuko dugu.
22. Nola ordezkatu matrize bateko elementu bakoitza zatiketa-operadorerik erabili gabe matrizeko elementu bakoitzaren produktuarekin?
Zatiketa-operadorerik erabili gabe, ordeztu matrize osoko elementu bakoitza beste elementu guztien produktuarekin.
Denbora linealean eta espazio konstantean, errekurtsioa erabil dezakegu arazo honi aurre egiteko. Eskuineko azpiko elementu bakoitzaren produktuak errekurtsiboki kalkulatzea eta ezkerreko azpibarrako produktua funtzio-parametro gisa pasatzea da nozioa.
Denboraren konplexutasuna O(n) da.
23. Aurkitu array bateko elementurik bitxiena denbora logaritmikoan
Kide guztiek agerraldi-kopuru bikoitiak dituzten array oso bat emanda, elementu hori zenbat aldiz agertzen den zehaztea da arazoa. Aurkitu elementu bakoitiak denbora logaritmikoan eta espazio konstantean baldin eta elementu berdinak binaka agertzen badira matrizean eta ezin badira inoiz elementu jakin baten bi instantzia baino gehiago egon errenkadan.
XOR eragiketak arazo hau denbora linealean konpontzeko aukera ematen digu. Helburua arrayko elementu guztiak XOR egitea da. Elementu bakoitiak bakarrik geratzen dira, elementu bikoitiek elkar ezeztatu ondoren.
Arazo hau O(log(n)) denboran ere konpondu daiteke.
24. Nola lortu elementu bakoitzaren ondorengo elementu handiagoa matrize zirkular batean?
Osoko matrize zirkular bateko elementu bakoitzaren hurrengo elementu handiagoa kokatu behar da. Arrayko x elementu baten ondorengo lehen zenbaki oso handiagoa elementu horren ondorengo elementu handiagoa da.
Eskuinetik ezkerrera, array-elementuekin funtzionatuko dugu. Helburua x elementu bakoitzaren begizta egitea da, pila hutsik egon arte edo gainean elementu altuago bat izan arte. Ezarri x-ren hurrengo elementu handiagoa pilaren gainean ager dadin egiten duenean.
25. Aurkitu matrize baten inbertsio-zenbaketa?
Aurkitu matrize baten inbertsio-kopuru osoa. I j) bikote bat A matrize baten inbertsioa dela adierazten da I j) eta (A[i] > A[j]). Hauen pare bakoitza zenbatu behar dugu matrizean.
Bere eskuinaldean bera baino gutxiago diren array-kide guztiak zenbatzea eta emaitza irteeran gehitzea ikuspegi zuzena da.
Soluzio honek O(n2) konplexutasuna du, non n sarreraren tamaina den.
26. Zein da euri-ura harrapatzeko arazoa?
Unitate bateko zabalera duten barra-multzo jakin batean harrapa daitekeen ur gehien aurkitzea "euri-harrapaketa" arazoa deritzo.
Helburua barra bakoitzaren ezkerrean eta eskuinaldean jar daitekeen barrarik altuena zehaztea da. Ezkerrerako eta eskuineko barren aurrealdekoen minimoa, uneko barraren altuera kenduta, barra bakoitzaren gainean gordetzen den ur kantitatea da.
Ondorioa
Datu-egiturako beste gai batzuekin alderatuta, matrizeak sinpleagoak dira. Array elkarrizketa-galderak egiteko, array-en oinarrizko ulermena izan behar duzu.
Array-en oinarriak sakon berrikusi beharko zenituzke, array-eragiketak barne (array bat deklaratu/sortzetik array-elementuak atzitu/aldatzeraino), baita begiztak, errekurtsioa eta oinarrizko operadoreak bezalako programazio kontzeptuak ere, array elkarrizketa-galderak arrakastaz erantzuteko. Gaia guztiz aintzat hartu.
Zalantzarik izanez gero, argibideak bilatu behar dituzu. Pentsa gaia zati kudeatuagoetan banatzea. Ziurtatu algoritmoa buruan duzula programatzen hasi aurretik; idatzi edo ikus ezazu fluxu-diagrama batean. gero hasi kodea idazten.
Utzi erantzun bat