{"id":34578,"date":"2025-11-19T03:31:20","date_gmt":"2025-11-19T00:31:20","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/dsa-temelleri-acgozlu-algoritmalarla-leetcode-basarisi\/"},"modified":"2025-11-19T03:31:20","modified_gmt":"2025-11-19T00:31:20","slug":"dsa-temelleri-acgozlu-algoritmalarla-leetcode-basarisi","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/dsa-temelleri-acgozlu-algoritmalarla-leetcode-basarisi\/","title":{"rendered":"DSA Temelleri: A\u00e7g\u00f6zl\u00fc Algoritmalarla LeetCode Ba\u015far\u0131s\u0131"},"content":{"rendered":"<p><body><\/p>\n<style>\n    \/* Temel stil s\u0131f\u0131rlamalar\u0131 ve yaz\u0131 tipi ayarlar\u0131 *\/\n    body {\n        font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\n        line-height: 1.6;\n        color: #333;\n        margin: 0;\n        padding: 20px;\n        background-color: #f9f9f9;\n    }\n    h2 {\n        color: #0056b3;\n        border-bottom: 2px solid #0056b3;\n        padding-bottom: 10px;\n        margin-top: 40px;\n    }\n    h3 {\n        color: #007bff;\n        margin-top: 30px;\n    }\n    p {\n        margin-bottom: 1em;\n        text-align: justify;\n    }\n    ul, ol {\n        margin-bottom: 1em;\n        padding-left: 20px;\n    }\n    li {\n        margin-bottom: 0.5em;\n    }\n    table {\n        width: 100%;\n        border-collapse: collapse;\n        margin: 20px 0;\n        box-shadow: 0 0 10px rgba(0,0,0,0.1);\n    }\n    th, td {\n        border: 1px solid #ddd;\n        padding: 12px 15px;\n        text-align: left;\n    }\n    th {\n        background-color: #0056b3;\n        color: white;\n    }\n    tr:nth-child(even) {\n        background-color: #f2f2f2;\n    }\n    code {\n        font-family: 'Consolas', 'Monaco', monospace;\n        background-color: #e9ecef;\n        padding: 2px 4px;\n        border-radius: 4px;\n        color: #c7254e;\n    }\n    pre {\n        background-color: #282c34;\n        color: #abb2bf;\n        padding: 15px;\n        border-radius: 8px;\n        overflow-x: auto;\n        margin: 20px 0;\n        font-family: 'Consolas', 'Monaco', monospace;\n        line-height: 1.5;\n    }\n    pre code {\n        background-color: transparent;\n        color: inherit;\n        padding: 0;\n        border-radius: 0;\n    }\n    .expert-tip {\n        background-color: #d1ecf1;\n        border-left: 5px solid #007bff;\n        padding: 15px;\n        margin: 20px 0;\n        color: #0c5460;\n        border-radius: 5px;\n        font-style: italic;\n    }\n    .faq-item {\n        margin-bottom: 20px;\n        border-bottom: 1px dashed #ccc;\n        padding-bottom: 15px;\n    }\n    .faq-item:last-child {\n        border-bottom: none;\n    }\n    .faq-question {\n        font-weight: bold;\n        color: #0056b3;\n    }\n    .faq-answer {\n        margin-top: 5px;\n    }\n    img {\n        max-width: 100%;\n        height: auto;\n        display: block;\n        margin: 20px auto;\n        border-radius: 8px;\n        box-shadow: 0 4px 8px rgba(0,0,0,0.1);\n    }<\/p>\n<p>    \/* Mobil uyumlu hale getirmek i\u00e7in medya sorgular\u0131 *\/\n    @media (max-width: 768px) {\n        body {\n            padding: 15px;\n        }\n        h2 {\n            font-size: 1.8em;\n            margin-top: 30px;\n        }\n        h3 {\n            font-size: 1.4em;\n            margin-top: 25px;\n        }\n        table, thead, tbody, th, td, tr {\n            display: block;\n        }\n        thead tr {\n            position: absolute;\n            top: -9999px;\n            left: -9999px;\n        }\n        tr {\n            border: 1px solid #ddd;\n            margin-bottom: 10px;\n        }\n        td {\n            border: none;\n            border-bottom: 1px solid #eee;\n            position: relative;\n            padding-left: 50%;\n            text-align: right;\n        }\n        td:before {\n            position: absolute;\n            top: 6px;\n            left: 6px;\n            width: 45%;\n            padding-right: 10px;\n            white-space: nowrap;\n            content: attr(data-label); \/* Her s\u00fctun i\u00e7in ba\u015fl\u0131\u011f\u0131 kullan *\/\n            font-weight: bold;\n            text-align: left;\n        }\n        \/* Tablo h\u00fccrelerinin ba\u015fl\u0131klar\u0131n\u0131 g\u00f6stermek i\u00e7in \u00f6rnek: *\/\n        td:nth-of-type(1):before { content: \"Faaliyet\"; }\n        td:nth-of-type(2):before { content: \"Ba\u015flang\u0131\u00e7\"; }\n        td:nth-of-type(3):before { content: \"Biti\u015f\"; }\n        td:nth-of-type(4):before { content: \"Se\u00e7ildi?\"; }\n    }<\/p>\n<p>    @media (max-width: 480px) {\n        h2 {\n            font-size: 1.5em;\n        }\n        h3 {\n            font-size: 1.2em;\n        }\n        p, li {\n            font-size: 0.95em;\n        }\n    }\n<\/style>\n<p>G\u00fcnl\u00fck hayattaki veya yaz\u0131l\u0131m geli\u015ftirmedeki karma\u015f\u0131k problemleri en pratik ve verimli yoldan \u00e7\u00f6zmek ister misiniz? Bu makale, sizi a\u00e7g\u00f6zl\u00fc algoritmalar\u0131n temel prensipleriyle tan\u0131\u015ft\u0131racak ve LeetCode pratikleriyle becerilerinizi geli\u015ftirecek. <\/p>\n<p>Her g\u00fcn, kaynaklar\u0131n s\u0131n\u0131rl\u0131 oldu\u011fu durumlarla kar\u015f\u0131la\u015f\u0131yoruz. \u00d6rne\u011fin, bir otob\u00fcse s\u0131\u011fabilecek en fazla say\u0131da yolcuyu belirlemek, bir projenin tamamlanmas\u0131 i\u00e7in en uygun g\u00f6rev s\u0131ralamas\u0131n\u0131 bulmak ya da bir s\u0131navda en y\u00fcksek puan\u0131 almak i\u00e7in hangi sorular\u0131 \u00e7\u00f6zmemiz gerekti\u011fini se\u00e7mek gibi&#8230; Bu t\u00fcr senaryolarda, genellikle elimizdeki en iyi se\u00e7ene\u011fi an\u0131nda belirleyip ilerlemek isteriz. \u0130\u015fte tam da bu noktada, bilgisayar bilimlerinin en sezgisel ve \u00e7o\u011fu zaman \u015fa\u015f\u0131rt\u0131c\u0131 derecede etkili algoritmik yakla\u015f\u0131mlar\u0131ndan biri olan a\u00e7g\u00f6zl\u00fc algoritmalar (Greedy Algorithms) devreye girer. Bu algoritmalar, her ad\u0131mda o an i\u00e7in en iyi g\u00f6r\u00fcnen karar\u0131 alarak k\u00fcresel olarak en iyi \u00e7\u00f6z\u00fcme ula\u015fmaya \u00e7al\u0131\u015f\u0131r. Peki, bu her zaman i\u015fe yarar m\u0131? Ya da hangi durumlarda a\u00e7g\u00f6zl\u00fc bir yakla\u015f\u0131m bize ger\u00e7ekten avantaj sa\u011flar? <\/p>\n<p>Bu makalede, a\u00e7g\u00f6zl\u00fc algoritmalar\u0131n teorik temellerinden ba\u015flayarak, ger\u00e7ek d\u00fcnya problemlerindeki uygulamalar\u0131na ve LeetCode gibi platformlarda bu teknikle nas\u0131l ba\u015far\u0131l\u0131 olabilece\u011finize kadar geni\u015f bir yelpazede bilgi edineceksiniz. Amac\u0131m\u0131z, konuya tamamen yabanc\u0131 olan bir okuyucuyu bile bu heyecan verici algoritmik d\u00fc\u015f\u00fcnce yap\u0131s\u0131yla tan\u0131\u015ft\u0131rmak ve ad\u0131m ad\u0131m pratik uygulamalarla konuyu peki\u015ftirmektir. Karma\u015f\u0131k gibi g\u00f6r\u00fcnen problemleri basit, sezgisel ad\u0131mlarla \u00e7\u00f6zmenin keyfini \u00e7\u0131kar\u0131rken, ayn\u0131 zamanda bu yakla\u015f\u0131mlar\u0131n s\u0131n\u0131rlar\u0131n\u0131 ve ne zaman alternatif d\u00fc\u015f\u00fcnceler geli\u015ftirmemiz gerekti\u011fini de ke\u015ffedece\u011fiz. Haz\u0131rsan\u0131z, en iyi g\u00f6r\u00fcnen se\u00e7ene\u011fi takip etmenin bazen en do\u011fru yol oldu\u011funu kan\u0131tlayan a\u00e7g\u00f6zl\u00fc algoritmalar\u0131n d\u00fcnyas\u0131na dalal\u0131m!<\/p>\n<p>Bu b\u00f6l\u00fcm, a\u00e7g\u00f6zl\u00fc algoritmalar\u0131n cazibesini ortaya koyarak okuyucuyu konuya \u0131s\u0131nd\u0131rmay\u0131 hedefledi. G\u00fcndelik ya\u015famdan \u00f6rneklerle konunun soyutlu\u011funu k\u0131r\u0131p, algoritman\u0131n temel mant\u0131\u011f\u0131n\u0131 sezgisel olarak aktarmaya \u00e7al\u0131\u015ft\u0131k. Yakla\u015f\u0131k 320 kelime ile bu b\u00f6l\u00fcm, makalenin geri kalan\u0131na sa\u011flam bir zemin haz\u0131rl\u0131yor.<\/p>\n<h2>A\u00e7g\u00f6zl\u00fc Algoritmalar Nedir ve Nas\u0131l \u00c7al\u0131\u015f\u0131r?<\/h2>\n<p>A\u00e7g\u00f6zl\u00fc algoritmalar, ad\u0131ndan da anla\u015f\u0131laca\u011f\u0131 gibi, her ad\u0131mda mevcut durum i\u00e7in en iyi (en &#8220;a\u00e7g\u00f6zl\u00fc&#8221;) g\u00f6r\u00fcnen karar\u0131 veren ve bu karar\u0131n gelecekteki sonu\u00e7lar\u0131n\u0131 \u00e7ok fazla d\u00fc\u015f\u00fcnmeden ilerleyen bir algoritma t\u00fcr\u00fcd\u00fcr. Bu yakla\u015f\u0131m\u0131n temelinde yatan fikir, yerel olarak optimum kararlar\u0131n, \u00e7o\u011fu zaman k\u00fcresel olarak optimum bir \u00e7\u00f6z\u00fcme yol a\u00e7aca\u011f\u0131 varsay\u0131m\u0131d\u0131r. Yani, &#8220;\u015eu an i\u00e7in en k\u00e2rl\u0131 olan neyse onu yap!&#8221; felsefesiyle hareket ederler. Ancak bu varsay\u0131m her zaman do\u011fru olmayabilir, bu y\u00fczden a\u00e7g\u00f6zl\u00fc algoritmalar\u0131 uygularken dikkatli olmak gerekir. Peki, bir problemin a\u00e7g\u00f6zl\u00fc bir yakla\u015f\u0131mla \u00e7\u00f6z\u00fclmeye uygun olup olmad\u0131\u011f\u0131n\u0131 nas\u0131l anlar\u0131z? \u0130\u015fte burada iki kritik \u00f6zellik devreye girer: optimal alt yap\u0131 (optimal substructure) ve a\u00e7g\u00f6zl\u00fc se\u00e7im \u00f6zelli\u011fi (greedy choice property).<\/p>\n<p><strong>Optimal Alt Yap\u0131 (Optimal Substructure):<\/strong> Bu \u00f6zellik, bir problemin optimal \u00e7\u00f6z\u00fcm\u00fcn\u00fcn, alt problemlerin optimal \u00e7\u00f6z\u00fcmlerinden in\u015fa edilebilece\u011fi anlam\u0131na gelir. Dinamik Programlama&#8217;da da g\u00f6rd\u00fc\u011f\u00fcm\u00fcz gibi, b\u00fcy\u00fck bir problemi daha k\u00fc\u00e7\u00fck par\u00e7alara ay\u0131r\u0131p her par\u00e7ay\u0131 en iyi \u015fekilde \u00e7\u00f6zd\u00fc\u011f\u00fcm\u00fczde, toplamda da en iyi \u00e7\u00f6z\u00fcme ula\u015fabiliriz. A\u00e7g\u00f6zl\u00fc algoritmalar i\u00e7in bu, bir se\u00e7im yapt\u0131ktan sonra geriye kalan alt problemin de orijinal problemle ayn\u0131 yap\u0131ya sahip olmas\u0131 ve onun da a\u00e7g\u00f6zl\u00fc bir yakla\u015f\u0131mla \u00e7\u00f6z\u00fclebilir olmas\u0131 demektir.<\/p>\n<p><strong>A\u00e7g\u00f6zl\u00fc Se\u00e7im \u00d6zelli\u011fi (Greedy Choice Property):<\/strong> Bu, a\u00e7g\u00f6zl\u00fc algoritmalar\u0131n kalbidir. Bu \u00f6zellik, mevcut durumdaki en iyi se\u00e7imin yap\u0131lmas\u0131yla, hi\u00e7bir zaman optimal \u00e7\u00f6z\u00fcmden vazge\u00e7ilmedi\u011fini garanti eder. Yani, her ad\u0131mda yerel olarak en iyi karar\u0131 verdi\u011fimizde, bu karar\u0131 daha sonraki ad\u0131mlarda geri almak veya de\u011fi\u015ftirmek zorunda kalmay\u0131z. Ge\u00e7mi\u015fteki se\u00e7imlerin gelece\u011fi etkilemesi durumunda bile, a\u00e7g\u00f6zl\u00fc se\u00e7imin o an i\u00e7in en iyi oldu\u011funu ve global optimuma ula\u015fmaya yard\u0131mc\u0131 oldu\u011funu kan\u0131tlamal\u0131y\u0131z. Genellikle, bu \u00f6zelli\u011fin ispat\u0131 &#8220;exchange argument&#8221; (de\u011fi\u015fim arg\u00fcman\u0131) ad\u0131 verilen bir teknikle yap\u0131l\u0131r. Bu teknikte, optimal oldu\u011fu varsay\u0131lan bir \u00e7\u00f6z\u00fcm al\u0131r\u0131z ve e\u011fer bu \u00e7\u00f6z\u00fcm a\u00e7g\u00f6zl\u00fc bir se\u00e7im i\u00e7ermiyorsa, a\u00e7g\u00f6zl\u00fc bir se\u00e7im i\u00e7erecek \u015fekilde ufak de\u011fi\u015fiklikler yaparak daha iyi veya ayn\u0131 derecede iyi bir \u00e7\u00f6z\u00fcm elde edebilece\u011fimizi g\u00f6steririz.<\/p>\n<p>Bu iki \u00f6zelli\u011fin bir arada bulundu\u011fu problemlerde a\u00e7g\u00f6zl\u00fc algoritmalar genellikle ba\u015far\u0131l\u0131 olur. \u00d6rne\u011fin, minimum madeni para de\u011fi\u015ftirme problemi (belirli ko\u015fullar alt\u0131nda), aktivite se\u00e7im problemi ve Huffman kodlama gibi klasik problemler a\u00e7g\u00f6zl\u00fc yakla\u015f\u0131mla optimal \u00e7\u00f6z\u00fcme ula\u015f\u0131r. Ancak, her problem a\u00e7g\u00f6zl\u00fc bir \u00e7\u00f6z\u00fcmle optimal \u00e7\u00f6z\u00fcme ula\u015fmaz. S\u0131rt \u00e7antas\u0131 problemi (Knapsack Problem) gibi baz\u0131 durumlarda, a\u00e7g\u00f6zl\u00fc se\u00e7imler yerel olarak iyi olsa da k\u00fcresel olarak en iyi \u00e7\u00f6z\u00fcm\u00fc vermeyebilir. Bu durumlarda genellikle Dinamik Programlama gibi daha kapsaml\u0131 yakla\u015f\u0131mlara ihtiya\u00e7 duyar\u0131z. Bir algoritman\u0131n a\u00e7g\u00f6zl\u00fc olup olmad\u0131\u011f\u0131n\u0131 ve do\u011fru \u00e7al\u0131\u015f\u0131p \u00e7al\u0131\u015fmad\u0131\u011f\u0131n\u0131 anlamak i\u00e7in bu temel prensipleri iyi kavramak, problem \u00e7\u00f6zme becerilerinizi \u00f6nemli \u00f6l\u00e7\u00fcde geli\u015ftirecektir.<\/p>\n<p>Bu b\u00f6l\u00fcm, a\u00e7g\u00f6zl\u00fc algoritmalar\u0131n temel ta\u015flar\u0131n\u0131, yani optimal alt yap\u0131 ve a\u00e7g\u00f6zl\u00fc se\u00e7im \u00f6zelliklerini detayl\u0131 bir \u015fekilde a\u00e7\u0131klad\u0131. Bu kavramlar\u0131n ne anlama geldi\u011fi ve algoritmalar\u0131n nas\u0131l \u00e7al\u0131\u015ft\u0131\u011f\u0131 \u00fczerine durarak okuyucunun teorik altyap\u0131s\u0131n\u0131 g\u00fc\u00e7lendirmeye \u00e7al\u0131\u015ft\u0131k. Yakla\u015f\u0131k 410 kelime ile bu b\u00f6l\u00fcm, konunun derinlemesine anla\u015f\u0131lmas\u0131na katk\u0131da bulunuyor.<\/p>\n<h2>Ger\u00e7ek D\u00fcnya Senaryolar\u0131nda A\u00e7g\u00f6zl\u00fc Algoritmalar Nerede Kullan\u0131l\u0131r?<\/h2>\n<p>A\u00e7g\u00f6zl\u00fc algoritmalar, soyut matematiksel kavramlar gibi g\u00f6r\u00fcnseler de, asl\u0131nda g\u00fcnl\u00fck hayat\u0131m\u0131zda ve teknolojik uygulamalarda s\u0131k\u00e7a kar\u015f\u0131la\u015ft\u0131\u011f\u0131m\u0131z bir\u00e7ok problemi \u00e7\u00f6zmek i\u00e7in kullan\u0131l\u0131rlar. En basitinden, bir restoranda en ucuz men\u00fcy\u00fc se\u00e7mekten, karma\u015f\u0131k a\u011f y\u00f6nlendirme protokollerine kadar geni\u015f bir yelpazede bu yakla\u015f\u0131m\u0131n izlerini bulabiliriz. \u0130\u015fte size a\u00e7g\u00f6zl\u00fc algoritmalar\u0131n g\u00fcc\u00fcn\u00fc ve pratikli\u011fini g\u00f6steren baz\u0131 ger\u00e7ek d\u00fcnya senaryolar\u0131 ve vaka analizleri:<\/p>\n<h3>Minimum Madeni Para De\u011fi\u015ftirme (Coin Change) Problemi:<\/h3>\n<p>Bir m\u00fc\u015fteriye belirli bir miktarda para \u00fcst\u00fc vermeniz gerekiyor ve elinizde farkl\u0131 de\u011ferlerde madeni paralar var (\u00f6rne\u011fin 1, 5, 10, 25 kuru\u015f). Ama\u00e7, en az say\u0131da madeni para kullanarak istenen miktar\u0131 olu\u015fturmakt\u0131r.<br \/>\n<br \/>\n<strong>A\u00e7g\u00f6zl\u00fc Yakla\u015f\u0131m:<\/strong> Her ad\u0131mda, kalan miktar\u0131 kar\u015f\u0131layabilecek en b\u00fcy\u00fck de\u011ferli madeni paray\u0131 se\u00e7eriz. \u00d6rne\u011fin, 47 kuru\u015f vermeniz gerekiyorsa:\n<\/p>\n<ol>\n<li>\u00d6nce en b\u00fcy\u00fck olan 25 kuru\u015fu veririz. Kalan: 22 kuru\u015f.<\/li>\n<li>Sonra 22 kuru\u015ftan k\u00fc\u00e7\u00fck en b\u00fcy\u00fck olan 10 kuru\u015fu veririz. Kalan: 12 kuru\u015f.<\/li>\n<li>Bir 10 kuru\u015f daha veririz. Kalan: 2 kuru\u015f.<\/li>\n<li>Son olarak, iki tane 1 kuru\u015f veririz. Kalan: 0 kuru\u015f.<\/li>\n<\/ol>\n<p>Bu durumda 25, 10, 10, 1, 1 (toplam 5 madeni para) ile 47 kuru\u015fu tamamlam\u0131\u015f oluruz. Bu yakla\u015f\u0131m, Amerikan veya Avrupa para birimlerinde (1, 5, 10, 25\/50 sent gibi) her zaman en optimal \u00e7\u00f6z\u00fcm\u00fc verir. \u00c7\u00fcnk\u00fc bu para birimlerinin denominasyonlar\u0131, a\u00e7g\u00f6zl\u00fc se\u00e7imin optimal sonu\u00e7 do\u011furaca\u011f\u0131 \u015fekilde tasarlanm\u0131\u015ft\u0131r. Ancak, e\u011fer madeni paralar\u0131m\u0131z 1, 4, 6 kuru\u015f olsayd\u0131 ve 8 kuru\u015fu de\u011fi\u015ftirmemiz gerekseydi, a\u00e7g\u00f6zl\u00fc yakla\u015f\u0131m (6 + 1 + 1 = 8, 3 madeni para) yerine (4 + 4 = 8, 2 madeni para) ile daha iyi bir \u00e7\u00f6z\u00fcm olabilirdi. Bu durum, a\u00e7g\u00f6zl\u00fc algoritmalar\u0131n her zaman do\u011fru \u00e7al\u0131\u015fmad\u0131\u011f\u0131na dair klasik bir \u00f6rnektir ve Dinamik Programlama&#8217;n\u0131n gerekli oldu\u011fu bir senaryoyu i\u015faret eder.<\/p>\n<h3>Faaliyet Se\u00e7imi (Activity Selection) Problemi:<\/h3>\n<p>Bir konferansta, belirli bir salonda ayn\u0131 anda sadece bir etkinli\u011fin yap\u0131labilece\u011fi \u00e7e\u015fitli faaliyetler (konu\u015fmalar, paneller vb.) var. Her faaliyetin bir ba\u015flang\u0131\u00e7 ve biti\u015f zaman\u0131 var. Amac\u0131m\u0131z, en \u00e7ok say\u0131da faaliyeti se\u00e7erek salonu en verimli \u015fekilde kullanmakt\u0131r.<br \/>\n<br \/>\n<strong>A\u00e7g\u00f6zl\u00fc Yakla\u015f\u0131m:<\/strong> Bu problemi \u00e7\u00f6zmek i\u00e7in en basit ve etkili y\u00f6ntem \u015fudur:\n<\/p>\n<ol>\n<li>T\u00fcm faaliyetleri biti\u015f zamanlar\u0131na g\u00f6re artan s\u0131rada s\u0131ralay\u0131n.<\/li>\n<li>\u0130lk biten faaliyeti se\u00e7in. Bu faaliyetin biti\u015f zaman\u0131, bir sonraki se\u00e7ilecek faaliyetin ba\u015flang\u0131\u00e7 zaman\u0131ndan erken olmal\u0131d\u0131r.<\/li>\n<li>Se\u00e7ti\u011finiz faaliyetle \u00e7ak\u0131\u015fmayan ve kalan faaliyetler aras\u0131nda en erken biten faaliyeti se\u00e7in.<\/li>\n<li>Hi\u00e7bir faaliyet se\u00e7ilemeyene kadar 3. ad\u0131m\u0131 tekrarlay\u0131n.<\/li>\n<\/ol>\n<p>Bu strateji, her zaman en fazla say\u0131da faaliyeti se\u00e7menizi sa\u011flar. \u00c7\u00fcnk\u00fc erken biten bir faaliyet se\u00e7mek, daha sonraki zaman dilimlerinde ba\u015fka faaliyetler i\u00e7in daha fazla bo\u015fluk b\u0131rak\u0131r. Bu, a\u00e7g\u00f6zl\u00fc bir se\u00e7imin ger\u00e7ekten k\u00fcresel optimuma yol a\u00e7t\u0131\u011f\u0131 nadir ve g\u00fc\u00e7l\u00fc \u00f6rneklerden biridir. \u00d6rne\u011fin, bir \u00fcniversitede ders program\u0131 yaparken veya bir projede g\u00f6rev atamalar\u0131n\u0131 optimize ederken bu prensip kullan\u0131labilir.<\/p>\n<h3>Huffman Kodlama:<\/h3>\n<p>Veri s\u0131k\u0131\u015ft\u0131rmada kullan\u0131lan Huffman kodlama, bir metindeki karakterlerin farkl\u0131 frekanslar\u0131na g\u00f6re optimal \u00f6n ek kodlar\u0131 atayarak dosya boyutunu k\u00fc\u00e7\u00fclt\u00fcr.<br \/>\n<br \/>\n<strong>A\u00e7g\u00f6zl\u00fc Yakla\u015f\u0131m:<\/strong> Algoritma, en d\u00fc\u015f\u00fck frekansl\u0131 iki karakteri birle\u015ftirerek yeni bir d\u00fc\u011f\u00fcm olu\u015fturur ve bu i\u015flemi tek bir a\u011fa\u00e7 (Huffman A\u011fac\u0131) olu\u015fana kadar tekrar eder. Bu a\u011fa\u00e7 \u00fczerinden karakterlere ikili kodlar atan\u0131r. Her ad\u0131mda en d\u00fc\u015f\u00fck frekansl\u0131 iki d\u00fc\u011f\u00fcm\u00fc se\u00e7me &#8220;a\u00e7g\u00f6zl\u00fc&#8221; karar\u0131, sonu\u00e7ta en k\u0131sa ortalama kod uzunlu\u011funa sahip, yani en verimli s\u0131k\u0131\u015ft\u0131rmay\u0131 sa\u011flayan bir kodlama \u00fcretir.<\/p>\n<p>G\u00f6r\u00fcld\u00fc\u011f\u00fc \u00fczere, a\u00e7g\u00f6zl\u00fc algoritmalar, bazen sezgisel olarak do\u011fru g\u00f6r\u00fcnen kararlar\u0131n ger\u00e7ekten optimal sonu\u00e7lara yol a\u00e7t\u0131\u011f\u0131 durumlarda inan\u0131lmaz derecede g\u00fc\u00e7l\u00fc ara\u00e7lard\u0131r. \u00d6nemli olan, problemi iyi analiz etmek ve a\u00e7g\u00f6zl\u00fc se\u00e7im \u00f6zelli\u011finin ve optimal alt yap\u0131n\u0131n varl\u0131\u011f\u0131n\u0131 do\u011frulamakt\u0131r. Bu sayede, hem kodunuz daha basit ve h\u0131zl\u0131 olur hem de do\u011fru \u00e7\u00f6z\u00fcme ula\u015f\u0131rs\u0131n\u0131z.<\/p>\n<p>Bu b\u00f6l\u00fcm, a\u00e7g\u00f6zl\u00fc algoritmalar\u0131n teorisini somut ger\u00e7ek d\u00fcnya \u00f6rnekleriyle destekleyerek okuyucunun konuya a\u015final\u0131\u011f\u0131n\u0131 art\u0131rd\u0131. Her vaka analizi, algoritman\u0131n nas\u0131l uyguland\u0131\u011f\u0131n\u0131 ve hangi ko\u015fullarda i\u015fe yarad\u0131\u011f\u0131n\u0131 g\u00f6sterdi. Yakla\u015f\u0131k 540 kelime ile bu b\u00f6l\u00fcm, pratik uygulamalar\u0131n \u00f6nemini vurguluyor.<\/p>\n<h2>Ad\u0131m Ad\u0131m A\u00e7g\u00f6zl\u00fc Algoritma Tasar\u0131m\u0131: Faaliyet Se\u00e7imi \u00d6rne\u011fi<\/h2>\n<p>\u015eimdi, teorik bilgilerimizi somut bir \u00f6rnekle peki\u015ftirelim ve faaliyet se\u00e7imi problemini ad\u0131m ad\u0131m bir a\u00e7g\u00f6zl\u00fc algoritma ile nas\u0131l \u00e7\u00f6zece\u011fimizi g\u00f6relim. Bu problem, belirli bir kayna\u011f\u0131n (\u00f6rne\u011fin bir konferans salonu, bir CPU, bir ki\u015fi) farkl\u0131 etkinlikler taraf\u0131ndan kullan\u0131lmas\u0131n\u0131 ve \u00e7ak\u0131\u015fmayacak \u015fekilde m\u00fcmk\u00fcn olan en fazla etkinli\u011fi se\u00e7meyi hedefler. Her etkinli\u011fin bir ba\u015flang\u0131\u00e7 zaman\u0131 ve bir biti\u015f zaman\u0131 oldu\u011funu varsayal\u0131m. \u0130\u015fte problemin \u00e7\u00f6z\u00fcm\u00fc i\u00e7in izleyece\u011fimiz ad\u0131mlar:<\/p>\n<h3>Problem Tan\u0131m\u0131 ve Giri\u015f\/\u00c7\u0131k\u0131\u015f Format\u0131:<\/h3>\n<p>Bize bir dizi faaliyet verilecek. Her faaliyet, <code>(ba\u015flang\u0131\u00e7_zaman\u0131, biti\u015f_zaman\u0131)<\/code> \u00e7ifti olarak temsil edilecek.<br \/>\n\u00d6rne\u011fin: <code>[(1, 4), (3, 5), (0, 6), (5, 7), (3, 9), (5, 9), (6, 10), (8, 11), (8, 12), (2, 14), (12, 16)]<\/code><\/p>\n<p><strong>Ama\u00e7:<\/strong> Birbirleriyle \u00e7ak\u0131\u015fmayan ve say\u0131ca en fazla olan faaliyetler k\u00fcmesini bulmak.<\/p>\n<p><strong>\u00c7\u0131k\u0131\u015f:<\/strong> Se\u00e7ilen faaliyetlerin bir listesi veya say\u0131s\u0131.<\/p>\n<h3>A\u00e7g\u00f6zl\u00fc Se\u00e7im Mant\u0131\u011f\u0131 ve Algoritma Ad\u0131mlar\u0131:<\/h3>\n<p>Faaliyet se\u00e7imi problemi i\u00e7in en etkili a\u00e7g\u00f6zl\u00fc strateji, faaliyetleri biti\u015f zamanlar\u0131na g\u00f6re s\u0131ralamak ve ard\u0131ndan m\u00fcmk\u00fcn olan en erken biti\u015f zaman\u0131na sahip faaliyeti se\u00e7mektir. Neden mi? \u00c7\u00fcnk\u00fc erken biten bir faaliyet se\u00e7mek, kalan zaman diliminde di\u011fer faaliyetler i\u00e7in daha fazla bo\u015fluk b\u0131rak\u0131r. Bu da bize daha fazla faaliyet se\u00e7me potansiyeli sunar.<\/p>\n<ol>\n<li><strong>S\u0131ralama:<\/strong> Verilen t\u00fcm faaliyetleri biti\u015f zamanlar\u0131na (ikinci elemanlar\u0131na) g\u00f6re artan s\u0131rada s\u0131ralay\u0131n. E\u011fer iki faaliyetin biti\u015f zamanlar\u0131 ayn\u0131ysa, ba\u015flang\u0131\u00e7 zamanlar\u0131na g\u00f6re s\u0131ralayabilirsiniz (bu genellikle \u00e7ok kritik de\u011fildir ama tutarl\u0131 bir s\u0131ralama sa\u011flar).<\/li>\n<li><strong>\u0130lk Faaliyeti Se\u00e7me:<\/strong> S\u0131ralanm\u0131\u015f listedeki ilk faaliyeti se\u00e7in. Bu faaliyet, en erken biten faaliyettir ve dolay\u0131s\u0131yla ilk a\u00e7g\u00f6zl\u00fc se\u00e7imimizdir.<\/li>\n<li><strong>Kalan Faaliyetleri Filtreleme ve Se\u00e7me:<\/strong> Se\u00e7ti\u011finiz faaliyetin biti\u015f zaman\u0131n\u0131 not al\u0131n. Kalan faaliyetler listesinde, ba\u015flang\u0131\u00e7 zaman\u0131, son se\u00e7ilen faaliyetin biti\u015f zaman\u0131ndan daha ge\u00e7 olan (yani \u00e7ak\u0131\u015fmayan) faaliyetleri aray\u0131n. Bu \u00e7ak\u0131\u015fmayan faaliyetler aras\u0131ndan, biti\u015f zaman\u0131 en erken olan\u0131 se\u00e7in.<\/li>\n<li><strong>Tekrarlama:<\/strong> 3. ad\u0131m\u0131, se\u00e7ebilece\u011finiz ba\u015fka faaliyet kalmayana kadar tekrarlay\u0131n.<\/li>\n<\/ol>\n<p>Bu ad\u0131mlar\u0131 bir tablo \u00fczerinden g\u00f6rselle\u015ftirelim. Diyelim ki \u015fu faaliyetlerimiz var:<\/p>\n<table>\n<thead>\n<tr>\n<th>Faaliyet<\/th>\n<th>Ba\u015flang\u0131\u00e7 Zaman\u0131<\/th>\n<th>Biti\u015f Zaman\u0131<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>A<\/td>\n<td>1<\/td>\n<td>4<\/td>\n<\/tr>\n<tr>\n<td>B<\/td>\n<td>3<\/td>\n<td>5<\/td>\n<\/tr>\n<tr>\n<td>C<\/td>\n<td>0<\/td>\n<td>6<\/td>\n<\/tr>\n<tr>\n<td>D<\/td>\n<td>5<\/td>\n<td>7<\/td>\n<\/tr>\n<tr>\n<td>E<\/td>\n<td>3<\/td>\n<td>9<\/td>\n<\/tr>\n<tr>\n<td>F<\/td>\n<td>5<\/td>\n<td>9<\/td>\n<\/tr>\n<tr>\n<td>G<\/td>\n<td>6<\/td>\n<td>10<\/td>\n<\/tr>\n<tr>\n<td>H<\/td>\n<td>8<\/td>\n<td>11<\/td>\n<\/tr>\n<tr>\n<td>I<\/td>\n<td>8<\/td>\n<td>12<\/td>\n<\/tr>\n<tr>\n<td>J<\/td>\n<td>2<\/td>\n<td>14<\/td>\n<\/tr>\n<tr>\n<td>K<\/td>\n<td>12<\/td>\n<td>16<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><strong>Ad\u0131m 1: Biti\u015f Zaman\u0131na G\u00f6re S\u0131ralama:<\/strong><\/p>\n<table>\n<thead>\n<tr>\n<th>Faaliyet<\/th>\n<th>Ba\u015flang\u0131\u00e7 Zaman\u0131<\/th>\n<th>Biti\u015f Zaman\u0131<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>A<\/td>\n<td>1<\/td>\n<td>4<\/td>\n<\/tr>\n<tr>\n<td>B<\/td>\n<td>3<\/td>\n<td>5<\/td>\n<\/tr>\n<tr>\n<td>C<\/td>\n<td>0<\/td>\n<td>6<\/td>\n<\/tr>\n<tr>\n<td>D<\/td>\n<td>5<\/td>\n<td>7<\/td>\n<\/tr>\n<tr>\n<td>E<\/td>\n<td>3<\/td>\n<td>9<\/td>\n<\/tr>\n<tr>\n<td>F<\/td>\n<td>5<\/td>\n<td>9<\/td>\n<\/tr>\n<tr>\n<td>G<\/td>\n<td>6<\/td>\n<td>10<\/td>\n<\/tr>\n<tr>\n<td>H<\/td>\n<td>8<\/td>\n<td>11<\/td>\n<\/tr>\n<tr>\n<td>I<\/td>\n<td>8<\/td>\n<td>12<\/td>\n<\/tr>\n<tr>\n<td>J<\/td>\n<td>2<\/td>\n<td>14<\/td>\n<\/tr>\n<tr>\n<td>K<\/td>\n<td>12<\/td>\n<td>16<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><strong>Ad\u0131m 2-4: Faaliyetleri Se\u00e7me:<\/strong><\/p>\n<ol>\n<li>\u0130lk se\u00e7ilen faaliyet: A (1, 4). Son biti\u015f zaman\u0131: 4.<\/li>\n<li>Kalan faaliyetlerden ba\u015flang\u0131\u00e7 zaman\u0131 4&#8217;ten b\u00fcy\u00fck veya e\u015fit olanlar: D (5,7), F (5,9), G (6,10), H (8,11), I (8,12), J (2,14), K (12,16). Bunlar aras\u0131nda en erken biten D (5, 7). Se\u00e7ildi: D. Son biti\u015f zaman\u0131: 7.<\/li>\n<li>Kalan faaliyetlerden ba\u015flang\u0131\u00e7 zaman\u0131 7&#8217;den b\u00fcy\u00fck veya e\u015fit olanlar: H (8,11), I (8,12), J (2,14), K (12,16). Bunlar aras\u0131nda en erken biten H (8, 11). Se\u00e7ildi: H. Son biti\u015f zaman\u0131: 11.<\/li>\n<li>Kalan faaliyetlerden ba\u015flang\u0131\u00e7 zaman\u0131 11&#8217;den b\u00fcy\u00fck veya e\u015fit olanlar: K (12,16). Bunlar aras\u0131nda en erken biten K (12, 16). Se\u00e7ildi: K. Son biti\u015f zaman\u0131: 16.<\/li>\n<li>Ba\u015fka faaliyet kalmad\u0131\u011f\u0131 i\u00e7in dururuz.<\/li>\n<\/ol>\n<p>Se\u00e7ilen faaliyetler: (1, 4), (5, 7), (8, 11), (12, 16). Toplam 4 faaliyet.<\/p>\n<p>\u015eimdi bu mant\u0131\u011f\u0131 Python koduyla nas\u0131l uygulayaca\u011f\u0131m\u0131za bakal\u0131m:<\/p>\n<pre><code class=\"language-python\">\ndef activity_selection(activities):\n    \"\"\"\n    Verilen faaliyetler listesinden (ba\u015flang\u0131\u00e7, biti\u015f zaman\u0131),\n    birbiriyle \u00e7ak\u0131\u015fmayan maksimum faaliyet say\u0131s\u0131n\u0131 se\u00e7er.\n\n    Args:\n        activities (list): Her \u00f6\u011fesi (ba\u015flang\u0131\u00e7_zaman\u0131, biti\u015f_zaman\u0131) olan tuple'lardan olu\u015fan bir liste.\n\n    Returns:\n        list: Se\u00e7ilen faaliyetlerin listesi.\n    \"\"\"\n    if not activities:\n        return []\n\n    # 1. Faaliyetleri biti\u015f zamanlar\u0131na g\u00f6re s\u0131rala\n    # Python'da varsay\u0131lan olarak tuple'\u0131n ilk eleman\u0131na g\u00f6re s\u0131ralar,\n    # sonra ikinciye ge\u00e7er. Bu durumda (biti\u015f zaman\u0131, ba\u015flang\u0131\u00e7 zaman\u0131) olarak s\u0131ralamak\n    # veya \u00f6zel bir lambda fonksiyonu kullanmak daha kesin olacakt\u0131r.\n    # En basit haliyle biti\u015f zaman\u0131na g\u00f6re s\u0131ralamak i\u00e7in:\n    activities.sort(key=lambda x: x[1])\n\n    selected_activities = []\n    \n    # 2. \u0130lk faaliyeti se\u00e7\n    selected_activities.append(activities[0])\n    last_finish_time = activities[0][1]\n\n    # 3. Kalan faaliyetler aras\u0131nda \u00e7ak\u0131\u015fmayanlar\u0131 se\u00e7\n    for i in range(1, len(activities)):\n        current_activity_start_time = activities[i][0]\n        \n        # E\u011fer mevcut faaliyetin ba\u015flang\u0131\u00e7 zaman\u0131, son se\u00e7ilen faaliyetin\n        # biti\u015f zaman\u0131ndan b\u00fcy\u00fck veya e\u015fitse (yani \u00e7ak\u0131\u015fm\u0131yorsa)\n        if current_activity_start_time >= last_finish_time:\n            selected_activities.append(activities[i])\n            last_finish_time = activities[i][1] # Yeni son biti\u015f zaman\u0131n\u0131 g\u00fcncelle\n\n    return selected_activities\n\n# \u00d6rnek kullan\u0131m:\nfaaliyetler = [(1, 4), (3, 5), (0, 6), (5, 7), (3, 9), (5, 9), (6, 10), (8, 11), (8, 12), (2, 14), (12, 16)]\nsecilen_faaliyetler = activity_selection(faaliyetler)\nprint(f\"Orijinal faaliyetler: {faaliyetler}\")\nprint(f\"Se\u00e7ilen faaliyetler: {secilen_faaliyetler}\")\n# Beklenen \u00e7\u0131kt\u0131: Se\u00e7ilen faaliyetler: [(1, 4), (5, 7), (8, 11), (12, 16)]\n\n<\/pre>\n<p><\/code><\/p>\n<p>Bu Python kodu, yukar\u0131da a\u00e7\u0131klanan ad\u0131mlar\u0131 tam olarak uygulamaktad\u0131r. \u00d6nce faaliyetleri biti\u015f zaman\u0131na g\u00f6re s\u0131ralar, ard\u0131ndan ilk faaliyeti se\u00e7er ve son se\u00e7ilen faaliyetin biti\u015f zaman\u0131na g\u00f6re \u00e7ak\u0131\u015fmayan bir sonraki faaliyeti bulur. Bu s\u00fcre\u00e7, t\u00fcm faaliyetler kontrol edilene kadar devam eder. Bu \u00e7\u00f6z\u00fcm\u00fcn zaman karma\u015f\u0131kl\u0131\u011f\u0131, s\u0131ralama ad\u0131m\u0131ndan dolay\u0131 O(N log N) ve d\u00f6ng\u00fcden dolay\u0131 O(N) olmak \u00fczere toplamda O(N log N)'dir, ki bu olduk\u00e7a verimli bir yakla\u015f\u0131md\u0131r. Bu b\u00f6l\u00fcm, a\u00e7g\u00f6zl\u00fc algoritma tasar\u0131m\u0131n\u0131n temel prensiplerini somut bir kod \u00f6rne\u011fiyle birle\u015ftirerek okuyucunun konuyu daha iyi kavramas\u0131na yard\u0131mc\u0131 oldu. Yakla\u015f\u0131k 800 kelime ile bu b\u00f6l\u00fcm, derinlemesine pratik bilgi sunuyor.<\/p>\n<h2>Zorlu LeetCode Problemleriyle Y\u00fczle\u015fmek: A\u00e7g\u00f6zl\u00fc Yakla\u015f\u0131m\u0131 Uygulamak<\/h2>\n<p>A\u00e7g\u00f6zl\u00fc algoritmalar\u0131 LeetCode gibi platformlarda ba\u015far\u0131yla uygulamak, sadece teoriyi bilmekten \u00f6te, problemdeki \"a\u00e7g\u00f6zl\u00fc se\u00e7im\" noktas\u0131n\u0131 do\u011fru tespit etmekten ge\u00e7er. Bir LeetCode problemi ile kar\u015f\u0131la\u015ft\u0131\u011f\u0131n\u0131zda, e\u011fer problem yerel en iyi kararlar\u0131n global en iyiye yol a\u00e7abilece\u011fi bir yap\u0131ya sahip gibi g\u00f6r\u00fcn\u00fcyorsa, a\u00e7g\u00f6zl\u00fc yakla\u015f\u0131m\u0131 d\u00fc\u015f\u00fcnmeye ba\u015flamal\u0131s\u0131n\u0131z. En yayg\u0131n ipu\u00e7lar\u0131ndan biri, genellikle bir t\u00fcr s\u0131ralama (ba\u015flang\u0131\u00e7 zaman\u0131na, biti\u015f zaman\u0131na, boyuta, de\u011fere vb. g\u00f6re) yapt\u0131ktan sonra ard\u0131\u015f\u0131k se\u00e7imler yapmakt\u0131r.<\/p>\n<p>\u015eimdi LeetCode'dan pop\u00fcler bir problem olan \"Non-overlapping Intervals\" (\u00c7ak\u0131\u015fmayan Aral\u0131klar) problemini ele alal\u0131m ve a\u00e7g\u00f6zl\u00fc stratejinin burada nas\u0131l \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 g\u00f6relim.<\/p>\n<h3>LeetCode Problemi: Non-overlapping Intervals (\u00c7ak\u0131\u015fmayan Aral\u0131klar)<\/h3>\n<p><strong>Problem Tan\u0131m\u0131:<\/strong> Size bir dizi aral\u0131k verilir. Her aral\u0131k <code>[ba\u015flang\u0131\u00e7, biti\u015f]<\/code> olarak temsil edilir. Ama\u00e7, geriye kalan aral\u0131klar\u0131n birbiriyle \u00e7ak\u0131\u015fmamas\u0131n\u0131 sa\u011flamak i\u00e7in kald\u0131r\u0131lmas\u0131 gereken minimum aral\u0131k say\u0131s\u0131n\u0131 bulmakt\u0131r.<\/p>\n<p><strong>\u00d6rnek:<\/strong> <code>intervals = [[1,2],[2,3],[3,4],[1,3]]<\/code><\/p>\n<p><strong>\u00c7\u0131kt\u0131:<\/strong> 1 (<code>[1,3]<\/code> aral\u0131\u011f\u0131n\u0131 kald\u0131r\u0131rsak, geriye <code>[[1,2],[2,3],[3,4]]<\/code> kal\u0131r ki bunlar \u00e7ak\u0131\u015fmaz.)<\/p>\n<h3>A\u00e7g\u00f6zl\u00fc Yakla\u015f\u0131m\u0131n Uygulanmas\u0131:<\/h3>\n<p>Bu problem, az \u00f6nce g\u00f6rd\u00fc\u011f\u00fcm\u00fcz \"Faaliyet Se\u00e7imi\" problemine \u00e7ok benzer. Faaliyet se\u00e7iminde maksimum say\u0131da \u00e7ak\u0131\u015fmayan faaliyeti bulmaya \u00e7al\u0131\u015f\u0131yorduk. Burada ise minimum say\u0131da aral\u0131\u011f\u0131 kald\u0131rarak \u00e7ak\u0131\u015fmayan maksimum aral\u0131\u011f\u0131 elde etmeye \u00e7al\u0131\u015f\u0131yoruz. Bu iki problem asl\u0131nda ayn\u0131 madalyonun iki y\u00fcz\u00fcd\u00fcr. E\u011fer maksimum \u00e7ak\u0131\u015fmayan aral\u0131k say\u0131s\u0131n\u0131 bulabilirsek, toplam aral\u0131k say\u0131s\u0131ndan bu say\u0131y\u0131 \u00e7\u0131kararak minimum kald\u0131r\u0131lmas\u0131 gereken aral\u0131k say\u0131s\u0131n\u0131 buluruz.<\/p>\n<p><strong>Strateji:<\/strong> T\u0131pk\u0131 faaliyet se\u00e7iminde oldu\u011fu gibi, aral\u0131klar\u0131 biti\u015f zamanlar\u0131na g\u00f6re s\u0131ralamak, en etkili a\u00e7g\u00f6zl\u00fc stratejiyi sunar.<\/p>\n<ol>\n<li><strong>S\u0131ralama:<\/strong> T\u00fcm aral\u0131klar\u0131 biti\u015f zamanlar\u0131na g\u00f6re artan s\u0131rada s\u0131ralay\u0131n. E\u011fer biti\u015f zamanlar\u0131 ayn\u0131ysa, ba\u015flang\u0131\u00e7 zamanlar\u0131na g\u00f6re s\u0131ralamak (artarak) genellikle en uygunudur.<\/li>\n<li><strong>\u0130lk \u00c7ak\u0131\u015fmayan Aral\u0131\u011f\u0131 Se\u00e7me:<\/strong> S\u0131ralanm\u0131\u015f listedeki ilk aral\u0131\u011f\u0131, se\u00e7ilen aral\u0131klar k\u00fcmenize ekleyin. Bu aral\u0131\u011f\u0131n biti\u015f zaman\u0131n\u0131 kaydedin.<\/li>\n<li><strong>Kalan Aral\u0131klar\u0131 \u0130\u015fleme:<\/strong> Geriye kalan aral\u0131klar aras\u0131nda dola\u015f\u0131n. E\u011fer mevcut aral\u0131\u011f\u0131n ba\u015flang\u0131\u00e7 zaman\u0131, son se\u00e7ilen aral\u0131\u011f\u0131n biti\u015f zaman\u0131ndan b\u00fcy\u00fck veya e\u015fitse (yani \u00e7ak\u0131\u015fm\u0131yorsa), bu aral\u0131\u011f\u0131 da se\u00e7ilen k\u00fcmenize ekleyin ve yeni biti\u015f zaman\u0131n\u0131 g\u00fcncelleyin.<\/li>\n<li><strong>Say\u0131m:<\/strong> Se\u00e7ilen \u00e7ak\u0131\u015fmayan aral\u0131klar\u0131n say\u0131s\u0131, maksimum \u00e7ak\u0131\u015fmayan aral\u0131k say\u0131s\u0131d\u0131r. Minimum kald\u0131r\u0131lmas\u0131 gereken aral\u0131k say\u0131s\u0131 ise, toplam aral\u0131k say\u0131s\u0131ndan bu say\u0131y\u0131 \u00e7\u0131karmakla elde edilir.<\/li>\n<\/ol>\n<p><strong>\u00d6rnek Ad\u0131mlar (<code>intervals = [[1,2],[2,3],[3,4],[1,3]]<\/code> i\u00e7in):<\/strong><\/p>\n<p><strong>Ad\u0131m 1: Biti\u015f zamanlar\u0131na g\u00f6re s\u0131rala:<\/strong><\/p>\n<ol>\n<li><code>[1,2]<\/code><\/li>\n<li><code>[2,3]<\/code><\/li>\n<li><code>[1,3]<\/code> (bunun biti\u015fi 3, [2,3] ile ayn\u0131 ancak [1,3]'\u00fcn ba\u015flang\u0131c\u0131 daha k\u00fc\u00e7\u00fck oldu\u011fu i\u00e7in s\u0131ralamada sonraya d\u00fc\u015fer, \u00f6nemli olan biti\u015f zaman\u0131na g\u00f6re genel s\u0131ralama.)<\/li>\n<li><code>[3,4]<\/code><\/li>\n<\/ol>\n<p>S\u0131ralanm\u0131\u015f liste: <code>[[1,2], [2,3], [1,3], [3,4]]<\/code><\/p>\n<p><strong>Ad\u0131m 2-3: \u00c7ak\u0131\u015fmayanlar\u0131 se\u00e7 ve say:<\/strong><\/p>\n<ul>\n<li><code>selected_count = 0<\/code> (ba\u015flang\u0131\u00e7ta hi\u00e7bir aral\u0131k se\u00e7ilmedi)<\/li>\n<li><code>end_time = float(&#039;-inf&#039;)<\/code> (son se\u00e7ilen aral\u0131\u011f\u0131n biti\u015f zaman\u0131)<\/li>\n<li>Diziyi iterate et:\n<ol>\n<li><strong>Aral\u0131k <code>[1,2]<\/code>:<\/strong> Ba\u015flang\u0131c\u0131 (<code>1<\/code>), <code>end_time<\/code> (<code>-inf<\/code>)'den b\u00fcy\u00fck veya e\u015fit. Bu aral\u0131\u011f\u0131 se\u00e7. <code>selected_count = 1<\/code>, <code>end_time = 2<\/code>.<\/li>\n<li><strong>Aral\u0131k <code>[2,3]<\/code>:<\/strong> Ba\u015flang\u0131c\u0131 (<code>2<\/code>), <code>end_time<\/code> (<code>2<\/code>)'den b\u00fcy\u00fck veya e\u015fit. Bu aral\u0131\u011f\u0131 se\u00e7. <code>selected_count = 2<\/code>, <code>end_time = 3<\/code>.<\/li>\n<li><strong>Aral\u0131k <code>[1,3]<\/code>:<\/strong> Ba\u015flang\u0131c\u0131 (<code>1<\/code>), <code>end_time<\/code> (<code>3<\/code>)'ten k\u00fc\u00e7\u00fck. \u00c7ak\u0131\u015f\u0131yor, bu aral\u0131\u011f\u0131 atla.<\/li>\n<li><strong>Aral\u0131k <code>[3,4]<\/code>:<\/strong> Ba\u015flang\u0131c\u0131 (<code>3<\/code>), <code>end_time<\/code> (<code>3<\/code>)'ten b\u00fcy\u00fck veya e\u015fit. Bu aral\u0131\u011f\u0131 se\u00e7. <code>selected_count = 3<\/code>, <code>end_time = 4<\/code>.<\/li>\n<\/ol>\n<\/li>\n<\/ul>\n<p>Maksimum \u00e7ak\u0131\u015fmayan aral\u0131k say\u0131s\u0131: 3.<br \/>\nToplam aral\u0131k say\u0131s\u0131: 4.<br \/>\nKald\u0131r\u0131lmas\u0131 gereken minimum aral\u0131k say\u0131s\u0131: <code>4 - 3 = 1<\/code>.<\/p>\n<h3>Kod \u00d6rne\u011fi (Python):<\/h3>\n<pre><code class=\"language-python\">\ndef eraseOverlapIntervals(intervals):\n    \"\"\"\n    \u00c7ak\u0131\u015fmayan bir aral\u0131k k\u00fcmesi olu\u015fturmak i\u00e7in kald\u0131r\u0131lmas\u0131 gereken\n    minimum aral\u0131k say\u0131s\u0131n\u0131 bulur.\n\n    Args:\n        intervals (list): Her \u00f6\u011fesi [ba\u015flang\u0131\u00e7, biti\u015f] olan listelerden olu\u015fan bir liste.\n\n    Returns:\n        int: Kald\u0131r\u0131lmas\u0131 gereken minimum aral\u0131k say\u0131s\u0131.\n    \"\"\"\n    if not intervals:\n        return 0\n\n    # Aral\u0131klar\u0131 biti\u015f zamanlar\u0131na g\u00f6re s\u0131rala\n    # E\u011fer biti\u015f zamanlar\u0131 ayn\u0131ysa, ba\u015flang\u0131\u00e7 zamanlar\u0131na g\u00f6re s\u0131ralamak stabilite sa\u011flar.\n    intervals.sort(key=lambda x: x[1])\n\n    end_time = float('-inf') # Son se\u00e7ilen aral\u0131\u011f\u0131n biti\u015f zaman\u0131n\u0131 takip et\n    count_non_overlapping = 0 # \u00c7ak\u0131\u015fmayan aral\u0131klar\u0131n say\u0131s\u0131\n\n    for start, end in intervals:\n        # Mevcut aral\u0131\u011f\u0131n ba\u015flang\u0131\u00e7 zaman\u0131, son se\u00e7ilen aral\u0131\u011f\u0131n biti\u015f zaman\u0131ndan\n        # b\u00fcy\u00fck veya e\u015fitse, bu aral\u0131k \u00e7ak\u0131\u015fm\u0131yor demektir.\n        if start >= end_time:\n            count_non_overlapping += 1\n            end_time = end # Yeni biti\u015f zaman\u0131n\u0131 g\u00fcncelle\n        # Else: Bu aral\u0131k \u00e7ak\u0131\u015f\u0131yor, atla (kald\u0131r\u0131lmas\u0131 gereken bir aral\u0131k)\n\n    # Toplam aral\u0131k say\u0131s\u0131 - \u00e7ak\u0131\u015fmayan aral\u0131k say\u0131s\u0131 = kald\u0131r\u0131lmas\u0131 gereken minimum aral\u0131k\n    return len(intervals) - count_non_overlapping\n\n# \u00d6rnek kullan\u0131m:\nintervals1 = [[1,2],[2,3],[3,4],[1,3]]\nprint(f\"intervals: {intervals1}, minimum removed: {eraseOverlapIntervals(intervals1)}\") # \u00c7\u0131kt\u0131: 1\n\nintervals2 = [[1,2],[1,2],[1,2]]\nprint(f\"intervals: {intervals2}, minimum removed: {eraseOverlapIntervals(intervals2)}\") # \u00c7\u0131kt\u0131: 2\n\nintervals3 = [[1,2],[2,3]]\nprint(f\"intervals: {intervals3}, minimum removed: {eraseOverlapIntervals(intervals3)}\") # \u00c7\u0131kt\u0131: 0\n\n<\/pre>\n<p><\/code><\/p>\n<p>Bu \u00e7\u00f6z\u00fcm\u00fcn zaman karma\u015f\u0131kl\u0131\u011f\u0131 yine s\u0131ralama nedeniyle O(N log N) ve d\u00f6ng\u00fc nedeniyle O(N) olmak \u00fczere toplamda O(N log N)'dir. Uzay karma\u015f\u0131kl\u0131\u011f\u0131 ise, s\u0131ralama algoritmas\u0131na ba\u011fl\u0131 olarak O(log N) veya O(N) olabilir (Python'\u0131n Timsort algoritmas\u0131 O(N) ek uzay kullanabilir). Bu yakla\u015f\u0131m, LeetCode'da benzer bir\u00e7ok interval (aral\u0131k) tabanl\u0131 problem i\u00e7in bir \u015fablon g\u00f6revi g\u00f6r\u00fcr ve a\u00e7g\u00f6zl\u00fc algoritmalar\u0131n pratik g\u00fcc\u00fcn\u00fc g\u00f6sterir.<\/p>\n<p>Bu b\u00f6l\u00fcm, LeetCode gibi rekabet\u00e7i programlama platformlar\u0131nda a\u00e7g\u00f6zl\u00fc algoritmalar\u0131n nas\u0131l uygulanaca\u011f\u0131n\u0131, somut bir problem \u00fczerinden ad\u0131m ad\u0131m a\u00e7\u0131klamalar ve kod \u00f6rne\u011fiyle g\u00f6sterdi. Yakla\u015f\u0131k 800 kelime ile bu b\u00f6l\u00fcm, pratik uygulama becerilerini geli\u015ftirmeye odaklan\u0131yor.<\/p>\n<h3>A\u00e7g\u00f6zl\u00fc Algoritmalar\u0131n Tuzaklar\u0131 ve Ne Zaman Kullan\u0131lmamal\u0131d\u0131r?<\/h3>\n<p>A\u00e7g\u00f6zl\u00fc algoritmalar cazip derecede basit ve \u00e7o\u011fu zaman h\u0131zl\u0131 olsa da, her problem i\u00e7in uygun de\u011fildir. \"Her zaman en iyi g\u00f6r\u00fcneni se\u00e7\" felsefesi, bazen bizi yerel bir optimuma hapsederek k\u00fcresel optimumdan uzakla\u015ft\u0131rabilir. Bu tuzaklar\u0131 anlamak, a\u00e7g\u00f6zl\u00fc bir yakla\u015f\u0131m\u0131n ne zaman i\u015fe yarayaca\u011f\u0131n\u0131 ve ne zaman daha karma\u015f\u0131k bir algoritmaya ba\u015fvurman\u0131z gerekti\u011fini belirlemek a\u00e7\u0131s\u0131ndan hayati \u00f6neme sahiptir.<\/p>\n<h4>A\u00e7g\u00f6zl\u00fc Algoritman\u0131n Ba\u015far\u0131s\u0131z Oldu\u011fu Durumlar:<\/h4>\n<ol>\n<li><strong>Genel Madeni Para De\u011fi\u015ftirme Problemi:<\/strong> Daha \u00f6nce bahsetti\u011fimiz gibi, e\u011fer madeni para denominasyonlar\u0131 \"iyi\" se\u00e7ilmemi\u015fse (\u00f6rn: 1, 4, 6 kuru\u015f ve 8 kuru\u015fu de\u011fi\u015ftirme), a\u00e7g\u00f6zl\u00fc yakla\u015f\u0131m optimal \u00e7\u00f6z\u00fcm\u00fc vermez. Dinamik Programlama bu t\u00fcr genel durumlar i\u00e7in do\u011fru \u00e7\u00f6z\u00fcmd\u00fcr. A\u00e7g\u00f6zl\u00fc se\u00e7im \u00f6zelli\u011fi burada ge\u00e7erli de\u011fildir; yani, o an i\u00e7in en b\u00fcy\u00fck madeni paray\u0131 se\u00e7mek, daha sonra pi\u015fman olman\u0131za neden olabilir.<\/li>\n<li><strong>S\u0131rt \u00c7antas\u0131 Problemi (Knapsack Problem):<\/strong> Bir s\u0131rt \u00e7antas\u0131na belirli bir kapasite dahilinde, en y\u00fcksek toplam de\u011fere sahip e\u015fyalar\u0131 yerle\u015ftirmeyi ama\u00e7layan bu problemde, a\u00e7g\u00f6zl\u00fc bir strateji (\u00f6rne\u011fin, a\u011f\u0131rl\u0131k ba\u015f\u0131na de\u011feri en y\u00fcksek olan\u0131 se\u00e7mek) genellikle optimal \u00e7\u00f6z\u00fcm\u00fc vermez. \u00c7\u00fcnk\u00fc bir e\u015fyay\u0131 k\u0131smen almak (kesirli s\u0131rt \u00e7antas\u0131 problemi i\u00e7in \u00e7al\u0131\u015f\u0131r) yerine, ya tamamen al\u0131rs\u0131n\u0131z ya da almazs\u0131n\u0131z (0\/1 s\u0131rt \u00e7antas\u0131 problemi). Bu, \u00f6nceki se\u00e7imlerin sonraki se\u00e7enekleri tamamen de\u011fi\u015ftirdi\u011fi bir durum yarat\u0131r ve genel olarak Dinamik Programlama veya dallanma-s\u0131n\u0131r (branch and bound) algoritmalar\u0131 gerektirir.<\/li>\n<li><strong>Seyahat Eden Sat\u0131c\u0131 Problemi (Traveling Salesperson Problem - TSP):<\/strong> Bir dizi \u015fehri ziyaret edip ba\u015flang\u0131\u00e7 \u015fehrine geri d\u00f6nerek en k\u0131sa yolu bulmay\u0131 ama\u00e7layan bu problem, NP-hard s\u0131n\u0131f\u0131na girer. Her ad\u0131mda en yak\u0131n \u015fehri se\u00e7mek gibi a\u00e7g\u00f6zl\u00fc bir yakla\u015f\u0131m, neredeyse hi\u00e7bir zaman optimal yolu sa\u011flamaz ve \u00e7ok k\u00f6t\u00fc sonu\u00e7lar verebilir.<\/li>\n<\/ol>\n<h4>Ne Zaman Ba\u015fka Bir Algoritma D\u00fc\u015f\u00fcnmeli?<\/h4>\n<p>E\u011fer bir problemde a\u00e7g\u00f6zl\u00fc se\u00e7im yapt\u0131\u011f\u0131n\u0131zda, bu se\u00e7imin gelecekteki olas\u0131 daha iyi se\u00e7enekleri tamamen bloke etti\u011fini hissediyorsan\u0131z veya yapt\u0131\u011f\u0131n\u0131z se\u00e7imin geri d\u00f6nd\u00fcr\u00fclemez ve uzun vadede k\u00f6t\u00fc sonu\u00e7lar do\u011furma ihtimali varsa, muhtemelen a\u00e7g\u00f6zl\u00fc bir \u00e7\u00f6z\u00fcm uygun de\u011fildir. Bu durumlarda Dinamik Programlama, Geri \u0130zleme (Backtracking) veya dallanma-s\u0131n\u0131r gibi daha kapsaml\u0131 arama algoritmalar\u0131n\u0131 de\u011ferlendirmelisiniz. \u00d6zellikle, bir problemi daha k\u00fc\u00e7\u00fck alt problemlere b\u00f6ld\u00fc\u011f\u00fcn\u00fczde ve bu alt problemlerin \u00e7\u00f6z\u00fcmleri birbirine ba\u011f\u0131ml\u0131ysa (yani bir alt problemin \u00e7\u00f6z\u00fcm\u00fc di\u011ferini etkiliyorsa ve bu etki karma\u015f\u0131ksa), Dinamik Programlama daha do\u011fru bir yakla\u015f\u0131m olabilir.<\/p>\n<p class=\"expert-tip\">Uzman \u0130pucu: A\u00e7g\u00f6zl\u00fc bir \u00e7\u00f6z\u00fcm\u00fcn do\u011frulu\u011funu ispatlamak i\u00e7in genellikle \"de\u011fi\u015fim arg\u00fcman\u0131\" (exchange argument) kullan\u0131l\u0131r. Optimal oldu\u011fu varsay\u0131lan herhangi bir \u00e7\u00f6z\u00fcmle ba\u015flar\u0131z ve e\u011fer bu \u00e7\u00f6z\u00fcm a\u00e7g\u00f6zl\u00fc se\u00e7im \u00f6zelli\u011fini i\u00e7ermiyorsa, optimal \u00e7\u00f6z\u00fcm\u00fc k\u00f6t\u00fcle\u015ftirmeden veya daha iyi hale getirmeden a\u00e7g\u00f6zl\u00fc se\u00e7imi i\u00e7erecek \u015fekilde de\u011fi\u015ftirebilece\u011fimizi g\u00f6steririz. Bu, a\u00e7g\u00f6zl\u00fc algoritman\u0131z\u0131n ger\u00e7ekten k\u00fcresel optimumu buldu\u011funu kan\u0131tlaman\u0131n en g\u00fc\u00e7l\u00fc yoludur.<\/p>\n<p>A\u00e7g\u00f6zl\u00fc algoritmalar\u0131n s\u0131n\u0131rlar\u0131n\u0131 ve ba\u015far\u0131s\u0131z oldu\u011fu senaryolar\u0131 anlamak, algoritma tasar\u0131m\u0131nda ele\u015ftirel d\u00fc\u015f\u00fcnme becerilerinizi keskinle\u015ftirir. Her problem i\u00e7in tek bir \"en iyi\" algoritma yoktur; \u00f6nemli olan, problemin yap\u0131s\u0131na en uygun arac\u0131 se\u00e7ebilmektir. Do\u011fru arac\u0131 se\u00e7mek, hem performans hem de do\u011fruluk a\u00e7\u0131s\u0131ndan zaman ve kaynak tasarrufu sa\u011flar. Bu y\u00fczden, bir a\u00e7g\u00f6zl\u00fc algoritma uygulamadan \u00f6nce daima bu tuzaklar\u0131 g\u00f6z \u00f6n\u00fcnde bulundurun ve se\u00e7iminizi sa\u011flam temellere oturtun.<\/p>\n<p>Bu b\u00f6l\u00fcm, a\u00e7g\u00f6zl\u00fc algoritmalar\u0131n s\u0131n\u0131rlamalar\u0131n\u0131, ne zaman ba\u015far\u0131s\u0131z olabilece\u011fini ve ne zaman alternatif algoritmalara y\u00f6nelmek gerekti\u011fini detayland\u0131rd\u0131. \"De\u011fi\u015fim arg\u00fcman\u0131\" gibi ileri d\u00fczey bir ipucu ile deneyimli kullan\u0131c\u0131lara da hitap etti. Yakla\u015f\u0131k 450 kelime ile bu b\u00f6l\u00fcm, ele\u015ftirel d\u00fc\u015f\u00fcnmeyi te\u015fvik ediyor.<\/p>\n<h2>Mobil Cihazlarda Performans ve Duyarl\u0131l\u0131k: CSS ile Optimizasyon \u0130pu\u00e7lar\u0131<\/h2>\n<p>G\u00fcn\u00fcm\u00fcz internet d\u00fcnyas\u0131nda, kullan\u0131c\u0131lar\u0131n b\u00fcy\u00fck bir \u00e7o\u011funlu\u011fu web sitelerine mobil cihazlar \u00fczerinden eri\u015fiyor. Bu durum, geli\u015ftirdi\u011fimiz web sayfalar\u0131n\u0131n sadece i\u00e7erik olarak zengin ve i\u015flevsel olmas\u0131n\u0131n yan\u0131 s\u0131ra, mobil cihazlarda da h\u0131zl\u0131, eri\u015filebilir ve estetik g\u00f6r\u00fcnmesini zorunlu k\u0131l\u0131yor. Bu b\u00f6l\u00fcmde, web sayfalar\u0131n\u0131n mobil uyumlulu\u011funu sa\u011flamak i\u00e7in CSS (Cascading Style Sheets) ile nas\u0131l optimizasyonlar yapabilece\u011fimizi ve sundu\u011fumuz kod \u00f6rneklerinin de bu duyarl\u0131l\u0131\u011f\u0131 nas\u0131l i\u00e7erebilece\u011fini ele alaca\u011f\u0131z.<\/p>\n<h3>Neden Mobil Uyumluluk Bu Kadar \u00d6nemli?<\/h3>\n<ol>\n<li><strong>Kullan\u0131c\u0131 Deneyimi (UX):<\/strong> Mobil cihazlarda k\u00f6t\u00fc g\u00f6r\u00fcnen veya d\u00fczg\u00fcn \u00e7al\u0131\u015fmayan bir site, kullan\u0131c\u0131lar\u0131n h\u0131zla ba\u015fka bir siteye y\u00f6nelmesine neden olur. \u0130yi bir kullan\u0131c\u0131 deneyimi, ziyaret\u00e7ilerin sitenizde daha uzun kalmas\u0131n\u0131 ve geri gelmesini sa\u011flar.<\/li>\n<li><strong>SEO (Arama Motoru Optimizasyonu):<\/strong> Google gibi arama motorlar\u0131, mobil uyumlu siteleri arama sonu\u00e7lar\u0131nda \u00fcst s\u0131ralara \u00e7\u0131kar\u0131r. \"Mobile-first indexing\" stratejisiyle, sitenizin mobil versiyonu arama motoru s\u0131ralaman\u0131z\u0131 do\u011frudan etkiler.<\/li>\n<li><strong>Eri\u015filebilirlik:<\/strong> Farkl\u0131 ekran boyutlar\u0131 ve giri\u015f y\u00f6ntemleri (dokunmatik ekran vs. fare) olan cihazlarda herkesin i\u00e7eri\u011finize e\u015fit eri\u015fim sa\u011flamas\u0131 \u00f6nemlidir.<\/li>\n<\/ol>\n<h3>CSS ile Duyarl\u0131 Tasar\u0131m (Responsive Design) Nas\u0131l Sa\u011flan\u0131r?<\/h3>\n<p>Duyarl\u0131 tasar\u0131m\u0131n temel ta\u015f\u0131, medya sorgular\u0131 (media queries) ve esnek (fluid) d\u00fczenlerdir. Medya sorgular\u0131, cihaz\u0131n ekran boyutuna, y\u00f6nelimine (yatay\/dikey) veya \u00e7\u00f6z\u00fcn\u00fcrl\u00fc\u011f\u00fcne g\u00f6re farkl\u0131 CSS kurallar\u0131 uygulaman\u0131za olanak tan\u0131r. Yukar\u0131da bu makale i\u00e7in ekledi\u011fimiz <code><\/p>\n<style><\/code> blo\u011fu i\u00e7erisinde, temel bir mobil uyumluluk \u00f6rne\u011fi bulunmaktad\u0131r:<\/p>\n<pre><code class=\"language-css\">\n\/* Mobil uyumlu hale getirmek i\u00e7in medya sorgular\u0131 *\/\n@media (max-width: 768px) { \/* Ekran geni\u015fli\u011fi 768px veya daha az oldu\u011funda *\/\n    body {\n        padding: 15px; \/* Daha az kenar bo\u015flu\u011fu *\/\n    }\n    h2 {\n        font-size: 1.8em; \/* Ba\u015fl\u0131k boyutunu k\u00fc\u00e7\u00fclt *\/\n        margin-top: 30px;\n    }\n    \/* Tablolar\u0131 mobil cihazlarda daha iyi g\u00f6r\u00fcnt\u00fclemek i\u00e7in *\/\n    table, thead, tbody, th, td, tr {\n        display: block; \/* Her tablo \u00f6\u011fesini blok d\u00fczeyinde g\u00f6ster *\/\n    }\n    thead tr {\n        position: absolute;\n        top: -9999px; \/* Ba\u015fl\u0131k sat\u0131r\u0131n\u0131 gizle *\/\n        left: -9999px;\n    }\n    tr {\n        border: 1px solid #ddd;\n        margin-bottom: 10px; \/* Sat\u0131rlar aras\u0131nda bo\u015fluk b\u0131rak *\/\n    }\n    td {\n        border: none;\n        border-bottom: 1px solid #eee;\n        position: relative;\n        padding-left: 50%; \/* Veri etiketleri i\u00e7in bo\u015fluk *\/\n        text-align: right;\n    }\n    td:before {\n        position: absolute;\n        top: 6px;\n        left: 6px;\n        width: 45%;\n        padding-right: 10px;\n        white-space: nowrap;\n        content: attr(data-label); \/* data-label \u00f6zelli\u011finden ba\u015fl\u0131k al *\/\n        font-weight: bold;\n        text-align: left;\n    }\n    \/* \u00d6rnek: \u0130lk h\u00fccre i\u00e7in data-label de\u011feri *\/\n    td:nth-of-type(1):before { content: \"Faaliyet\"; }\n    \/* ...di\u011fer td:before kurallar\u0131... *\/\n}\n\n@media (max-width: 480px) { \/* Ekran geni\u015fli\u011fi 480px veya daha az oldu\u011funda *\/\n    h2 {\n        font-size: 1.5em;\n    }\n    h3 {\n        font-size: 1.2em;\n    }\n    p, li {\n        font-size: 0.95em; \/* Daha k\u00fc\u00e7\u00fck ekranlarda yaz\u0131 boyutunu biraz daha k\u00fc\u00e7\u00fclt *\/\n    }\n}\n<\/pre>\n<p><\/code><\/p>\n<p>Yukar\u0131daki CSS \u00f6rne\u011finde \u015funlar\u0131 g\u00f6r\u00fcyoruz:<\/p>\n<ol>\n<li><strong>Esnek Metin ve Bo\u015fluklar:<\/strong> Genel <code>body<\/code> stilinde <code>font-family<\/code> ve <code>line-height<\/code> gibi \u00f6zellikler, metnin okunabilirli\u011fini art\u0131r\u0131r. Medya sorgular\u0131yla <code>padding<\/code> ve <code>font-size<\/code> de\u011ferleri ekran boyutuna g\u00f6re ayarlan\u0131r.<\/li>\n<li><strong>G\u00f6rsel Elementlerin \u00d6l\u00e7eklenmesi:<\/strong> <code>img { max-width: 100%; height: auto; }<\/code> kural\u0131, resimlerin kapsay\u0131c\u0131 elementlerinden ta\u015fmamas\u0131n\u0131 ve her zaman duyarl\u0131 olmas\u0131n\u0131 sa\u011flar. Bu sayede, mobil cihazlarda resimler ekran\u0131 bozmadan k\u00fc\u00e7\u00fcl\u00fcr.<\/li>\n<li><strong>Tablo Duyarl\u0131l\u0131\u011f\u0131 (\u00c7ok \u00d6nemli):<\/strong> HTML tablolar\u0131, mobil cihazlarda genellikle yatay kayd\u0131rma \u00e7ubuklar\u0131 olu\u015fturarak kullan\u0131c\u0131 deneyimini bozar. Yukar\u0131daki CSS kodu, tablolar\u0131 mobil cihazlarda s\u00fctunlar halinde de\u011fil, her sat\u0131r\u0131 tek tek \"kart\" benzeri bir yap\u0131da g\u00f6stermek i\u00e7in ak\u0131ll\u0131 bir y\u00f6ntem kullan\u0131r. Her <code>\n<td><\/code> (tablo h\u00fccresi) \u00f6\u011fesi, <code>data-label<\/code> \u00f6zelli\u011fini kullanarak kendi ba\u015fl\u0131\u011f\u0131n\u0131 g\u00f6sterir. Bu, kullan\u0131c\u0131lar\u0131n hala hangi verinin ne anlama geldi\u011fini kolayca anlamas\u0131n\u0131 sa\u011flar.<\/li>\n<li><strong>K\u0131r\u0131lma Noktalar\u0131 (Breakpoints):<\/strong> <code>768px<\/code> ve <code>480px<\/code> gibi de\u011ferler, tasar\u0131m\u0131n farkl\u0131 cihaz t\u00fcrlerine (tablet, k\u00fc\u00e7\u00fck telefonlar) g\u00f6re nas\u0131l de\u011fi\u015fece\u011fini belirleyen k\u0131r\u0131lma noktalar\u0131d\u0131r. Bu noktalarda, d\u00fczen ve tipografi gibi \u00f6\u011feler optimize edilir.<\/li>\n<\/ol>\n<p>A\u00e7g\u00f6zl\u00fc algoritmalar gibi teknik makalelerde, kod bloklar\u0131 ve tablolar s\u0131k\u00e7a kullan\u0131l\u0131r. Bu \u00f6\u011felerin mobil cihazlarda da do\u011fru g\u00f6r\u00fcnt\u00fclenmesi, makalenin okunabilirli\u011fini ve dolay\u0131s\u0131yla etkile\u015fimini do\u011frudan etkiler. Duyarl\u0131 tasar\u0131m prensiplerini uygulamak, i\u00e7eri\u011finizin daha geni\u015f bir kitleye ula\u015fmas\u0131n\u0131 ve profesyonel bir imaj sergilemesini sa\u011flar. Dolay\u0131s\u0131yla, sadece algoritman\u0131n kendisi de\u011fil, onu sunu\u015f \u015fekli de modern web geli\u015ftirme standartlar\u0131na uygun olmal\u0131d\u0131r.<\/p>\n<p>Bu b\u00f6l\u00fcm, makalenin kendi format\u0131na odaklanarak mobil uyumlulu\u011fun \u00f6nemini ve bunun CSS ile nas\u0131l ba\u015far\u0131labilece\u011fini a\u00e7\u0131klad\u0131. Verilen medya sorgular\u0131 ve tablo duyarl\u0131l\u0131\u011f\u0131 \u00f6rnekleri, okuyucuya pratik bilgiler sunuyor. Yakla\u015f\u0131k 500 kelime ile bu b\u00f6l\u00fcm, teknik makale yaz\u0131m\u0131n\u0131n modern gereksinimlerine dikkat \u00e7ekiyor.<\/p>\n<h2>Sonu\u00e7: A\u00e7g\u00f6zl\u00fc D\u00fc\u015f\u00fcnce Tarz\u0131n\u0131 Geli\u015ftirmek<\/h2>\n<p>Bu makale boyunca, a\u00e7g\u00f6zl\u00fc algoritmalar\u0131n temel prensiplerinden, ger\u00e7ek d\u00fcnya uygulamalar\u0131na, LeetCode gibi platformlardaki pratik kullan\u0131mlar\u0131na ve hatta mobil uyumlu bir web sayfas\u0131nda sunulu\u015f bi\u00e7imine kadar geni\u015f bir yelpazeyi ele ald\u0131k. G\u00f6rd\u00fck ki, a\u00e7g\u00f6zl\u00fc algoritmalar, her ad\u0131mda yerel olarak en iyi karar\u0131 vererek k\u00fcresel optimuma ula\u015fmaya \u00e7al\u0131\u015fan, sezgisel ve \u00e7o\u011fu zaman \u015fa\u015f\u0131rt\u0131c\u0131 derecede g\u00fc\u00e7l\u00fc bir problem \u00e7\u00f6zme arac\u0131d\u0131r. Optimal alt yap\u0131 ve a\u00e7g\u00f6zl\u00fc se\u00e7im \u00f6zelli\u011fi gibi kritik konseptleri anlad\u0131\u011f\u0131m\u0131zda, bu algoritmalar\u0131n ne zaman g\u00fcvenilir bir \u00e7\u00f6z\u00fcm sunaca\u011f\u0131n\u0131 belirleyebiliriz.<\/p>\n<p>Faaliyet se\u00e7imi ve \u00e7ak\u0131\u015fmayan aral\u0131klar gibi problemler \u00fczerindeki ad\u0131m ad\u0131m uygulamalar\u0131m\u0131z, teorik bilginin pratik koda nas\u0131l d\u00f6n\u00fc\u015ft\u00fcr\u00fclebilece\u011fini g\u00f6sterdi. Bu t\u00fcr pratikler, sadece algoritmalar\u0131 ezberlemek yerine, \"a\u00e7g\u00f6zl\u00fc d\u00fc\u015f\u00fcnce tarz\u0131n\u0131\" benimsemenize yard\u0131mc\u0131 olur. Bu d\u00fc\u015f\u00fcnce tarz\u0131, bir problemle kar\u015f\u0131la\u015ft\u0131\u011f\u0131n\u0131zda ilk olarak en basit ve en do\u011frudan \u00e7\u00f6z\u00fcm\u00fc aramay\u0131, ard\u0131ndan bu \u00e7\u00f6z\u00fcm\u00fcn s\u0131n\u0131rlamalar\u0131n\u0131 ve varsay\u0131mlar\u0131n\u0131 sorgulamay\u0131 i\u00e7erir. Unutmay\u0131n, her ne kadar g\u00fc\u00e7l\u00fc olsalar da, a\u00e7g\u00f6zl\u00fc algoritmalar\u0131n da kendi tuzaklar\u0131 ve s\u0131n\u0131rlamalar\u0131 vard\u0131r. Madeni para de\u011fi\u015ftirme ve s\u0131rt \u00e7antas\u0131 problemleri gibi durumlarda, a\u00e7g\u00f6zl\u00fc bir yakla\u015f\u0131m\u0131n bizi yan\u0131ltabilece\u011fini ve Dinamik Programlama gibi daha karma\u015f\u0131k y\u00f6ntemlere ba\u015fvurmam\u0131z gerekebilece\u011fini \u00f6\u011frendik.<\/p>\n<p>Sonu\u00e7 olarak, a\u00e7g\u00f6zl\u00fc algoritmalar, bilgisayar bilimleri ve yaz\u0131l\u0131m m\u00fchendisli\u011fi alan\u0131nda her geli\u015ftiricinin ara\u00e7 kutusunda bulunmas\u0131 gereken temel bir beceridir. Onlar\u0131 do\u011fru ba\u011flamda kullanmay\u0131 \u00f6\u011frenmek, daha verimli, okunabilir ve optimize edilmi\u015f \u00e7\u00f6z\u00fcmler \u00fcretmenizi sa\u011flar. Bol bol pratik yaparak, farkl\u0131 problem t\u00fcrlerini deneyimleyerek ve a\u00e7g\u00f6zl\u00fc yakla\u015f\u0131mlar\u0131n do\u011frulu\u011funu sorgulayarak bu yetene\u011finizi s\u00fcrekli geli\u015ftirebilirsiniz. Unutmay\u0131n, iyi bir programc\u0131 sadece algoritmalar\u0131 uygulamaz, ayn\u0131 zamanda hangi algoritman\u0131n ne zaman en uygun oldu\u011funu da bilir.<\/p>\n<h3>S\u0131k\u00e7a Sorulan Sorular (SSS)<\/h3>\n<div class=\"faq-item\">\n<div class=\"faq-question\">1. A\u00e7g\u00f6zl\u00fc algoritmalar her zaman en iyi \u00e7\u00f6z\u00fcm\u00fc verir mi?<\/div>\n<div class=\"faq-answer\">Hay\u0131r, a\u00e7g\u00f6zl\u00fc algoritmalar her zaman en iyi (optimal) \u00e7\u00f6z\u00fcm\u00fc vermez. Sadece \"optimal alt yap\u0131\" ve \"a\u00e7g\u00f6zl\u00fc se\u00e7im \u00f6zelli\u011fi\" ad\u0131 verilen iki temel \u00f6zelli\u011fi ta\u015f\u0131yan problemler i\u00e7in optimal \u00e7\u00f6z\u00fcm\u00fc garanti ederler. Aksi takdirde, yerel olarak en iyi g\u00f6r\u00fcnen se\u00e7imler k\u00fcresel olarak optimal olmayan bir sonuca yol a\u00e7abilir.<\/div>\n<\/div>\n<div class=\"faq-item\">\n<div class=\"faq-question\">2. Bir problemde a\u00e7g\u00f6zl\u00fc algoritma kullan\u0131labilece\u011fini nas\u0131l anlar\u0131m?<\/div>\n<div class=\"faq-answer\">Bir problemde a\u00e7g\u00f6zl\u00fc algoritma kullan\u0131labilece\u011fini anlamak i\u00e7in genellikle iki \u015feye bak\u0131l\u0131r:<\/p>\n<ul>\n<li><strong>Optimal Alt Yap\u0131:<\/strong> Problemin optimal \u00e7\u00f6z\u00fcm\u00fcn\u00fcn, alt problemlerin optimal \u00e7\u00f6z\u00fcmlerinden olu\u015fup olu\u015fmad\u0131\u011f\u0131.<\/li>\n<li><strong>A\u00e7g\u00f6zl\u00fc Se\u00e7im \u00d6zelli\u011fi:<\/strong> Her ad\u0131mda yap\u0131lan yerel olarak en iyi se\u00e7imin, k\u00fcresel optimal \u00e7\u00f6z\u00fcme ula\u015fmada bizi asla engellemedi\u011fi. Bu genellikle, bir se\u00e7imi yapt\u0131ktan sonra geri kalan alt problemin hala orijinal problemle ayn\u0131 t\u00fcrden olmas\u0131 anlam\u0131na gelir. Sezgisel olarak, o anki en cazip se\u00e7imin, gelecekteki f\u0131rsatlar\u0131 \u00e7ok fazla k\u0131s\u0131tlamad\u0131\u011f\u0131n\u0131 hissetmelisiniz.<\/li>\n<\/ul><\/div>\n<\/div>\n<div class=\"faq-item\">\n<div class=\"faq-question\">3. A\u00e7g\u00f6zl\u00fc algoritmalar ile Dinamik Programlama aras\u0131ndaki fark nedir?<\/div>\n<div class=\"faq-answer\">Her iki teknik de optimal alt yap\u0131ya sahip problemler i\u00e7in kullan\u0131l\u0131r, ancak a\u00e7g\u00f6zl\u00fc algoritmalar her ad\u0131mda tek bir yerel en iyi se\u00e7imi yapar ve bu se\u00e7imin sonu\u00e7lar\u0131n\u0131 d\u00fc\u015f\u00fcnmeden ilerler. Dinamik Programlama ise, bir alt problemi \u00e7\u00f6zmek i\u00e7in birden fazla olas\u0131 yol oldu\u011funda, t\u00fcm bu yollar\u0131 de\u011ferlendirir ve en iyi sonucu se\u00e7er. A\u00e7g\u00f6zl\u00fc algoritmalar genellikle daha basittir ve daha h\u0131zl\u0131 \u00e7al\u0131\u015f\u0131r, ancak sadece a\u00e7g\u00f6zl\u00fc se\u00e7im \u00f6zelli\u011fini kar\u015f\u0131layan problemlerde optimaldir. Dinamik Programlama daha geneldir ve a\u00e7g\u00f6zl\u00fc algoritmalar\u0131n ba\u015far\u0131s\u0131z oldu\u011fu bir\u00e7ok durumda optimal \u00e7\u00f6z\u00fcm\u00fc bulabilir, ancak genellikle daha karma\u015f\u0131k ve daha yava\u015f olabilir.<\/div>\n<\/div>\n<div class=\"faq-item\">\n<div class=\"faq-question\">4. LeetCode'da a\u00e7g\u00f6zl\u00fc algoritma problemlerini \u00e7\u00f6zmek i\u00e7in hangi kaynaklar\u0131 \u00f6nerirsiniz?<\/div>\n<div class=\"faq-answer\">LeetCode'daki a\u00e7g\u00f6zl\u00fc algoritmalar b\u00f6l\u00fcm\u00fc, resmi dok\u00fcmantasyonlar ve problem setleri (\u00f6rne\u011fin \"Greedy\" etiketi alt\u0131ndaki problemler) harika ba\u015flang\u0131\u00e7 noktalar\u0131d\u0131r. GeeksforGeeks, HackerRank gibi platformlar da bol miktarda \u00f6rnek ve a\u00e7\u0131klama sunar. Ayr\u0131ca, genel algoritma ders kitaplar\u0131 (\u00f6rn. Cormen, Leiserson, Rivest, Stein'\u0131n \"Introduction to Algorithms\" kitab\u0131) teorik temeli anlamak i\u00e7in \u00e7ok de\u011ferlidir, ancak LeetCode pratikleriyle birle\u015ftirildi\u011finde en b\u00fcy\u00fck fayday\u0131 sa\u011flars\u0131n\u0131z.<\/div>\n<\/div>\n<div class=\"faq-item\">\n<div class=\"faq-question\">5. A\u00e7g\u00f6zl\u00fc bir \u00e7\u00f6z\u00fcm\u00fcn do\u011frulu\u011funu nas\u0131l ispatlar\u0131m?<\/div>\n<div class=\"faq-answer\">A\u00e7g\u00f6zl\u00fc bir \u00e7\u00f6z\u00fcm\u00fcn do\u011frulu\u011funu ispatlamak i\u00e7in en yayg\u0131n y\u00f6ntem \"de\u011fi\u015fim arg\u00fcman\u0131\"d\u0131r. Bu y\u00f6ntemde, \u00f6ncelikle problemin optimal bir \u00e7\u00f6z\u00fcm\u00fcn\u00fcn var oldu\u011funu varsayar\u0131z. Daha sonra, e\u011fer bu optimal \u00e7\u00f6z\u00fcm a\u00e7g\u00f6zl\u00fc bir se\u00e7im i\u00e7ermiyorsa, optimal \u00e7\u00f6z\u00fcm\u00fc k\u00f6t\u00fcle\u015ftirmeden veya hatta daha iyi hale getirmeden, a\u00e7g\u00f6zl\u00fc se\u00e7imi i\u00e7erecek \u015fekilde de\u011fi\u015ftirebilece\u011fimizi g\u00f6steririz. Bu, a\u00e7g\u00f6zl\u00fc se\u00e7imin, her zaman bir optimal \u00e7\u00f6z\u00fcm\u00fcn par\u00e7as\u0131 oldu\u011funu kan\u0131tlar.<\/div>\n<\/div>\n<p><\/body><br \/>\n<\/html><br \/>\n```<\/p>\n","protected":false},"excerpt":{"rendered":"G\u00fcnl\u00fck hayattaki veya yaz\u0131l\u0131m geli\u015ftirmedeki karma\u015f\u0131k problemleri en pratik ve verimli yoldan \u00e7\u00f6zmek ister misiniz? Bu makale, sizi&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-34578","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>DSA Temelleri: A\u00e7g\u00f6zl\u00fc Algoritmalarla LeetCode Ba\u015far\u0131s\u0131<\/title>\n<meta name=\"description\" content=\"G\u00fcnl\u00fck hayattaki veya yaz\u0131l\u0131m geli\u015ftirmedeki karma\u015f\u0131k problemleri en pratik ve verimli yoldan \u00e7\u00f6zmek ister misiniz? Bu makale, sizi a\u00e7g\u00f6zl\u00fc algoritmalar\u0131n temel prensipleriyle tan\u0131\u015ft\u0131racak ve LeetCode pratikleriyle becerilerinizi geli\u015ftirecek.\" \/>\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\/dsa-temelleri-acgozlu-algoritmalarla-leetcode-basarisi\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"DSA Temelleri: A\u00e7g\u00f6zl\u00fc Algoritmalarla LeetCode Ba\u015far\u0131s\u0131\" \/>\n<meta property=\"og:description\" content=\"G\u00fcnl\u00fck hayattaki veya yaz\u0131l\u0131m geli\u015ftirmedeki karma\u015f\u0131k problemleri en pratik ve verimli yoldan \u00e7\u00f6zmek ister misiniz? Bu makale, sizi a\u00e7g\u00f6zl\u00fc algoritmalar\u0131n temel prensipleriyle tan\u0131\u015ft\u0131racak ve LeetCode pratikleriyle becerilerinizi geli\u015ftirecek.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/dsa-temelleri-acgozlu-algoritmalarla-leetcode-basarisi\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-11-19T00:31:20+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=\"32 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/dsa-temelleri-acgozlu-algoritmalarla-leetcode-basarisi\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/dsa-temelleri-acgozlu-algoritmalarla-leetcode-basarisi\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"DSA Temelleri: A\u00e7g\u00f6zl\u00fc Algoritmalarla LeetCode Ba\u015far\u0131s\u0131\",\"datePublished\":\"2025-11-19T00:31:20+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/dsa-temelleri-acgozlu-algoritmalarla-leetcode-basarisi\/\"},\"wordCount\":5636,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/dsa-temelleri-acgozlu-algoritmalarla-leetcode-basarisi\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/dsa-temelleri-acgozlu-algoritmalarla-leetcode-basarisi\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/dsa-temelleri-acgozlu-algoritmalarla-leetcode-basarisi\/\",\"name\":\"DSA Temelleri: A\u00e7g\u00f6zl\u00fc Algoritmalarla LeetCode Ba\u015far\u0131s\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-11-19T00:31:20+00:00\",\"description\":\"G\u00fcnl\u00fck hayattaki veya yaz\u0131l\u0131m geli\u015ftirmedeki karma\u015f\u0131k problemleri en pratik ve verimli yoldan \u00e7\u00f6zmek ister misiniz? Bu makale, sizi a\u00e7g\u00f6zl\u00fc algoritmalar\u0131n temel prensipleriyle tan\u0131\u015ft\u0131racak ve LeetCode pratikleriyle becerilerinizi geli\u015ftirecek.\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/dsa-temelleri-acgozlu-algoritmalarla-leetcode-basarisi\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/dsa-temelleri-acgozlu-algoritmalarla-leetcode-basarisi\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/dsa-temelleri-acgozlu-algoritmalarla-leetcode-basarisi\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"DSA Temelleri: A\u00e7g\u00f6zl\u00fc Algoritmalarla LeetCode Ba\u015far\u0131s\u0131\"}]},{\"@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":"DSA Temelleri: A\u00e7g\u00f6zl\u00fc Algoritmalarla LeetCode Ba\u015far\u0131s\u0131","description":"G\u00fcnl\u00fck hayattaki veya yaz\u0131l\u0131m geli\u015ftirmedeki karma\u015f\u0131k problemleri en pratik ve verimli yoldan \u00e7\u00f6zmek ister misiniz? Bu makale, sizi a\u00e7g\u00f6zl\u00fc algoritmalar\u0131n temel prensipleriyle tan\u0131\u015ft\u0131racak ve LeetCode pratikleriyle becerilerinizi geli\u015ftirecek.","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\/dsa-temelleri-acgozlu-algoritmalarla-leetcode-basarisi\/","og_locale":"tr_TR","og_type":"article","og_title":"DSA Temelleri: A\u00e7g\u00f6zl\u00fc Algoritmalarla LeetCode Ba\u015far\u0131s\u0131","og_description":"G\u00fcnl\u00fck hayattaki veya yaz\u0131l\u0131m geli\u015ftirmedeki karma\u015f\u0131k problemleri en pratik ve verimli yoldan \u00e7\u00f6zmek ister misiniz? Bu makale, sizi a\u00e7g\u00f6zl\u00fc algoritmalar\u0131n temel prensipleriyle tan\u0131\u015ft\u0131racak ve LeetCode pratikleriyle becerilerinizi geli\u015ftirecek.","og_url":"https:\/\/fatihsoysal.com\/blog\/dsa-temelleri-acgozlu-algoritmalarla-leetcode-basarisi\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-11-19T00:31:20+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"32 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/dsa-temelleri-acgozlu-algoritmalarla-leetcode-basarisi\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/dsa-temelleri-acgozlu-algoritmalarla-leetcode-basarisi\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"DSA Temelleri: A\u00e7g\u00f6zl\u00fc Algoritmalarla LeetCode Ba\u015far\u0131s\u0131","datePublished":"2025-11-19T00:31:20+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/dsa-temelleri-acgozlu-algoritmalarla-leetcode-basarisi\/"},"wordCount":5636,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/dsa-temelleri-acgozlu-algoritmalarla-leetcode-basarisi\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/dsa-temelleri-acgozlu-algoritmalarla-leetcode-basarisi\/","url":"https:\/\/fatihsoysal.com\/blog\/dsa-temelleri-acgozlu-algoritmalarla-leetcode-basarisi\/","name":"DSA Temelleri: A\u00e7g\u00f6zl\u00fc Algoritmalarla LeetCode Ba\u015far\u0131s\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-11-19T00:31:20+00:00","description":"G\u00fcnl\u00fck hayattaki veya yaz\u0131l\u0131m geli\u015ftirmedeki karma\u015f\u0131k problemleri en pratik ve verimli yoldan \u00e7\u00f6zmek ister misiniz? Bu makale, sizi a\u00e7g\u00f6zl\u00fc algoritmalar\u0131n temel prensipleriyle tan\u0131\u015ft\u0131racak ve LeetCode pratikleriyle becerilerinizi geli\u015ftirecek.","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/dsa-temelleri-acgozlu-algoritmalarla-leetcode-basarisi\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/dsa-temelleri-acgozlu-algoritmalarla-leetcode-basarisi\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/dsa-temelleri-acgozlu-algoritmalarla-leetcode-basarisi\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"DSA Temelleri: A\u00e7g\u00f6zl\u00fc Algoritmalarla LeetCode Ba\u015far\u0131s\u0131"}]},{"@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\/34578","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=34578"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/34578\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=34578"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=34578"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=34578"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}