{"id":33448,"date":"2025-11-03T01:31:18","date_gmt":"2025-11-02T22:31:18","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/coding-challenge-pratigi-soru-43u-cozme-rehberi\/"},"modified":"2025-11-03T01:31:18","modified_gmt":"2025-11-02T22:31:18","slug":"coding-challenge-pratigi-soru-43u-cozme-rehberi","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/coding-challenge-pratigi-soru-43u-cozme-rehberi\/","title":{"rendered":"Coding Challenge Prati\u011fi: Soru 43&#8217;\u00fc \u00c7\u00f6zme Rehberi"},"content":{"rendered":"<p>Kodlama meydan okumalar\u0131, yaz\u0131l\u0131m geli\u015ftirme becerilerini keskinle\u015ftirmek ve problem \u00e7\u00f6zme yeteneklerini geli\u015ftirmek i\u00e7in harika bir yoldur. \u00d6zellikle m\u00fclakatlara haz\u0131rlan\u0131rken veya yeni bir dil \u00f6\u011frenirken kar\u015f\u0131la\u015f\u0131lan bu sorular, mant\u0131ksal d\u00fc\u015f\u00fcnme ve algoritmik yakla\u015f\u0131mlar\u0131 test eder. Bu makalede, &#8220;Coding Challenge Practice &#8211; Question 43&#8221; ba\u015fl\u0131\u011f\u0131 alt\u0131nda, belirli bir problem \u00fczerinden detayl\u0131 bir analiz ve optimize edilmi\u015f bir \u00e7\u00f6z\u00fcm sunarak, kodlama prati\u011finizi bir \u00fcst seviyeye ta\u015f\u0131yaca\u011f\u0131z.<\/p>\n<p>Yaz\u0131l\u0131m d\u00fcnyas\u0131nda ba\u015far\u0131l\u0131 olman\u0131n temel ta\u015flar\u0131ndan biri, karma\u015f\u0131k problemleri etkili ve verimli bir \u015fekilde \u00e7\u00f6zebilme yetene\u011fidir. Kodlama meydan okumalar\u0131 tam da bu yetene\u011fi geli\u015ftirmek i\u00e7in bi\u00e7ilmi\u015f kaftand\u0131r. Bu pratikler sadece belirli bir programlama dilindeki s\u00f6zdizimi bilginizi de\u011fil, ayn\u0131 zamanda veri yap\u0131lar\u0131, algoritmalar ve problem \u00e7\u00f6zme stratejileri hakk\u0131ndaki derinlemesine anlay\u0131\u015f\u0131n\u0131z\u0131 da s\u0131nar. Bir \u015firkette m\u00fclakat s\u00fcrecinden ge\u00e7meye \u00e7al\u0131\u015f\u0131yor olun ya da sadece ki\u015fisel geli\u015fiminize odaklan\u0131n, d\u00fczenli kodlama prati\u011fi size paha bi\u00e7ilmez faydalar sa\u011flayacakt\u0131r. Algoritmik d\u00fc\u015f\u00fcnme, bir sorunu k\u00fc\u00e7\u00fck, y\u00f6netilebilir par\u00e7alara ay\u0131rma ve her bir par\u00e7ay\u0131 optimize etme becerisi, bu al\u0131\u015ft\u0131rmalarla kazan\u0131lan temel kazan\u0131mlard\u0131r. Dahas\u0131, farkl\u0131 problem t\u00fcrleriyle kar\u015f\u0131la\u015fmak, yarat\u0131c\u0131 \u00e7\u00f6z\u00fcm yollar\u0131 bulma ve ele\u015ftirel d\u00fc\u015f\u00fcnme yetene\u011finizi g\u00fc\u00e7lendirir. Bu s\u00fcre\u00e7te, performans metriklerini (zaman karma\u015f\u0131kl\u0131\u011f\u0131 ve bellek karma\u015f\u0131kl\u0131\u011f\u0131) anlamak ve uygulad\u0131\u011f\u0131n\u0131z \u00e7\u00f6z\u00fcmleri bu metrikler \u00fczerinden de\u011ferlendirmek, sizi daha bilin\u00e7li ve yetkin bir m\u00fchendis yapar. Yaz\u0131l\u0131m\u0131n sadece \u00e7al\u0131\u015fmas\u0131 de\u011fil, ayn\u0131 zamanda verimli \u00e7al\u0131\u015fmas\u0131 gerekti\u011fi ger\u00e7e\u011fi, kodlama meydan okumalar\u0131n\u0131n neden bu kadar merkezi bir role sahip oldu\u011funu a\u00e7\u0131klar. \u00d6rne\u011fin, b\u00fcy\u00fck veri k\u00fcmeleriyle \u00e7al\u0131\u015f\u0131rken, iyi optimize edilmi\u015f bir algoritma saniyeler i\u00e7inde sonu\u00e7 verebilirken, k\u00f6t\u00fc optimize edilmi\u015f bir \u00e7\u00f6z\u00fcm saatler hatta g\u00fcnler s\u00fcrebilir. Bu durum, \u00f6zellikle ger\u00e7ek d\u00fcnya uygulamalar\u0131nda, kullan\u0131c\u0131 deneyimi ve maliyet a\u00e7\u0131s\u0131ndan kritik farklar yarat\u0131r. Bu y\u00fczden, kodlama prati\u011fi, teorik bilginizi pratik becerilere d\u00f6n\u00fc\u015ft\u00fcrmenin en etkili yoludur.<\/p>\n<h3>Soru 43: S\u0131f\u0131rlar\u0131 Sona Ta\u015f\u0131ma Problemini Anlamak<\/h3>\n<p>Bug\u00fcnk\u00fc &#8220;Coding Challenge Practice &#8211; Question 43&#8221; \u00f6rne\u011fimiz, s\u0131k\u00e7a kar\u015f\u0131la\u015f\u0131lan ve \u00fczerine d\u00fc\u015f\u00fcn\u00fclmesi gereken temel bir problemi ele al\u0131yor: &#8220;Verilen bir tam say\u0131 dizisi i\u00e7inde, t\u00fcm s\u0131f\u0131rlar\u0131 dizinin sonuna ta\u015f\u0131y\u0131n ve di\u011fer \u00f6\u011felerin (s\u0131f\u0131r olmayan say\u0131lar\u0131n) orijinal g\u00f6receli s\u0131ras\u0131n\u0131 koruyun. Bu i\u015flemi, m\u00fcmk\u00fcnse, dizinin kendisini de\u011fi\u015ftirerek (in-place) yapmaya \u00e7al\u0131\u015f\u0131n.&#8221; Bu problem, array manip\u00fclasyonu ve verimlilik konular\u0131nda temel bir anlay\u0131\u015f gerektirir. \u00d6rnek olarak, <code>[0,1,0,3,12]<\/code> gibi bir dizi verildi\u011finde, \u00e7\u0131kt\u0131n\u0131n <code>[1,3,12,0,0]<\/code> olmas\u0131 beklenir. Buradaki kritik nokta, s\u0131f\u0131r olmayan say\u0131lar\u0131n kendi aralar\u0131ndaki s\u0131ralamas\u0131n\u0131n bozulmamas\u0131 gerekti\u011fidir. Yani, 1&#8217;in 3&#8217;ten \u00f6nce ve 3&#8217;\u00fcn 12&#8217;den \u00f6nce gelmesi durumu korunmal\u0131d\u0131r. Bu problem ilk bak\u0131\u015fta basit g\u00f6r\u00fcnse de, in-place ve orijinal s\u0131ralamay\u0131 koruma ko\u015fullar\u0131, naive bir yakla\u015f\u0131mdan daha sofistike bir \u00e7\u00f6z\u00fcm gerektirir. Problemi anlaman\u0131n ilk ad\u0131m\u0131, beklentileri net bir \u015fekilde belirlemektir: ne t\u00fcr bir girdi alaca\u011f\u0131z (sadece tam say\u0131lar m\u0131, negatif say\u0131lar da olabilir mi?), \u00e7\u0131kt\u0131 format\u0131 ne olmal\u0131 (yeni bir dizi mi d\u00f6nd\u00fcrece\u011fiz yoksa mevcut diziyi mi de\u011fi\u015ftirece\u011fiz?), ve en \u00f6nemlisi, k\u0131s\u0131tlamalar neler (bellek kullan\u0131m\u0131, zaman s\u0131n\u0131r\u0131). S\u0131f\u0131rlar\u0131 sona ta\u015f\u0131ma eylemi, genellikle iki ana strateji ile ele al\u0131nabilir: birincisi, s\u0131f\u0131r olmayan \u00f6\u011feleri toplay\u0131p ard\u0131ndan s\u0131f\u0131rlar\u0131 eklemek; ikincisi ise dizinin i\u00e7inde do\u011frudan \u00f6\u011feleri yer de\u011fi\u015ftirerek istenen duruma ula\u015fmakt\u0131r. \u0130kinci yakla\u015f\u0131m, genellikle &#8220;in-place&#8221; \u00e7\u00f6z\u00fcmler i\u00e7in tercih edilir ve bellek karma\u015f\u0131kl\u0131\u011f\u0131 a\u00e7\u0131s\u0131ndan daha avantajl\u0131d\u0131r. Problemin bu detaylar\u0131, do\u011fru algoritmay\u0131 se\u00e7mek ve geli\u015ftirmek i\u00e7in kritik \u00f6neme sahiptir.<\/p>\n<h2>Brute-Force Yakla\u015f\u0131m\u0131: \u0130lk \u00c7\u00f6z\u00fcm Denemesi Nas\u0131l Yap\u0131l\u0131r?<\/h2>\n<p>Herhangi bir kodlama meydan okumas\u0131nda, genellikle akla gelen ilk \u00e7\u00f6z\u00fcm, en basit ve en do\u011frudan olan\u0131d\u0131r. Bu genellikle &#8220;brute-force&#8221; (kaba kuvvet) yakla\u015f\u0131m\u0131 olarak adland\u0131r\u0131l\u0131r. Soru 43 i\u00e7in, yani s\u0131f\u0131rlar\u0131 sona ta\u015f\u0131ma ve di\u011fer say\u0131lar\u0131n orijinal s\u0131ras\u0131n\u0131 koruma problemi i\u00e7in, akla gelebilecek ilk y\u00f6ntemlerden biri, s\u0131f\u0131r olmayan t\u00fcm elemanlar\u0131 yeni bir listeye toplamak ve ard\u0131ndan orijinal dizideki s\u0131f\u0131r say\u0131s\u0131 kadar s\u0131f\u0131r\u0131 bu yeni listenin sonuna eklemektir. Bu y\u00f6ntem, problemin \u015fartlar\u0131n\u0131 (s\u0131f\u0131r olmayanlar\u0131n s\u0131ras\u0131n\u0131 koruma ve s\u0131f\u0131rlar\u0131 sona ta\u015f\u0131ma) do\u011frudan kar\u015f\u0131lar ancak &#8220;in-place&#8221; olma \u015fart\u0131n\u0131 sa\u011flamaz ve ek bellek kullan\u0131m\u0131na neden olur. Hadi bu yakla\u015f\u0131m\u0131 daha detayl\u0131 inceleyelim. \u0130lk olarak, diziyi ba\u015ftan sona tarar\u0131z. Kar\u015f\u0131la\u015ft\u0131\u011f\u0131m\u0131z her s\u0131f\u0131r olmayan say\u0131y\u0131 yeni bir bo\u015f diziye (veya liste yap\u0131s\u0131na) ekleriz. Bu s\u0131rada, dizide ka\u00e7 tane s\u0131f\u0131r oldu\u011funu da sayar\u0131z. Tarama bittikten sonra, yeni olu\u015fturdu\u011fumuz dizi, orijinal dizideki t\u00fcm s\u0131f\u0131r olmayan elemanlar\u0131, g\u00f6receli s\u0131ralar\u0131n\u0131 koruyarak i\u00e7erecektir. Ard\u0131ndan, sayd\u0131\u011f\u0131m\u0131z s\u0131f\u0131r adedi kadar s\u0131f\u0131r\u0131 bu yeni dizinin sonuna ekleriz. Son olarak, orijinal diziyi bu yeni diziyle e\u015fitleyebilir veya d\u00f6nd\u00fcrebiliriz. Bu yakla\u015f\u0131m, anla\u015f\u0131lmas\u0131 ve uygulanmas\u0131 kolay oldu\u011fu i\u00e7in iyi bir ba\u015flang\u0131\u00e7 noktas\u0131d\u0131r. Ancak performans a\u00e7\u0131s\u0131ndan baz\u0131 dezavantajlar\u0131 vard\u0131r. \u00d6rne\u011fin, <code>N<\/code> elemanl\u0131 bir dizi i\u00e7in, yeni bir dizi olu\u015fturmak O(N) ek bellek alan\u0131 gerektirir. Ayr\u0131ca, elemanlar\u0131 tek tek yeni diziye kopyalama i\u015flemi de O(N) zaman karma\u015f\u0131kl\u0131\u011f\u0131na sahiptir. B\u00fcy\u00fck veri setleriyle \u00e7al\u0131\u015f\u0131rken bu ekstra bellek ve i\u015flem maliyeti \u00f6nemli hale gelebilir. A\u015fa\u011f\u0131da JavaScript ile yaz\u0131lm\u0131\u015f basit bir \u00f6rnek g\u00f6rebilirsiniz:<\/p>\n<pre><code class=\"language-javascript\">\nfunction moveZerosBruteForce(nums) {\n    const nonZeroElements = [];\n    let zeroCount = 0;\n\n    for (let i = 0; i < nums.length; i++) {\n        if (nums[i] !== 0) {\n            nonZeroElements.push(nums[i]);\n        } else {\n            zeroCount++;\n        }\n    }\n\n    for (let i = 0; i < zeroCount; i++) {\n        nonZeroElements.push(0);\n    }\n\n    \/\/ Orijinal diziyi de\u011fi\u015ftirmek istiyorsak\n    for (let i = 0; i < nums.length; i++) {\n        nums[i] = nonZeroElements[i];\n    }\n\n    \/\/ Veya sadece yeni diziyi d\u00f6nd\u00fcrebiliriz\n    \/\/ return nonZeroElements;\n}\n\nconst arr1 = [0,1,0,3,12];\nmoveZerosBruteForce(arr1);\nconsole.log(arr1); \/\/ \u00c7\u0131kt\u0131: [1,3,12,0,0]\n\nconst arr2 = [0,0,1];\nmoveZerosBruteForce(arr2);\nconsole.log(arr2); \/\/ \u00c7\u0131kt\u0131: [1,0,0]\n\nconst arr3 = [1,2,3];\nmoveZerosBruteForce(arr3);\nconsole.log(arr3); \/\/ \u00c7\u0131kt\u0131: [1,2,3]\n<\/pre>\n<p><\/code><\/p>\n<p>Bu kod blo\u011funda g\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi, <code>nonZeroElements<\/code> ad\u0131nda yeni bir dizi olu\u015fturarak problemi \u00e7\u00f6z\u00fcyoruz. Bu, mant\u0131k olarak do\u011fru olsa da, \"in-place\" k\u0131s\u0131tlamas\u0131n\u0131 ve dolay\u0131s\u0131yla daha iyi bir bellek performans\u0131 hedefini kar\u015f\u0131lamaz. Bu nedenle, genellikle m\u00fclakatlarda veya performans\u0131n kritik oldu\u011fu senaryolarda daha optimize \u00e7\u00f6z\u00fcmler beklenir.<\/p>\n<h3>Optimizasyon Yollar\u0131: Neden Daha \u0130yisini Aramal\u0131y\u0131z?<\/h3>\n<p>Brute-force yakla\u015f\u0131m\u0131, \u00e7o\u011fu zaman bir problemin en basit \u00e7\u00f6z\u00fcm\u00fcn\u00fc sunsa da, genellikle en verimli \u00e7\u00f6z\u00fcm de\u011fildir. \"Coding Challenge Practice - Question 43\" \u00f6rne\u011fimizde, yani s\u0131f\u0131rlar\u0131 sona ta\u015f\u0131ma probleminde, brute-force \u00e7\u00f6z\u00fcm\u00fcm\u00fcz O(N) zaman karma\u015f\u0131kl\u0131\u011f\u0131na ve O(N) ek bellek karma\u015f\u0131kl\u0131\u011f\u0131na sahipti. Neden daha iyisini aramal\u0131y\u0131z? Bu sorunun cevab\u0131, \u00f6l\u00e7eklenebilirlik ve kaynak verimlili\u011fiyle yak\u0131ndan ilgilidir. G\u00fcn\u00fcm\u00fcz\u00fcn yaz\u0131l\u0131m sistemleri genellikle \u00e7ok b\u00fcy\u00fck veri setleriyle \u00e7al\u0131\u015f\u0131r. E\u011fer bir algoritma b\u00fcy\u00fck veri setlerinde verimsiz \u00e7al\u0131\u015f\u0131yorsa, bu durum uygulaman\u0131n yava\u015flamas\u0131na, sunucu maliyetlerinin artmas\u0131na ve hatta kullan\u0131c\u0131 deneyiminin ciddi \u015fekilde k\u00f6t\u00fcle\u015fmesine neden olabilir. O(N) ek bellek kullan\u0131m\u0131, k\u00fc\u00e7\u00fck diziler i\u00e7in kabul edilebilir olsa da, milyonlarca eleman\u0131 olan bir dizi i\u00e7in ciddi bir bellek t\u00fcketimi anlam\u0131na gelebilir. Bu durum, \u00f6zellikle g\u00f6m\u00fcl\u00fc sistemler, mobil uygulamalar veya sunucu taraf\u0131nda ayn\u0131 anda binlerce iste\u011fi i\u015fleyen mikro hizmetler gibi bellek k\u0131s\u0131tl\u0131 ortamlarda b\u00fcy\u00fck bir problem yarat\u0131r. Daha verimli bir \u00e7\u00f6z\u00fcm aray\u0131\u015f\u0131m\u0131zda, genellikle \"in-place\" (yerinde) algoritmalar hedefleriz. In-place algoritmalar, mevcut veri yap\u0131s\u0131n\u0131 d\u00f6n\u00fc\u015ft\u00fcrerek, ek bellek kullan\u0131m\u0131n\u0131 minimuma indirir (genellikle O(1) veya O(log N) ek bellek). Bu, \u00f6zellikle kaynaklar\u0131 verimli kullanmak istedi\u011fimiz durumlarda \u00e7ok \u00f6nemlidir. Algoritma optimizasyonu ayn\u0131 zamanda zaman karma\u015f\u0131kl\u0131\u011f\u0131n\u0131 da iyile\u015ftirmeyi ama\u00e7lar. O(N) bir algoritma genellikle kabul edilebilir olsa da, baz\u0131 durumlarda O(N log N) veya O(N^2) gibi karma\u015f\u0131kl\u0131klar, \u00f6zellikle i\u00e7 i\u00e7e d\u00f6ng\u00fclerden kaynaklan\u0131yorsa, b\u00fcy\u00fck veri setlerinde kabul edilemez derecede yava\u015f olabilir. Soru 43 i\u00e7in, dizinin mevcut yap\u0131s\u0131n\u0131 kullanarak, s\u0131f\u0131r olmayan elemanlar\u0131 ba\u015fa do\u011fru itmek ve kalan yerleri s\u0131f\u0131rlarla doldurmak gibi bir strateji, hem in-place olabilir hem de ek bellek kullanmaktan ka\u00e7\u0131nabilir. Bu, ayn\u0131 zamanda daha az i\u015flem ad\u0131m\u0131 anlam\u0131na gelerek zaman karma\u015f\u0131kl\u0131\u011f\u0131n\u0131 da optimal seviyede tutabilir. Optimizasyon sadece daha h\u0131zl\u0131 kod yazmakla ilgili de\u011fildir; ayn\u0131 zamanda daha zarif, daha s\u00fcrd\u00fcr\u00fclebilir ve daha kaynak dostu \u00e7\u00f6z\u00fcmler geli\u015ftirmekle de ilgilidir. Bu beceri, sizi sadece bir kodlay\u0131c\u0131dan bir problem \u00e7\u00f6z\u00fcc\u00fcye d\u00f6n\u00fc\u015ft\u00fcr\u00fcr.<\/p>\n<div class=\"expert-tip\">Uzman \u0130pucu: Algoritma optimizasyonu yaparken, problemin k\u0131s\u0131tlamalar\u0131n\u0131 ve beklenen girdi boyutlar\u0131n\u0131 her zaman g\u00f6z \u00f6n\u00fcnde bulundurun. Her zaman en karma\u015f\u0131k veya en h\u0131zl\u0131 algoritmaya ihtiya\u00e7 duymazs\u0131n\u0131z; bazen en basit, yeterince iyi olan \u00e7\u00f6z\u00fcm daha iyi bir se\u00e7im olabilir. Ancak, performans kritik senaryolarda, en verimli yolu bulmak genellikle belirleyici fakt\u00f6rd\u00fcr.<\/div>\n<h2>\u0130ki \u0130\u015faret\u00e7i (Two-Pointers) Tekni\u011fiyle Soru 43 Nas\u0131l \u00c7\u00f6z\u00fcl\u00fcr?<\/h2>\n<p>S\u0131f\u0131rlar\u0131 sona ta\u015f\u0131ma probleminde \"in-place\" ve orijinal s\u0131ralamay\u0131 koruma k\u0131s\u0131tlamalar\u0131n\u0131 en iyi \u015fekilde kar\u015f\u0131layan pop\u00fcler ve verimli bir yakla\u015f\u0131m, \"iki i\u015faret\u00e7i\" (two-pointers) tekni\u011fidir. Bu teknik, diziyi tek bir ge\u00e7i\u015fte (veya \u00e7ok az say\u0131da ge\u00e7i\u015fle) manip\u00fcle ederek, hem O(N) zaman karma\u015f\u0131kl\u0131\u011f\u0131na hem de O(1) ek bellek karma\u015f\u0131kl\u0131\u011f\u0131na sahip bir \u00e7\u00f6z\u00fcm sunar. Temel fikir \u015fudur: bir i\u015faret\u00e7i (genellikle <code>write_pointer<\/code> veya <code>insert_pos<\/code> olarak adland\u0131r\u0131l\u0131r) dizinin ba\u015f\u0131na yerle\u015ftirilir ve s\u0131f\u0131r olmayan elemanlar\u0131n yerle\u015ftirilece\u011fi mevcut konumu takip eder. Di\u011fer i\u015faret\u00e7i (genellikle <code>read_pointer<\/code> veya basit\u00e7e d\u00f6ng\u00fc de\u011fi\u015fkeni <code>i<\/code>) diziyi ba\u015ftan sona tarar. <code>read_pointer<\/code> s\u0131f\u0131r olmayan bir eleman buldu\u011funda, bu eleman\u0131 <code>write_pointer<\/code>'\u0131n g\u00f6sterdi\u011fi konuma kopyalar ve ard\u0131ndan <code>write_pointer<\/code>'\u0131 bir art\u0131r\u0131r. E\u011fer <code>read_pointer<\/code> s\u0131f\u0131r ile kar\u015f\u0131la\u015f\u0131rsa, hi\u00e7bir \u015fey yapmaz, \u00e7\u00fcnk\u00fc s\u0131f\u0131rlar\u0131 \u015fimdilik g\u00f6z ard\u0131 ediyoruz ve sona do\u011fru itilece\u011fini biliyoruz. <code>read_pointer<\/code> dizinin sonuna ula\u015ft\u0131\u011f\u0131nda, <code>write_pointer<\/code>'\u0131n g\u00f6sterdi\u011fi konumdan itibaren dizinin geri kalan t\u00fcm elemanlar\u0131 (ki bunlar ba\u015flang\u0131\u00e7ta s\u0131f\u0131r olmayan elemanlar\u0131n yerlerini doldurmu\u015f olabilecekleri i\u00e7in art\u0131k anlams\u0131zd\u0131r) s\u0131f\u0131r olmal\u0131d\u0131r. \u00c7\u00fcnk\u00fc <code>write_pointer<\/code> sadece s\u0131f\u0131r olmayanlar\u0131 ilerletir. B\u00f6ylece, <code>write_pointer<\/code>'dan dizinin sonuna kadar olan t\u00fcm pozisyonlara s\u0131f\u0131r yerle\u015ftirilir. Bu y\u00f6ntem, s\u0131f\u0131r olmayan say\u0131lar\u0131n g\u00f6receli s\u0131ras\u0131n\u0131 korur \u00e7\u00fcnk\u00fc onlar\u0131 bulduklar\u0131 s\u0131raya g\u00f6re dizinin ba\u015f\u0131na do\u011fru kopyalar. Ayn\u0131 zamanda, ek bellek kullanmadan mevcut dizi \u00fczerinde \u00e7al\u0131\u015f\u0131r.<\/p>\n<p>Ad\u0131m ad\u0131m s\u00fcreci g\u00f6rselle\u015ftirelim:<\/p>\n<ol>\n<li><code>write_pointer<\/code> ve <code>read_pointer<\/code>'\u0131 dizinin ba\u015f\u0131na (index 0) ayarla.<\/li>\n<li><code>read_pointer<\/code> dizinin sonuna ula\u015fana kadar devam et:\n<ul>\n<li>E\u011fer <code>nums[read_pointer]<\/code> s\u0131f\u0131r de\u011filse:\n<ul>\n<li><code>nums[write_pointer] = nums[read_pointer]<\/code> yap.<\/li>\n<li><code>write_pointer<\/code>'\u0131 bir art\u0131r.<\/li>\n<\/ul>\n<\/li>\n<li>Her ad\u0131mda <code>read_pointer<\/code>'\u0131 bir art\u0131r.<\/li>\n<\/ul>\n<\/li>\n<li><code>write_pointer<\/code>'\u0131n g\u00f6sterdi\u011fi konumdan dizinin sonuna kadar olan t\u00fcm elemanlar\u0131 s\u0131f\u0131r ile doldur.<\/li>\n<\/ol>\n<p>Bu ak\u0131\u015f, diziyi tek bir ge\u00e7i\u015fte i\u015fleyerek hem zaman hem de bellek a\u00e7\u0131s\u0131ndan optimal bir \u00e7\u00f6z\u00fcm sunar. \u00d6zellikle b\u00fcy\u00fck dizilerde performans fark\u0131 \u00e7ok belirgin olacakt\u0131r. A\u015fa\u011f\u0131da bu tekni\u011fi uygulayan JavaScript kodu bulunmaktad\u0131r:<\/p>\n<pre><code class=\"language-javascript\">\nfunction moveZerosTwoPointers(nums) {\n    let writePointer = 0; \/\/ Bu i\u015faret\u00e7i, s\u0131f\u0131r olmayan elemanlar\u0131n yaz\u0131laca\u011f\u0131 konumu g\u00f6sterir.\n\n    \/\/ \u0130lk ge\u00e7i\u015f: T\u00fcm s\u0131f\u0131r olmayan elemanlar\u0131 dizinin ba\u015f\u0131na ta\u015f\u0131\n    for (let readPointer = 0; readPointer < nums.length; readPointer++) {\n        if (nums[readPointer] !== 0) {\n            nums[writePointer] = nums[readPointer];\n            writePointer++;\n        }\n    }\n\n    \/\/ \u0130kinci ge\u00e7i\u015f: writePointer'dan dizinin sonuna kadar olan t\u00fcm elemanlar\u0131 s\u0131f\u0131rla doldur\n    for (let i = writePointer; i < nums.length; i++) {\n        nums[i] = 0;\n    }\n    \/\/ Dizi \"in-place\" de\u011fi\u015ftirildi\u011fi i\u00e7in herhangi bir de\u011fer d\u00f6nd\u00fcrmeye gerek yok.\n    \/\/ Ancak fonksiyonun sonunda diziyi d\u00f6nd\u00fcrmek yayg\u0131n bir pratiktir.\n    \/\/ return nums; \n}\n\nconst arr4 = [0,1,0,3,12];\nmoveZerosTwoPointers(arr4);\nconsole.log(arr4); \/\/ \u00c7\u0131kt\u0131: [1,3,12,0,0]\n\nconst arr5 = [0,0,1];\nmoveZerosTwoPointers(arr5);\nconsole.log(arr5); \/\/ \u00c7\u0131kt\u0131: [1,0,0]\n\nconst arr6 = [1,2,3];\nmoveZerosTwoPointers(arr6);\nconsole.log(arr6); \/\/ \u00c7\u0131kt\u0131: [1,2,3]\n\nconst arr7 = [0];\nmoveZerosTwoPointers(arr7);\nconsole.log(arr7); \/\/ \u00c7\u0131kt\u0131: [0]\n\nconst arr8 = [1];\nmoveZerosTwoPointers(arr8);\nconsole.log(arr8); \/\/ \u00c7\u0131kt\u0131: [1]\n<\/pre>\n<p><\/code><\/p>\n<p>Bu \u00e7\u00f6z\u00fcm, hem \"in-place\" olma \u015fart\u0131n\u0131 kar\u015f\u0131lar hem de s\u0131f\u0131r olmayan say\u0131lar\u0131n g\u00f6receli s\u0131ralamas\u0131n\u0131 korur. \u0130ki i\u015faret\u00e7i tekni\u011fi, array ve string manip\u00fclasyon problemlerinde s\u0131k\u00e7a kullan\u0131lan ve olduk\u00e7a etkili bir stratejidir. Bu sayede, daha verimli kodlar yazabilirsiniz. \u00d6zellikle bu tarz problemler, teknik m\u00fclakatlarda adaylar\u0131n algoritmik d\u00fc\u015f\u00fcnme yetene\u011fini \u00f6l\u00e7mek i\u00e7in s\u0131kl\u0131kla sorulur. Performans a\u00e7\u0131s\u0131ndan, zaman karma\u015f\u0131kl\u0131\u011f\u0131 O(N) (diziyi iki kez tar\u0131yoruz ancak toplamda N eleman kadar i\u015flem yap\u0131l\u0131yor) ve bellek karma\u015f\u0131kl\u0131\u011f\u0131 O(1) (sadece birka\u00e7 de\u011fi\u015fken kullan\u0131yoruz) olarak kabul edilir. Bu, genellikle bir kodlama meydan okumas\u0131 i\u00e7in beklenen optimal \u00e7\u00f6z\u00fcmd\u00fcr.<\/p>\n<h3>Test Senaryolar\u0131 ve Kenar Durumlar: \u00c7\u00f6z\u00fcm\u00fcn\u00fcz Ne Kadar Sa\u011flam?<\/h3>\n<p>Bir algoritma geli\u015ftirdi\u011finizde, sadece ana senaryo i\u00e7in do\u011fru \u00e7al\u0131\u015ft\u0131\u011f\u0131ndan emin olmak yeterli de\u011fildir. Ger\u00e7ek d\u00fcnya uygulamalar\u0131nda, beklenmedik girdiler veya \"kenar durumlar\" (edge cases) algoritmalar\u0131n \u00e7\u00f6kmesine veya yanl\u0131\u015f sonu\u00e7lar \u00fcretmesine neden olabilir. Bu nedenle, kapsaml\u0131 test senaryolar\u0131 olu\u015fturmak, \u00e7\u00f6z\u00fcm\u00fcn\u00fcz\u00fcn sa\u011flaml\u0131\u011f\u0131n\u0131 ve g\u00fcvenilirli\u011fini garanti alt\u0131na almak i\u00e7in kritik \u00f6neme sahiptir. Soru 43 i\u00e7in geli\u015ftirdi\u011fimiz \"iki i\u015faret\u00e7i\" \u00e7\u00f6z\u00fcm\u00fcn\u00fc test ederken a\u015fa\u011f\u0131daki gibi durumlar\u0131 g\u00f6z \u00f6n\u00fcnde bulundurmal\u0131y\u0131z:<\/p>\n<ul>\n<li>\n        <strong>Bo\u015f Dizi:<\/strong> <code>[]<\/code>. \u00c7\u00f6z\u00fcm\u00fcm\u00fcz bo\u015f bir diziyle kar\u015f\u0131la\u015ft\u0131\u011f\u0131nda ne yapmal\u0131? Kodumuz hata vermeden \u00e7al\u0131\u015fmal\u0131 ve bo\u015f bir dizi d\u00f6nd\u00fcrmelidir.\n    <\/li>\n<li>\n        <strong>Sadece S\u0131f\u0131rlardan Olu\u015fan Dizi:<\/strong> <code>[0,0,0]<\/code>. \u00c7\u0131kt\u0131 yine <code>[0,0,0]<\/code> olmal\u0131. writePointer hi\u00e7 hareket etmemeli ve d\u00f6ng\u00fc sonunda t\u00fcm pozisyonlar s\u0131f\u0131r olarak kalmal\u0131.\n    <\/li>\n<li>\n        <strong>S\u0131f\u0131r Olmayan Say\u0131lardan Olu\u015fan Dizi:<\/strong> <code>[1,2,3]<\/code>. Dizi de\u011fi\u015fmeden kalmal\u0131, yani \u00e7\u0131kt\u0131 <code>[1,2,3]<\/code> olmal\u0131. writePointer, readPointer ile birlikte hareket etmeli.\n    <\/li>\n<li>\n        <strong>Tek Elemanl\u0131 Dizi (S\u0131f\u0131r):<\/strong> <code>[0]<\/code>. \u00c7\u0131kt\u0131 <code>[0]<\/code> olmal\u0131.\n    <\/li>\n<li>\n        <strong>Tek Elemanl\u0131 Dizi (S\u0131f\u0131r Olmayan):<\/strong> <code>[5]<\/code>. \u00c7\u0131kt\u0131 <code>[5]<\/code> olmal\u0131.\n    <\/li>\n<li>\n        <strong>S\u0131f\u0131rlar\u0131n Ba\u015fta Oldu\u011fu Dizi:<\/strong> <code>[0,0,1,2,3]<\/code>. \u00c7\u0131kt\u0131 <code>[1,2,3,0,0]<\/code> olmal\u0131. Bu senaryo, writePointer'\u0131n ba\u015flang\u0131\u00e7ta geride kal\u0131p daha sonra s\u0131f\u0131r olmayanlar\u0131 yerine yazmas\u0131n\u0131 test eder.\n    <\/li>\n<li>\n        <strong>S\u0131f\u0131rlar\u0131n Ortada Oldu\u011fu Dizi:<\/strong> <code>[1,0,2,0,3]<\/code>. \u00c7\u0131kt\u0131 <code>[1,2,3,0,0]<\/code> olmal\u0131. Bu senaryo, elemanlar\u0131n g\u00f6receli s\u0131ras\u0131n\u0131n korunmas\u0131n\u0131 iyi bir \u015fekilde test eder.\n    <\/li>\n<li>\n        <strong>S\u0131f\u0131rlar\u0131n Sonda Oldu\u011fu Dizi:<\/strong> <code>[1,2,3,0,0]<\/code>. \u00c7\u0131kt\u0131 <code>[1,2,3,0,0]<\/code> olmal\u0131. Bu, \u00e7\u00f6z\u00fcm\u00fcm\u00fcz\u00fcn gereksiz yere i\u015flem yap\u0131p yapmad\u0131\u011f\u0131n\u0131 veya do\u011fru durumda hi\u00e7bir de\u011fi\u015fiklik yapmad\u0131\u011f\u0131n\u0131 kontrol eder.<\/li>\n<\/ul>\n<p>Bu test senaryolar\u0131n\u0131 manuel olarak veya otomatik testler (unit testler) yazarak kontrol etmek, \u00e7\u00f6z\u00fcm\u00fcn\u00fcz\u00fcn her ko\u015fulda beklendi\u011fi gibi davrand\u0131\u011f\u0131ndan emin olman\u0131z\u0131 sa\u011flar. \u00d6rne\u011fin, bir test framework'\u00fc kullanarak a\u015fa\u011f\u0131daki gibi bir test s\u00fciti olu\u015fturulabilir:<\/p>\n<pre><code class=\"language-javascript\">\n\/\/ Farz edelim ki bir test framework'\u00fc (\u00f6rne\u011fin Jest) kullan\u0131yoruz.\n\nfunction testMoveZerosTwoPointers() {\n    let arr;\n\n    \/\/ Test Case 1: Bo\u015f dizi\n    arr = [];\n    moveZerosTwoPointers(arr);\n    console.assert(JSON.stringify(arr) === JSON.stringify([]), \"Test 1 Failed: Bo\u015f dizi\");\n\n    \/\/ Test Case 2: Sadece s\u0131f\u0131rlardan olu\u015fan dizi\n    arr = [0, 0, 0];\n    moveZerosTwoPointers(arr);\n    console.assert(JSON.stringify(arr) === JSON.stringify([0, 0, 0]), \"Test 2 Failed: Sadece s\u0131f\u0131rlar\");\n\n    \/\/ Test Case 3: S\u0131f\u0131r olmayan say\u0131lardan olu\u015fan dizi\n    arr = [1, 2, 3];\n    moveZerosTwoPointers(arr);\n    console.assert(JSON.stringify(arr) === JSON.stringify([1, 2, 3]), \"Test 3 Failed: S\u0131f\u0131r olmayanlar\");\n\n    \/\/ Test Case 4: Tek elemanl\u0131 dizi (s\u0131f\u0131r)\n    arr = [0];\n    moveZerosTwoPointers(arr);\n    console.assert(JSON.stringify(arr) === JSON.stringify([0]), \"Test 4 Failed: Tek eleman s\u0131f\u0131r\");\n\n    \/\/ Test Case 5: Tek elemanl\u0131 dizi (s\u0131f\u0131r olmayan)\n    arr = [5];\n    moveZerosTwoPointers(arr);\n    console.assert(JSON.stringify(arr) === JSON.stringify([5]), \"Test 5 Failed: Tek eleman s\u0131f\u0131r olmayan\");\n\n    \/\/ Test Case 6: Kar\u0131\u015f\u0131k dizi - S\u0131f\u0131rlar ba\u015fta\n    arr = [0, 0, 1, 2, 3];\n    moveZerosTwoPointers(arr);\n    console.assert(JSON.stringify(arr) === JSON.stringify([1, 2, 3, 0, 0]), \"Test 6 Failed: S\u0131f\u0131rlar ba\u015fta\");\n\n    \/\/ Test Case 7: Kar\u0131\u015f\u0131k dizi - S\u0131f\u0131rlar ortada\n    arr = [1, 0, 2, 0, 3, 0, 4];\n    moveZerosTwoPointers(arr);\n    console.assert(JSON.stringify(arr) === JSON.stringify([1, 2, 3, 4, 0, 0, 0]), \"Test 7 Failed: S\u0131f\u0131rlar ortada\");\n\n    \/\/ Test Case 8: Kar\u0131\u015f\u0131k dizi - S\u0131f\u0131rlar sonda (zaten yerinde)\n    arr = [1, 2, 3, 0, 0];\n    moveZerosTwoPointers(arr);\n    console.assert(JSON.stringify(arr) === JSON.stringify([1, 2, 3, 0, 0]), \"Test 8 Failed: S\u0131f\u0131rlar sonda\");\n\n    console.log(\"T\u00fcm testler tamamland\u0131.\");\n}\n\ntestMoveZerosTwoPointers();\n<\/pre>\n<p><\/code><\/p>\n<p>Bu testler, yazd\u0131\u011f\u0131n\u0131z kodun sadece bir \u00f6rnek i\u00e7in de\u011fil, her t\u00fcrl\u00fc ge\u00e7erli girdi i\u00e7in do\u011fru \u00e7\u0131kt\u0131y\u0131 verdi\u011finden emin olman\u0131z\u0131 sa\u011flar. G\u00fc\u00e7l\u00fc test senaryolar\u0131, algoritma geli\u015ftirme s\u00fcrecinin ayr\u0131lmaz bir par\u00e7as\u0131d\u0131r ve uzun vadede size zaman ve emek kazand\u0131r\u0131r.<\/p>\n<h2>Performans Analizi ve Zaman\/Bellek Karma\u015f\u0131kl\u0131\u011f\u0131 Nas\u0131l Hesaplan\u0131r?<\/h2>\n<p>Bir algoritman\u0131n performans\u0131n\u0131 anlamak ve de\u011ferlendirmek, sadece do\u011fru bir \u00e7\u00f6z\u00fcm \u00fcretmekten \u00e7ok daha fazlas\u0131d\u0131r; ayn\u0131 zamanda bu \u00e7\u00f6z\u00fcm\u00fcn ne kadar verimli oldu\u011funu bilmek demektir. Yaz\u0131l\u0131m m\u00fchendisli\u011finde, algoritmalar\u0131n performans\u0131n\u0131 \u00f6l\u00e7mek i\u00e7in iki temel metrik kullan\u0131l\u0131r: zaman karma\u015f\u0131kl\u0131\u011f\u0131 (time complexity) ve bellek karma\u015f\u0131kl\u0131\u011f\u0131 (space complexity). Bu metrikler, \"Big O\" notasyonu (B\u00fcy\u00fck O g\u00f6sterimi) ile ifade edilir ve bir algoritman\u0131n girdi boyutu artt\u0131k\u00e7a kaynak kullan\u0131m\u0131n\u0131n nas\u0131l \u00f6l\u00e7eklenece\u011fini g\u00f6sterir.<\/p>\n<h3>Zaman Karma\u015f\u0131kl\u0131\u011f\u0131 (Time Complexity)<\/h3>\n<p>Zaman karma\u015f\u0131kl\u0131\u011f\u0131, bir algoritman\u0131n tamamlanmas\u0131 i\u00e7in gereken i\u015flem say\u0131s\u0131n\u0131n veya s\u00fcresinin, girdi boyutu (genellikle 'N' ile temsil edilir) ile nas\u0131l de\u011fi\u015fti\u011fini a\u00e7\u0131klar. Bizim \"Soru 43: S\u0131f\u0131rlar\u0131 Sona Ta\u015f\u0131ma\" problemimizdeki iki i\u015faret\u00e7i \u00e7\u00f6z\u00fcm\u00fcn\u00fc inceleyelim:<\/p>\n<pre><code class=\"language-javascript\">\nfunction moveZerosTwoPointers(nums) {\n    let writePointer = 0; \n\n    \/\/ \u0130lk ge\u00e7i\u015f: O(N)\n    for (let readPointer = 0; readPointer < nums.length; readPointer++) { \/\/ N kez \u00e7al\u0131\u015f\u0131r\n        if (nums[readPointer] !== 0) { \/\/ Sabit zamanl\u0131 i\u015flem O(1)\n            nums[writePointer] = nums[readPointer]; \/\/ Sabit zamanl\u0131 i\u015flem O(1)\n            writePointer++; \/\/ Sabit zamanl\u0131 i\u015flem O(1)\n        }\n    }\n\n    \/\/ \u0130kinci ge\u00e7i\u015f: O(N) - asl\u0131nda kalan k\u0131s\u0131m i\u00e7in \u00e7al\u0131\u015f\u0131r, maksimum N kez\n    for (let i = writePointer; i < nums.length; i++) { \/\/ Maksimum N kez \u00e7al\u0131\u015f\u0131r\n        nums[i] = 0; \/\/ Sabit zamanl\u0131 i\u015flem O(1)\n    }\n}\n<\/pre>\n<p><\/code><\/p>\n<p>Kodda iki ayr\u0131 d\u00f6ng\u00fc bulunmaktad\u0131r. \u0130lk d\u00f6ng\u00fc, <code>readPointer<\/code> dizinin ba\u015f\u0131ndan sonuna kadar gider, yani N kez \u00e7al\u0131\u015f\u0131r. D\u00f6ng\u00fc i\u00e7indeki i\u015flemler (kar\u015f\u0131la\u015ft\u0131rma, atama, art\u0131rma) sabit zamanl\u0131d\u0131r, yani O(1)'dir. Dolay\u0131s\u0131yla ilk d\u00f6ng\u00fcn\u00fcn zaman karma\u015f\u0131kl\u0131\u011f\u0131 O(N) * O(1) = O(N)'dir. \u0130kinci d\u00f6ng\u00fc ise <code>writePointer<\/code>'\u0131n kald\u0131\u011f\u0131 yerden dizinin sonuna kadar gider. En k\u00f6t\u00fc senaryoda (\u00f6rne\u011fin dizi sadece s\u0131f\u0131rlardan olu\u015fuyorsa veya hi\u00e7 s\u0131f\u0131r yoksa), bu d\u00f6ng\u00fc de yakla\u015f\u0131k N kez \u00e7al\u0131\u015fabilir. Bu d\u00f6ng\u00fc i\u00e7indeki i\u015flemler de sabit zamanl\u0131d\u0131r. Dolay\u0131s\u0131yla ikinci d\u00f6ng\u00fcn\u00fcn zaman karma\u015f\u0131kl\u0131\u011f\u0131 da O(N)'dir. Bir algoritman\u0131n toplam zaman karma\u015f\u0131kl\u0131\u011f\u0131, en bask\u0131n olan terimle ifade edilir. O(N) + O(N) = O(N) oldu\u011fu i\u00e7in, bu \u00e7\u00f6z\u00fcm\u00fcn toplam zaman karma\u015f\u0131kl\u0131\u011f\u0131 <strong>O(N)<\/strong>'dir. Bu, dizinin boyutu artt\u0131k\u00e7a \u00e7al\u0131\u015fma s\u00fcresinin do\u011frusal olarak artaca\u011f\u0131 anlam\u0131na gelir ki, \u00e7o\u011fu problem i\u00e7in olduk\u00e7a iyi ve kabul edilebilir bir performanst\u0131r.<\/p>\n<h3>Bellek Karma\u015f\u0131kl\u0131\u011f\u0131 (Space Complexity)<\/h3>\n<p>Bellek karma\u015f\u0131kl\u0131\u011f\u0131, bir algoritman\u0131n \u00e7al\u0131\u015fmas\u0131 i\u00e7in gereken ek bellek miktar\u0131n\u0131n, girdi boyutuyla nas\u0131l de\u011fi\u015fti\u011fini g\u00f6sterir. \"\u0130ki i\u015faret\u00e7i\" \u00e7\u00f6z\u00fcm\u00fcm\u00fczde, <code>writePointer<\/code>, <code>readPointer<\/code> ve <code>i<\/code> gibi sadece birka\u00e7 adet sabit say\u0131da de\u011fi\u015fken kullan\u0131yoruz. Bu de\u011fi\u015fkenlerin kaplad\u0131\u011f\u0131 bellek miktar\u0131, dizinin boyutundan ba\u011f\u0131ms\u0131zd\u0131r; N ister 10 olsun ister 10 milyon, bu de\u011fi\u015fkenler ayn\u0131 miktarda yer kaplar. Bu nedenle, ek bellek kullan\u0131m\u0131 sabit kabul edilir ve <strong>O(1)<\/strong> ile ifade edilir. Bu, algoritmam\u0131z\u0131n dizinin boyutuna ba\u011fl\u0131 olarak ek bellek t\u00fcketmedi\u011fi anlam\u0131na gelir, ki bu da \u00e7ok verimli bir durumdur. \u00d6zellikle mobil ve g\u00f6m\u00fcl\u00fc sistemler gibi bellek k\u0131s\u0131tl\u0131 ortamlarda, O(1) bellek karma\u015f\u0131kl\u0131\u011f\u0131na sahip olmak b\u00fcy\u00fck bir avantajd\u0131r. \u00d6zetle, iki i\u015faret\u00e7i tekni\u011fiyle geli\u015ftirilen \"Soru 43\" \u00e7\u00f6z\u00fcm\u00fcm\u00fcz, hem O(N) zaman karma\u015f\u0131kl\u0131\u011f\u0131na hem de O(1) bellek karma\u015f\u0131kl\u0131\u011f\u0131na sahip olup, bu problemi \u00e7\u00f6zmek i\u00e7in optimal kabul edilen bir yakla\u015f\u0131md\u0131r. Bu analiz, algoritman\u0131z\u0131n neden h\u0131zl\u0131 oldu\u011funu ve kaynaklar\u0131 neden verimli kulland\u0131\u011f\u0131n\u0131 anlaman\u0131za yard\u0131mc\u0131 olur.<\/p>\n<div class=\"expert-tip\">Uzman \u0130pucu: Zaman ve bellek karma\u015f\u0131kl\u0131\u011f\u0131n\u0131 hesaplamak, sadece teknik m\u00fclakatlar i\u00e7in de\u011fil, ayn\u0131 zamanda ger\u00e7ek d\u00fcnya yaz\u0131l\u0131m projelerinde performans\u0131 optimize etmek ve potansiyel darbo\u011fazlar\u0131 tespit etmek i\u00e7in de temel bir beceridir. Her zaman algoritman\u0131z\u0131n girdi boyutuna g\u00f6re nas\u0131l \u00f6l\u00e7eklendi\u011fini d\u00fc\u015f\u00fcn\u00fcn.<\/div>\n<h2>Mobil Ortamlarda \u00c7\u00f6z\u00fcmlerinizi Sunmak: Duyarl\u0131 Tasar\u0131m \u0130pu\u00e7lar\u0131<\/h2>\n<p>Bir kodlama meydan okumas\u0131n\u0131 \u00e7\u00f6zmek teknik bir ba\u015far\u0131 olsa da, bu \u00e7\u00f6z\u00fcm\u00fc ba\u015fkalar\u0131na, \u00f6zellikle de mobil cihazlar \u00fczerinden kolayca eri\u015filebilir ve anla\u015f\u0131l\u0131r bir \u015fekilde sunmak da ayn\u0131 derecede \u00f6nemlidir. Modern web geli\u015ftirmenin vazge\u00e7ilmezi olan duyarl\u0131 tasar\u0131m (responsive design), i\u00e7eri\u011finizin farkl\u0131 ekran boyutlar\u0131na ve cihazlara (masa\u00fcst\u00fc, tablet, mobil) otomatik olarak adapte olmas\u0131n\u0131 sa\u011flar. Makalemizdeki gibi teknik i\u00e7erikler, kod bloklar\u0131 ve tablolar i\u00e7erdi\u011finde, mobil uyumluluk daha da kritik hale gelir. \u0130\u015fte \u00e7\u00f6z\u00fcmlerinizi mobil ortamlarda daha iyi sunman\u0131z\u0131 sa\u011flayacak baz\u0131 ipu\u00e7lar\u0131 ve media query \u00f6rnekleri:<\/p>\n<h3>Meta Viewport Etiketi<\/h3>\n<p>HTML belgelerinizin <code><head><\/code> b\u00f6l\u00fcm\u00fcne a\u015fa\u011f\u0131daki meta etiketini eklemek, duyarl\u0131 tasar\u0131m\u0131n temelidir. Bu etiket, taray\u0131c\u0131ya sayfan\u0131n geni\u015fli\u011fini cihaz\u0131n ekran geni\u015fli\u011fine ayarlamas\u0131n\u0131 ve ba\u015flang\u0131\u00e7 \u00f6l\u00e7e\u011fini 1.0 olarak ayarlamas\u0131n\u0131 s\u00f6yler.<\/p>\n<pre><code class=\"language-html\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n<\/pre>\n<p><\/code><\/p>\n<h3>Esnek D\u00fczenler \u0130\u00e7in CSS Flexbox ve Grid<\/h3>\n<p>Geleneksel float tabanl\u0131 d\u00fczenler yerine, CSS Flexbox ve Grid, i\u00e7eriklerin farkl\u0131 ekran boyutlar\u0131nda daha dinamik ve d\u00fczenli bir \u015fekilde hizalanmas\u0131n\u0131 ve yeniden s\u0131ralanmas\u0131n\u0131 sa\u011flar. \u00d6zellikle \u00e7ok s\u00fctunlu d\u00fczenler veya interaktif bile\u015fenler i\u00e7in idealdirler.<\/p>\n<pre><code class=\"language-css\">\n\/* Flexbox \u00d6rne\u011fi *\/\n.container {\n  display: flex;\n  flex-wrap: wrap; \/* \u00d6\u011feler s\u0131\u011fmazsa alt sat\u0131ra ge\u00e7sin *\/\n  justify-content: space-around; \/* \u00d6\u011feler aras\u0131nda bo\u015fluk b\u0131rak *\/\n}\n\n.item {\n  flex: 1 1 300px; \/* Esnekli\u011fi, b\u00fcy\u00fcme\/k\u00fc\u00e7\u00fclme ve ba\u015flang\u0131\u00e7 geni\u015fli\u011fi *\/\n  margin: 10px;\n}\n\n\/* Grid \u00d6rne\u011fi *\/\n.grid-container {\n  display: grid;\n  grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); \/* Minimum 250px geni\u015fli\u011finde s\u00fctunlar *\/\n  gap: 20px;\n}\n<\/pre>\n<p><\/code><\/p>\n<h3>Media Query Kullan\u0131m\u0131<\/h3>\n<p>Media query'ler, belirli ekran boyutlar\u0131 veya cihaz \u00f6zelliklerine g\u00f6re farkl\u0131 CSS stilleri uygulaman\u0131za olanak tan\u0131r. Bu, mobil cihazlar i\u00e7in daha k\u00fc\u00e7\u00fck font boyutlar\u0131, farkl\u0131 bir d\u00fczen veya belirli \u00f6\u011felerin gizlenmesi gibi \u00f6zelle\u015ftirmeler yapman\u0131z\u0131 sa\u011flar.<\/p>\n<pre><code class=\"language-css\">\n\/* Genel stil tan\u0131mlamalar\u0131 (mobil \u00f6ncelikli) *\/\nbody {\n  font-size: 16px;\n  line-height: 1.6;\n}\n\nh2 {\n  font-size: 24px;\n}\n\npre {\n  white-space: pre-wrap; \/* Kod bloklar\u0131n\u0131n k\u00fc\u00e7\u00fck ekranlarda ta\u015fmas\u0131n\u0131 engeller *\/\n  word-break: break-all; \/* Uzun kelimeleri k\u0131rar *\/\n}\n\n\/* Tablet ve daha b\u00fcy\u00fck ekranlar i\u00e7in stiller *\/\n@media screen and (min-width: 768px) {\n  body {\n    font-size: 18px;\n  }\n  h2 {\n    font-size: 32px;\n  }\n  .container {\n    max-width: 960px; \/* Konteyner geni\u015fli\u011fini s\u0131n\u0131rlar *\/\n    margin: 0 auto;\n  }\n}\n\n\/* Masa\u00fcst\u00fc ve daha b\u00fcy\u00fck ekranlar i\u00e7in stiller *\/\n@media screen and (min-width: 1200px) {\n  body {\n    font-size: 20px;\n  }\n  h2 {\n    font-size: 36px;\n  }\n  pre {\n    overflow-x: auto; \/* Yatay kayd\u0131rma \u00e7ubu\u011fu ekler *\/\n  }\n}\n<\/pre>\n<p><\/code><\/p>\n<p>Yukar\u0131daki \u00f6rnekte, mobil \u00f6ncelikli bir yakla\u015f\u0131m benimsenmi\u015ftir; yani, \u00f6ncelikle mobil cihazlar i\u00e7in temel stiller tan\u0131mlan\u0131r ve daha sonra <code>min-width<\/code> media query'leri kullan\u0131larak daha b\u00fcy\u00fck ekranlar i\u00e7in stiller a\u015famal\u0131 olarak art\u0131r\u0131l\u0131r. Kod bloklar\u0131 gibi dar alanlarda sorun yaratabilecek i\u00e7erikler i\u00e7in <code>white-space: pre-wrap;<\/code> ve <code>word-break: break-all;<\/code> gibi \u00f6zellikler, i\u00e7eri\u011fin d\u0131\u015far\u0131 ta\u015fmas\u0131n\u0131 engeller. Daha b\u00fcy\u00fck ekranlarda ise <code>overflow-x: auto;<\/code> ile yatay kayd\u0131rma \u00e7ubu\u011fu eklenerek kodun okunabilirli\u011fi art\u0131r\u0131labilir. Bu yakla\u015f\u0131mlar, teknik makalelerinizi ve \u00e7\u00f6z\u00fcmlerinizi, okuyucunun hangi cihaz\u0131 kulland\u0131\u011f\u0131na bak\u0131lmaks\u0131z\u0131n profesyonel ve eri\u015filebilir k\u0131lmak i\u00e7in kritik \u00f6neme sahiptir.<\/p>\n<h2>Kodlama Prati\u011finizi Bir \u00dcst Seviyeye Ta\u015f\u0131mak \u0130\u00e7in \u0130pu\u00e7lar\u0131<\/h2>\n<p>Kodlama meydan okumalar\u0131 prati\u011fi, sadece belirli bir problemi \u00e7\u00f6zmekten ibaret de\u011fildir; ayn\u0131 zamanda s\u00fcrekli \u00f6\u011frenme, kendini geli\u015ftirme ve ele\u015ftirel d\u00fc\u015f\u00fcnme becerilerini peki\u015ftirme s\u00fcrecidir. Soru 43 gibi bir problemi \u00e7\u00f6zd\u00fckten sonra, bu deneyimi bir sonraki seviyeye ta\u015f\u0131mak i\u00e7in uygulayabilece\u011finiz baz\u0131 ipu\u00e7lar\u0131 bulunmaktad\u0131r:<\/p>\n<ol>\n<li>\n        <strong>Farkl\u0131 Dillerle Deneme Yap\u0131n:<\/strong> Bir problemi bir dilde \u00e7\u00f6zd\u00fckten sonra (\u00f6rne\u011fin JavaScript), ayn\u0131 problemi ba\u015fka bir dilde (Python, Java, C++ gibi) \u00e7\u00f6zmeye \u00e7al\u0131\u015f\u0131n. Bu, dilin s\u00f6zdiziminden ba\u011f\u0131ms\u0131z olarak temel algoritma prensiplerini anlaman\u0131za yard\u0131mc\u0131 olur ve farkl\u0131 dillerin veri yap\u0131lar\u0131 ve standart k\u00fct\u00fcphaneleri aras\u0131ndaki n\u00fcanslar\u0131 \u00f6\u011frenmenizi sa\u011flar. Bu egzersiz, sizi daha esnek bir geli\u015ftirici yapar ve farkl\u0131 projelerde adaptasyon yetene\u011finizi art\u0131r\u0131r.\n    <\/li>\n<li>\n        <strong>Problemin Varyasyonlar\u0131n\u0131 Ke\u015ffedin:<\/strong> Soru 43'\u00fc \u00e7\u00f6zd\u00fckten sonra, benzer ama biraz farkl\u0131 k\u0131s\u0131tlamalar\u0131 olan varyasyonlar\u0131n\u0131 d\u00fc\u015f\u00fcn\u00fcn. \u00d6rne\u011fin, \"s\u0131f\u0131rlar\u0131 sona de\u011fil, ba\u015fa ta\u015f\u0131\" veya \"s\u0131f\u0131rlar ve birler d\u0131\u015f\u0131nda t\u00fcm say\u0131lar\u0131 dizinin sonuna ta\u015f\u0131\" gibi varyasyonlar \u00fczerine \u00e7al\u0131\u015f\u0131n. Bu, \u00e7\u00f6z\u00fcm\u00fcn\u00fcz\u00fc genelle\u015ftirme ve daha soyut problem \u00e7\u00f6zme yetene\u011finizi geli\u015ftirme konusunda size pratik kazand\u0131r\u0131r.\n    <\/li>\n<li>\n        <strong>Mentorluk ve Geri Bildirim Al\u0131n:<\/strong> \u00c7\u00f6z\u00fcmlerinizi di\u011fer geli\u015ftiricilerle payla\u015f\u0131n. Onlar\u0131n kodunuz hakk\u0131ndaki yorumlar\u0131, farkl\u0131 bak\u0131\u015f a\u00e7\u0131lar\u0131 kazanman\u0131za, daha iyi pratikler \u00f6\u011frenmenize ve olas\u0131 eksiklikleri gidermenize yard\u0131mc\u0131 olabilir. Code review (kod incelemesi) s\u00fcreci, yaz\u0131l\u0131m geli\u015ftirmenin \u00f6nemli bir par\u00e7as\u0131d\u0131r ve erken ya\u015flarda edinilmesi gereken de\u011ferli bir al\u0131\u015fkanl\u0131kt\u0131r. GitHub gibi platformlarda projelerinizi payla\u015farak a\u00e7\u0131k geri bildirimler alabilirsiniz.\n    <\/li>\n<li>\n        <strong>Zaman ve Bellek Karma\u015f\u0131kl\u0131\u011f\u0131n\u0131 Derinlemesine Anlay\u0131n:<\/strong> Sadece O(N) veya O(1) demeyi \u00f6\u011frenmekle kalmay\u0131n, bu notasyonlar\u0131n ne anlama geldi\u011fini ve farkl\u0131 algoritmalar\u0131n performans\u0131n\u0131 neden bu \u015fekilde etkiledi\u011fini tam olarak kavray\u0131n. Algoritma performans\u0131n\u0131 teorik olarak analiz etmenin yan\u0131 s\u0131ra, kodunuzu farkl\u0131 boyutlardaki girdilerle \u00e7al\u0131\u015ft\u0131rarak pratik performans \u00f6l\u00e7\u00fcmleri yap\u0131n. Hangi durumlar\u0131n en k\u00f6t\u00fc senaryoyu olu\u015fturdu\u011funu, hangi optimizasyonlar\u0131n ger\u00e7ekten fark yaratt\u0131\u011f\u0131n\u0131 anlamak, sizi daha bilin\u00e7li bir problem \u00e7\u00f6z\u00fcc\u00fc yapar.\n    <\/li>\n<li>\n        <strong>\"Neden\" Sorusunu Sorun:<\/strong> Bir \u00e7\u00f6z\u00fcm buldu\u011funuzda, \"Bu \u00e7\u00f6z\u00fcm\u00fc neden se\u00e7tim? Ba\u015fka hangi yollar vard\u0131? Neden di\u011fer yollar\u0131 tercih etmedim?\" gibi sorular\u0131 kendinize sorun. Bu sorgulama s\u00fcreci, ele\u015ftirel d\u00fc\u015f\u00fcnme becerilerinizi keskinle\u015ftirir ve farkl\u0131 yakla\u015f\u0131mlar\u0131n avantajlar\u0131n\u0131 ve dezavantajlar\u0131n\u0131 derinlemesine anlaman\u0131z\u0131 sa\u011flar. Her zaman en iyi \u00e7\u00f6z\u00fcm\u00fc bulmak zorunda de\u011filsiniz, ancak en iyi \u00e7\u00f6z\u00fcmlerin neden \"en iyi\" oldu\u011funu anlamak \u00f6nemlidir.\n    <\/li>\n<li>\n        <strong>Tutarl\u0131l\u0131k ve D\u00fczenli Pratik:<\/strong> Kodlama yeteneklerinizi geli\u015ftirmenin en \u00f6nemli anahtar\u0131 tutarl\u0131l\u0131kt\u0131r. Haftada birka\u00e7 saat de olsa d\u00fczenli olarak pratik yap\u0131n. K\u00fc\u00e7\u00fck problemlerle ba\u015flay\u0131n ve kademeli olarak daha karma\u015f\u0131klar\u0131na ge\u00e7in. Bu, \"kas haf\u0131zan\u0131z\u0131\" geli\u015ftirir ve problem \u00e7\u00f6zme becerilerinizi zamanla otomatikle\u015ftirir. G\u00fcnde 15-30 dakika bile olsa d\u00fczenli bir rutin olu\u015fturmak, uzun vadede b\u00fcy\u00fck fark yarat\u0131r.<\/li>\n<\/ol>\n<p>Bu ipu\u00e7lar\u0131n\u0131 uygulayarak, kodlama meydan okumalar\u0131n\u0131 sadece bir engel olarak g\u00f6rmek yerine, s\u00fcrekli geli\u015fiminiz i\u00e7in g\u00fc\u00e7l\u00fc bir ara\u00e7 olarak kullanabilirsiniz. Her \u00e7\u00f6zd\u00fc\u011f\u00fcn\u00fcz problem, bir sonraki ad\u0131ma at\u0131lan sa\u011flam bir basamakt\u0131r.<\/p>\n<h2>Sonu\u00e7: S\u00fcrekli Geli\u015fim ve Gelecek Ad\u0131mlar<\/h2>\n<p>\"Coding Challenge Practice - Question 43\" ba\u015fl\u0131\u011f\u0131 alt\u0131nda, s\u0131f\u0131rlar\u0131 sona ta\u015f\u0131ma problemini ele alarak, temel problem \u00e7\u00f6zme yakla\u015f\u0131mlar\u0131ndan en verimli olanlar\u0131na kadar bir yolculuk yapt\u0131k. Brute-force \u00e7\u00f6z\u00fcmden ba\u015flayarak, iki i\u015faret\u00e7i tekni\u011fi gibi optimize edilmi\u015f algoritmalar\u0131 inceledik, kod \u00f6rnekleriyle peki\u015ftirdik ve bu \u00e7\u00f6z\u00fcmlerin zaman\/bellek karma\u015f\u0131kl\u0131klar\u0131n\u0131 detayl\u0131 bir \u015fekilde analiz ettik. Ayr\u0131ca, \u00e7\u00f6z\u00fcm\u00fcn\u00fcz\u00fcn sa\u011flaml\u0131\u011f\u0131n\u0131 test etmenin ve mobil cihazlarda bile eri\u015filebilir olmas\u0131n\u0131 sa\u011flaman\u0131n \u00f6nemine de\u011findik. Bu s\u00fcre\u00e7, sadece belirli bir problemi nas\u0131l \u00e7\u00f6zece\u011finizi de\u011fil, ayn\u0131 zamanda yaz\u0131l\u0131m geli\u015ftirmenin temel prensiplerini ve metodolojilerini nas\u0131l uygulayaca\u011f\u0131n\u0131z\u0131 g\u00f6sterir. Her kodlama meydan okumas\u0131, algoritmik d\u00fc\u015f\u00fcnme becerinizi keskinle\u015ftirme, veri yap\u0131lar\u0131n\u0131 daha iyi anlama ve daha verimli kod yazma prati\u011fi yapma f\u0131rsat\u0131d\u0131r. Unutmay\u0131n ki, yaz\u0131l\u0131m d\u00fcnyas\u0131 s\u00fcrekli geli\u015fen bir aland\u0131r ve bu s\u00fcrekli de\u011fi\u015fime ayak uydurman\u0131n en iyi yolu, d\u00fczenli pratik ve \u00f6\u011frenmeye a\u00e7\u0131k olmakt\u0131r. Yeni teknolojiler ve diller \u00f6\u011frenmek kadar, temel problem \u00e7\u00f6zme tekniklerinde ustala\u015fmak da sizi daha yetkin ve aranan bir yaz\u0131l\u0131mc\u0131 yapar. Kodlama prati\u011fi, sadece m\u00fclakatlar i\u00e7in bir haz\u0131rl\u0131k olmaktan \u00f6te, kariyeriniz boyunca size fayda sa\u011flayacak bir yat\u0131r\u0131md\u0131r. Bug\u00fcn \"Soru 43\" \u00fczerinde \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131z gibi, yar\u0131n daha karma\u015f\u0131k problemlerle kar\u015f\u0131la\u015facak ve bu makalede edindi\u011finiz bilgileri kullanarak onlar\u0131 da ba\u015far\u0131yla \u00e7\u00f6zeceksiniz. \u00d6nemli olan, pes etmemek, s\u00fcrekli pratik yapmak ve her zaman neden sorusunu sormakt\u0131r. Bu yakla\u015f\u0131m, sizi sadece daha iyi bir kodlay\u0131c\u0131 yapmakla kalmayacak, ayn\u0131 zamanda daha iyi bir problem \u00e7\u00f6z\u00fcc\u00fc ve yarat\u0131c\u0131 d\u00fc\u015f\u00fcn\u00fcr haline getirecektir.<\/p>\n<h3>S\u0131k\u00e7a Sorulan Sorular<\/h3>\n<dl>\n<dt>Kodlama meydan okumalar\u0131 prati\u011fi i\u00e7in hangi diller daha uygun?<\/dt>\n<dd>Genellikle Python, Java, C++ ve JavaScript gibi diller kodlama meydan okumalar\u0131 i\u00e7in pop\u00fclerdir. Python, k\u0131sa ve okunabilir s\u00f6zdizimi sayesinde algoritmalar\u0131 h\u0131zl\u0131ca uygulamak i\u00e7in harikad\u0131r. Java ve C++ ise performans odakl\u0131d\u0131r ve daha d\u00fc\u015f\u00fck seviyeli detaylar\u0131 anlaman\u0131za yard\u0131mc\u0131 olur. JavaScript ise web geli\u015ftiricileri i\u00e7in vazge\u00e7ilmezdir. En \u00f6nemlisi, iyi bildi\u011finiz veya \u00f6\u011frenmek istedi\u011finiz bir dili se\u00e7mektir.<\/dd>\n<dt>Zaman karma\u015f\u0131kl\u0131\u011f\u0131 neden bu kadar \u00f6nemli?<\/dt>\n<dd>Zaman karma\u015f\u0131kl\u0131\u011f\u0131, algoritman\u0131z\u0131n girdi boyutu artt\u0131k\u00e7a ne kadar yava\u015flayaca\u011f\u0131n\u0131 tahmin etmemizi sa\u011flar. B\u00fcy\u00fck veri setleriyle \u00e7al\u0131\u015fan uygulamalarda, k\u00f6t\u00fc zaman karma\u015f\u0131kl\u0131\u011f\u0131na sahip bir algoritma, performans\u0131 ciddi \u015fekilde etkileyebilir, kullan\u0131c\u0131 deneyimini bozabilir ve hatta maliyetleri art\u0131rabilir. Optimal zaman karma\u015f\u0131kl\u0131\u011f\u0131na sahip olmak, uygulaman\u0131n \u00f6l\u00e7eklenebilirli\u011fini ve verimlili\u011fini garanti eder.<\/dd>\n<dt>\"In-place\" algoritma ne anlama geliyor?<\/dt>\n<dd>\"In-place\" bir algoritma, mevcut veri yap\u0131s\u0131n\u0131 (\u00f6rne\u011fin bir diziyi) yeni bir veri yap\u0131s\u0131 olu\u015fturmadan do\u011frudan de\u011fi\u015ftirerek \u00e7al\u0131\u015f\u0131r. Bu, algoritman\u0131n \u00e7al\u0131\u015fmas\u0131 i\u00e7in gereken ek bellek miktar\u0131n\u0131 minimize eder (genellikle O(1) bellek karma\u015f\u0131kl\u0131\u011f\u0131). Bellek k\u0131s\u0131tl\u0131 ortamlarda veya \u00e7ok b\u00fcy\u00fck veri setleriyle \u00e7al\u0131\u015f\u0131rken bu \u00f6zellik kritik \u00f6nem ta\u015f\u0131r.<\/dd>\n<dt>Soru 43 gibi problemlerde kenar durumlar\u0131 test etmek neden bu kadar \u00f6nemli?<\/dt>\n<dd>Kenar durumlar (edge cases), algoritman\u0131z\u0131n beklenmedik veya s\u0131rad\u0131\u015f\u0131 girdilerle kar\u015f\u0131la\u015ft\u0131\u011f\u0131nda do\u011fru \u00e7al\u0131\u015f\u0131p \u00e7al\u0131\u015fmad\u0131\u011f\u0131n\u0131 g\u00f6sterir. Bo\u015f diziler, tek elemanl\u0131 diziler, sadece s\u0131f\u0131r i\u00e7eren diziler gibi durumlar, algoritmalar\u0131n mant\u0131\u011f\u0131ndaki potansiyel hatalar\u0131 veya eksiklikleri ortaya \u00e7\u0131karabilir. Kapsaml\u0131 kenar durum testleri, \u00e7\u00f6z\u00fcm\u00fcn\u00fcz\u00fcn her ko\u015fulda sa\u011flam ve g\u00fcvenilir olmas\u0131n\u0131 sa\u011flar.<\/dd>\n<dt>Kodlama prati\u011fimi d\u00fczenli hale getirmek i\u00e7in ipu\u00e7lar\u0131 var m\u0131?<\/dt>\n<dd>Evet, d\u00fczenli pratik i\u00e7in birka\u00e7 ipucu: Haftal\u0131k bir zaman dilimi belirleyin (\u00f6rne\u011fin, her sal\u0131 1 saat). K\u00fc\u00e7\u00fck ve y\u00f6netilebilir problemlerle ba\u015flay\u0131n. Bir \"pratik partneri\" bulun ve birlikte problem \u00e7\u00f6z\u00fcn. Hatalar\u0131n\u0131zdan ders \u00e7\u0131kar\u0131n ve \u00e7\u00f6z\u00fcmleri analiz etmeye zaman ay\u0131r\u0131n. \u00c7\u00f6z\u00fcmlerinizi farkl\u0131 dillerde tekrar yazarak bilginizi peki\u015ftirin. Consistency is key!<\/dd>\n<\/dl>\n","protected":false},"excerpt":{"rendered":"Kodlama meydan okumalar\u0131, yaz\u0131l\u0131m geli\u015ftirme becerilerini keskinle\u015ftirmek ve problem \u00e7\u00f6zme yeteneklerini geli\u015ftirmek i\u00e7in harika bir yoldur. \u00d6zellikle m\u00fclakatlara&hellip;","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1],"tags":[],"class_list":{"0":"post-33448","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-genel","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Coding Challenge Prati\u011fi: Soru 43&#039;\u00fc \u00c7\u00f6zme Rehberi<\/title>\n<meta name=\"description\" content=\"Kodlama meydan okumalar\u0131, yaz\u0131l\u0131m geli\u015ftirme becerilerini keskinle\u015ftirmek ve problem \u00e7\u00f6zme yeteneklerini geli\u015ftirmek i\u00e7in harika bir yoldur. \u00d6zellikle m\u00fclakatlara haz\u0131rlan\u0131rken veya yeni bir dil \u00f6\u011frenirken kar\u015f\u0131la\u015f\u0131lan bu sorular, mant\u0131ksal d\u00fc\u015f\u00fcnme ve algoritmik yakla\u015f\u0131mlar\u0131 test eder. Bu makalede, &quot;Coding Challenge Practice - Question 43&quot; ba\u015fl\u0131\u011f\u0131 alt\u0131nda, belirli bir problem \u00fczerinden detayl\u0131 bir analiz ve optimize edilmi\u015f bir \u00e7\u00f6z\u00fcm sunarak, kodlama prati\u011finizi bir \u00fcst seviyeye ta\u015f\u0131yaca\u011f\u0131z.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/coding-challenge-pratigi-soru-43u-cozme-rehberi\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Coding Challenge Prati\u011fi: Soru 43&#039;\u00fc \u00c7\u00f6zme Rehberi\" \/>\n<meta property=\"og:description\" content=\"Kodlama meydan okumalar\u0131, yaz\u0131l\u0131m geli\u015ftirme becerilerini keskinle\u015ftirmek ve problem \u00e7\u00f6zme yeteneklerini geli\u015ftirmek i\u00e7in harika bir yoldur. \u00d6zellikle m\u00fclakatlara haz\u0131rlan\u0131rken veya yeni bir dil \u00f6\u011frenirken kar\u015f\u0131la\u015f\u0131lan bu sorular, mant\u0131ksal d\u00fc\u015f\u00fcnme ve algoritmik yakla\u015f\u0131mlar\u0131 test eder. Bu makalede, &quot;Coding Challenge Practice - Question 43&quot; ba\u015fl\u0131\u011f\u0131 alt\u0131nda, belirli bir problem \u00fczerinden detayl\u0131 bir analiz ve optimize edilmi\u015f bir \u00e7\u00f6z\u00fcm sunarak, kodlama prati\u011finizi bir \u00fcst seviyeye ta\u015f\u0131yaca\u011f\u0131z.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/coding-challenge-pratigi-soru-43u-cozme-rehberi\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-11-02T22:31:18+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"28 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/coding-challenge-pratigi-soru-43u-cozme-rehberi\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/coding-challenge-pratigi-soru-43u-cozme-rehberi\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Coding Challenge Prati\u011fi: Soru 43&#8217;\u00fc \u00c7\u00f6zme Rehberi\",\"datePublished\":\"2025-11-02T22:31:18+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/coding-challenge-pratigi-soru-43u-cozme-rehberi\/\"},\"wordCount\":4836,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/coding-challenge-pratigi-soru-43u-cozme-rehberi\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/coding-challenge-pratigi-soru-43u-cozme-rehberi\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/coding-challenge-pratigi-soru-43u-cozme-rehberi\/\",\"name\":\"Coding Challenge Prati\u011fi: Soru 43'\u00fc \u00c7\u00f6zme Rehberi\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-11-02T22:31:18+00:00\",\"description\":\"Kodlama meydan okumalar\u0131, yaz\u0131l\u0131m geli\u015ftirme becerilerini keskinle\u015ftirmek ve problem \u00e7\u00f6zme yeteneklerini geli\u015ftirmek i\u00e7in harika bir yoldur. \u00d6zellikle m\u00fclakatlara haz\u0131rlan\u0131rken veya yeni bir dil \u00f6\u011frenirken kar\u015f\u0131la\u015f\u0131lan bu sorular, mant\u0131ksal d\u00fc\u015f\u00fcnme ve algoritmik yakla\u015f\u0131mlar\u0131 test eder. Bu makalede, \\\"Coding Challenge Practice - Question 43\\\" ba\u015fl\u0131\u011f\u0131 alt\u0131nda, belirli bir problem \u00fczerinden detayl\u0131 bir analiz ve optimize edilmi\u015f bir \u00e7\u00f6z\u00fcm sunarak, kodlama prati\u011finizi bir \u00fcst seviyeye ta\u015f\u0131yaca\u011f\u0131z.\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/coding-challenge-pratigi-soru-43u-cozme-rehberi\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/coding-challenge-pratigi-soru-43u-cozme-rehberi\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/coding-challenge-pratigi-soru-43u-cozme-rehberi\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Coding Challenge Prati\u011fi: Soru 43&#8217;\u00fc \u00c7\u00f6zme Rehberi\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Coding Challenge Prati\u011fi: Soru 43'\u00fc \u00c7\u00f6zme Rehberi","description":"Kodlama meydan okumalar\u0131, yaz\u0131l\u0131m geli\u015ftirme becerilerini keskinle\u015ftirmek ve problem \u00e7\u00f6zme yeteneklerini geli\u015ftirmek i\u00e7in harika bir yoldur. \u00d6zellikle m\u00fclakatlara haz\u0131rlan\u0131rken veya yeni bir dil \u00f6\u011frenirken kar\u015f\u0131la\u015f\u0131lan bu sorular, mant\u0131ksal d\u00fc\u015f\u00fcnme ve algoritmik yakla\u015f\u0131mlar\u0131 test eder. Bu makalede, \"Coding Challenge Practice - Question 43\" ba\u015fl\u0131\u011f\u0131 alt\u0131nda, belirli bir problem \u00fczerinden detayl\u0131 bir analiz ve optimize edilmi\u015f bir \u00e7\u00f6z\u00fcm sunarak, kodlama prati\u011finizi bir \u00fcst seviyeye ta\u015f\u0131yaca\u011f\u0131z.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/coding-challenge-pratigi-soru-43u-cozme-rehberi\/","og_locale":"tr_TR","og_type":"article","og_title":"Coding Challenge Prati\u011fi: Soru 43'\u00fc \u00c7\u00f6zme Rehberi","og_description":"Kodlama meydan okumalar\u0131, yaz\u0131l\u0131m geli\u015ftirme becerilerini keskinle\u015ftirmek ve problem \u00e7\u00f6zme yeteneklerini geli\u015ftirmek i\u00e7in harika bir yoldur. \u00d6zellikle m\u00fclakatlara haz\u0131rlan\u0131rken veya yeni bir dil \u00f6\u011frenirken kar\u015f\u0131la\u015f\u0131lan bu sorular, mant\u0131ksal d\u00fc\u015f\u00fcnme ve algoritmik yakla\u015f\u0131mlar\u0131 test eder. Bu makalede, \"Coding Challenge Practice - Question 43\" ba\u015fl\u0131\u011f\u0131 alt\u0131nda, belirli bir problem \u00fczerinden detayl\u0131 bir analiz ve optimize edilmi\u015f bir \u00e7\u00f6z\u00fcm sunarak, kodlama prati\u011finizi bir \u00fcst seviyeye ta\u015f\u0131yaca\u011f\u0131z.","og_url":"https:\/\/fatihsoysal.com\/blog\/coding-challenge-pratigi-soru-43u-cozme-rehberi\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-11-02T22:31:18+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"28 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/coding-challenge-pratigi-soru-43u-cozme-rehberi\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/coding-challenge-pratigi-soru-43u-cozme-rehberi\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Coding Challenge Prati\u011fi: Soru 43&#8217;\u00fc \u00c7\u00f6zme Rehberi","datePublished":"2025-11-02T22:31:18+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/coding-challenge-pratigi-soru-43u-cozme-rehberi\/"},"wordCount":4836,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/coding-challenge-pratigi-soru-43u-cozme-rehberi\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/coding-challenge-pratigi-soru-43u-cozme-rehberi\/","url":"https:\/\/fatihsoysal.com\/blog\/coding-challenge-pratigi-soru-43u-cozme-rehberi\/","name":"Coding Challenge Prati\u011fi: Soru 43'\u00fc \u00c7\u00f6zme Rehberi","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-11-02T22:31:18+00:00","description":"Kodlama meydan okumalar\u0131, yaz\u0131l\u0131m geli\u015ftirme becerilerini keskinle\u015ftirmek ve problem \u00e7\u00f6zme yeteneklerini geli\u015ftirmek i\u00e7in harika bir yoldur. \u00d6zellikle m\u00fclakatlara haz\u0131rlan\u0131rken veya yeni bir dil \u00f6\u011frenirken kar\u015f\u0131la\u015f\u0131lan bu sorular, mant\u0131ksal d\u00fc\u015f\u00fcnme ve algoritmik yakla\u015f\u0131mlar\u0131 test eder. Bu makalede, \"Coding Challenge Practice - Question 43\" ba\u015fl\u0131\u011f\u0131 alt\u0131nda, belirli bir problem \u00fczerinden detayl\u0131 bir analiz ve optimize edilmi\u015f bir \u00e7\u00f6z\u00fcm sunarak, kodlama prati\u011finizi bir \u00fcst seviyeye ta\u015f\u0131yaca\u011f\u0131z.","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/coding-challenge-pratigi-soru-43u-cozme-rehberi\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/coding-challenge-pratigi-soru-43u-cozme-rehberi\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/coding-challenge-pratigi-soru-43u-cozme-rehberi\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Coding Challenge Prati\u011fi: Soru 43&#8217;\u00fc \u00c7\u00f6zme Rehberi"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/33448","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=33448"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/33448\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=33448"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=33448"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=33448"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}