<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>Posts on Dinçer Bakkal</title>
		<link>https://www.dincerbakkal.com/posts/</link>
		<description>Recent content in Posts on Dinçer Bakkal</description>
		<generator>Hugo -- gohugo.io</generator>
		<language>en-US</language>
		<copyright>This work is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License.</copyright>
		<lastBuildDate>Thu, 06 Jun 2024 19:12:05 +0300</lastBuildDate>
		<atom:link href="https://www.dincerbakkal.com/posts/index.xml" rel="self" type="application/rss+xml" />
		
		<item>
			<title>NeedCode Soruları</title>
			<link>https://www.dincerbakkal.com/posts/soruneedcode/</link>
			<pubDate>Thu, 06 Jun 2024 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/soruneedcode/</guid>
			<description>needcode Arrays &amp;amp; Hashing  Leetcode 217 Contains Duplicate Leetcode 242 Valid Anagram Leetcode 001 Two Sum Leetcode 049 Group Anagrams Leetcode 347 Top K Frequent Elements Leetcode 271 Encode and Decode Strings Leetcode 238 Product of Array Except Self Leetcode 036 Valid Sudoku Leetcode 128 Longest Consecutive Sequence  needcode Two Pointers  Leetcode 125 Valid Palindrome Leetcode 167 Two Sum II - Input Array Is Sorted Leetcode 015 3Sum Leetcode 011 Container With Most Water Leetcode 42 Trapping Rain Water  needcode Sliding Window  Leetcode 121 Best Time to Buy and Sell Stock Leetcode 003 Longest Substring Without Repeating Characters Leetcode 424 Longest Repeating Character Replacement Leetcode 567 Permutation in String Leetcode 076 Minimum Window Substring Leetcode 239 Sliding Window Maximum  needcode Stack  Leetcode 020 Valid Parentheses Leetcode 155 Min Stack Leetcode 150 Evaluate Reverse Polish Notation Leetcode 022 Generate Parentheses Leetcode 739 Daily Temperatures Leetcode 853 Car Fleet Leetcode 084 Largest Rectangle in Histogram  needcode Binary Search  Leetcode 704 Binary Search Leetcode 074 Search a 2D Matrix Leetcode 875 Koko Eating Bananas Leetcode 153 Find Minimum in Rotated Sorted Array Leetcode 033 Search in Rotated Sorted Array Leetcode 981 Time Based Key-Value Store Leetcode 004 Median of Two Sorted Arrays  needcode Linked List  Leetcode 206 Reverse Linked List Leetcode 021 Merge Two Sorted Lists Leetcode 141 Linked List Cycle Leetcode 143 Reorder List Leetcode 019 Remove Nth Node From End of List Leetcode 138 Copy List with Random Pointer Leetcode 002 Add Two Numbers Leetcode 287 Find the Duplicate Number Leetcode 146 LRU Cache Leetcode 023 Merge k Sorted Lists Leetcode 025 Reverse Nodes in k-Group  needcode Trees  Leetcode 226 Invert Binary Tree Leetcode 104 Maximum Depth of Binary Tree Leetcode 543 Diameter of Binary Tree Leetcode 110 Balanced Binary Tree Leetcode 100 Same Tree Leetcode 572 Subtree of Another Tree Leetcode 235 Lowest Common Ancestor of a Binary Search Tree Leetcode 102 Binary Tree Level Order Traversal Leetcode 199 Binary Tree Right Side View Leetcode 1448 Count Good Nodes in Binary Tree Leetcode 98 Validate Binary Search Tree Leetcode 230 Kth Smallest Element in a BST Leetcode 105 Construct Binary Tree from Preorder and Inorder Traversal Leetcode 124 Binary Tree Maximum Path Sum Leetcode 297 Serialize and Deserialize Binary Tree  </description>
			<content type="html"><![CDATA[<h3 id="needcode-arrays--hashing">needcode Arrays &amp; Hashing</h3>
<ul>
<li><a href="https://www.dincerbakkal.com/posts/leetcode217/">Leetcode 217 Contains Duplicate</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode242/">Leetcode 242 Valid Anagram</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode001/">Leetcode 001 Two Sum</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode001/">Leetcode 049 Group Anagrams</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode347/">Leetcode 347 Top K Frequent Elements</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode347/">Leetcode 271 Encode and Decode Strings</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode238/">Leetcode 238 Product of Array Except Self</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode036/">Leetcode 036 Valid Sudoku</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode128/">Leetcode 128 Longest Consecutive Sequence</a></li>
</ul>
<h3 id="needcode-two-pointers">needcode Two Pointers</h3>
<ul>
<li><a href="https://www.dincerbakkal.com/posts/leetcode125/">Leetcode 125 Valid Palindrome</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode167/">Leetcode 167 Two Sum II - Input Array Is Sorted</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode015/">Leetcode 015 3Sum</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode011/">Leetcode 011 Container With Most Water</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode042/">Leetcode 42 Trapping Rain Water</a></li>
</ul>
<h3 id="needcode-sliding-window">needcode Sliding Window</h3>
<ul>
<li><a href="https://www.dincerbakkal.com/posts/leetcode121/">Leetcode 121 Best Time to Buy and Sell Stock</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode003/">Leetcode 003 Longest Substring Without Repeating Characters</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode424/">Leetcode 424 Longest Repeating Character Replacement</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode567/">Leetcode 567 Permutation in String</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode076/">Leetcode 076 Minimum Window Substring</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode239/">Leetcode 239 Sliding Window Maximum</a></li>
</ul>
<h3 id="needcode-stack">needcode Stack</h3>
<ul>
<li><a href="https://www.dincerbakkal.com/posts/leetcode020/">Leetcode 020 Valid Parentheses</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode155/">Leetcode 155 Min Stack</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode150/">Leetcode 150 Evaluate Reverse Polish Notation</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode022/">Leetcode 022 Generate Parentheses</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode739/">Leetcode 739 Daily Temperatures</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode853/">Leetcode 853 Car Fleet</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode084/">Leetcode 084 Largest Rectangle in Histogram</a></li>
</ul>
<h3 id="needcode-binary-search">needcode Binary Search</h3>
<ul>
<li><a href="https://www.dincerbakkal.com/posts/leetcode704/">Leetcode 704 Binary Search</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode074/">Leetcode 074 Search a 2D Matrix</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode875/">Leetcode 875 Koko Eating Bananas</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode153/">Leetcode 153 Find Minimum in Rotated Sorted Array</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode033/">Leetcode 033 Search in Rotated Sorted Array</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode981/">Leetcode 981 Time Based Key-Value Store</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode004/">Leetcode 004 Median of Two Sorted Arrays</a></li>
</ul>
<h3 id="needcode-linked-list">needcode Linked List</h3>
<ul>
<li><a href="https://www.dincerbakkal.com/posts/leetcode206/">Leetcode 206 Reverse Linked List</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode021/">Leetcode 021 Merge Two Sorted Lists</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode141/">Leetcode 141 Linked List Cycle</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode143/">Leetcode 143 Reorder List</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode019/">Leetcode 019 Remove Nth Node From End of List</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode138/">Leetcode 138 Copy List with Random Pointer</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode002/">Leetcode 002 Add Two Numbers</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode287/">Leetcode 287 Find the Duplicate Number</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode146/">Leetcode 146 LRU Cache</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode023/">Leetcode 023 Merge k Sorted Lists</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode025/">Leetcode 025 Reverse Nodes in k-Group</a></li>
</ul>
<h3 id="needcode-trees">needcode Trees</h3>
<ul>
<li><a href="https://www.dincerbakkal.com/posts/leetcode226/">Leetcode 226 Invert Binary Tree</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode104/">Leetcode 104 Maximum Depth of Binary Tree</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode543/">Leetcode 543 Diameter of Binary Tree</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode110/">Leetcode 110 Balanced Binary Tree</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode100/">Leetcode 100 Same Tree</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode572/">Leetcode 572 Subtree of Another Tree</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode235/">Leetcode 235 Lowest Common Ancestor of a Binary Search Tree</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode102/">Leetcode 102 Binary Tree Level Order Traversal</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode199/">Leetcode 199 Binary Tree Right Side View</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode1448/">Leetcode 1448 Count Good Nodes in Binary Tree</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode098/">Leetcode 98 Validate Binary Search Tree</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode230/">Leetcode 230 Kth Smallest Element in a BST</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode105/">Leetcode 105 Construct Binary Tree from Preorder and Inorder Traversal</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode124/">Leetcode 124 Binary Tree Maximum Path Sum</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode297/">Leetcode 297 Serialize and Deserialize Binary Tree</a></li>
</ul>
]]></content>
		</item>
		
		<item>
			<title>Leetcode Fast and Slow pointers Soruları</title>
			<link>https://www.dincerbakkal.com/posts/sorufastslow/</link>
			<pubDate>Wed, 06 Apr 2022 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/sorufastslow/</guid>
			<description> Leetcode 141 Linked List Cycle Leetcode 876 Middle of the Linked List Leetcode 234 Palindrome Linked List Leetcode 203 Remove Linked List Elements Leetcode 083 Remove Duplicates from Sorted List   Leetcode 142 Linked List Cycle II Leetcode 002 Add Two Numbers Leetcode 019 Remove Nth Node From End of List Leetcode 148 Sort List Leetcode 143 Reorder List  </description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<ul>
<li><a href="https://www.dincerbakkal.com/posts/leetcode141/">Leetcode 141 Linked List Cycle</a></li>
<li>Leetcode 876 Middle of the Linked List</li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode234/">Leetcode 234 Palindrome Linked List</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode203/">Leetcode 203 Remove Linked List Elements</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode083/">Leetcode 083 Remove Duplicates from Sorted List</a></li>
</ul>
<!-- raw HTML omitted -->
<ul>
<li><a href="https://www.dincerbakkal.com/posts/leetcode142/">Leetcode 142 Linked List Cycle II</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode002/">Leetcode 002 Add Two Numbers</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode019/">Leetcode 019 Remove Nth Node From End of List</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode148/">Leetcode 148 Sort List</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode143/">Leetcode 143 Reorder List</a></li>
</ul>
]]></content>
		</item>
		
		<item>
			<title>Leetcode DFS Soruları</title>
			<link>https://www.dincerbakkal.com/posts/sorudfs/</link>
			<pubDate>Tue, 05 Apr 2022 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/sorudfs/</guid>
			<description> Leetcode 111 Minimum Depth of Binary Tree Leetcode 100 Same Tree) Leetcode 112 Path Sum) Leetcode 543 Diameter of Binary Tree) Leetcode 617 Merge Two Binary Trees) Leetcode 104 Maximum Depth of Binary Tree) Leetcode 235 Lowest Common Ancestor of a Binary Search Tree) Leetcode 572 Subtree of Another Tree) Leetcode 226 Invert Binary Tree) Leetcode 110 Balanced Binary Tree Leetcode 257 Binary Tree Paths Leetcode 671 Second Minimum Node In a Binary Tree Leetcode 110 Balanced Binary Tree   Leetcode 133 Clone Graph) Leetcode 417 Pacific Atlantic Water Flow Leetcode 200 Number of Islands Leetcode 261 Graph Valid Tree Leetcode 230 Kth Smallest Element in a BST Leetcode 207 Course Schedule Leetcode 210 Course Schedule II Leetcode 113 Path Sum II Leetcode 437 Path Sum III Leetcode 116 Populating Next Right Pointers in Each Node Leetcode 863 All Nodes Distance K in Binary Tree Leetcode 117 Populating Next Right Pointers in Each Node II Leetcode 654 Maximum Binary Tree Leetcode 105 Construct Binary Tree from Preorder and Inorder Traversal Leetcode 098 Validate Binary Search Tree Leetcode 236 Lowest Common Ancestor of a Binary Tree Leetcode 662 Maximum Width of Binary Tree  </description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<ul>
<li><a href="https://www.dincerbakkal.com/posts/leetcode111/">Leetcode 111 Minimum Depth of Binary Tree</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode100/">Leetcode 100 Same Tree</a>)</li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode112/">Leetcode 112 Path Sum</a>)</li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode543/">Leetcode 543 Diameter of Binary Tree</a>)</li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode617/">Leetcode 617 Merge Two Binary Trees</a>)</li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode104/">Leetcode 104 Maximum Depth of Binary Tree</a>)</li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode235/">Leetcode 235 Lowest Common Ancestor of a Binary Search Tree</a>)</li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode572/">Leetcode 572 Subtree of Another Tree</a>)</li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode226/">Leetcode 226 Invert Binary Tree</a>)</li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode110/">Leetcode 110 Balanced Binary Tree</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode257/">Leetcode 257 Binary Tree Paths</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode671/">Leetcode 671 Second Minimum Node In a Binary Tree</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode110/">Leetcode 110 Balanced Binary Tree</a></li>
</ul>
<!-- raw HTML omitted -->
<ul>
<li><a href="https://www.dincerbakkal.com/posts/leetcode133/">Leetcode 133 Clone Graph</a>)</li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode417/">Leetcode 417 Pacific Atlantic Water Flow</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode200/">Leetcode 200 Number of Islands</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode261/">Leetcode 261 Graph Valid Tree</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode230/">Leetcode 230 Kth Smallest Element in a BST</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode207/">Leetcode 207 Course Schedule</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode210/">Leetcode 210 Course Schedule II</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode113/">Leetcode 113 Path Sum II</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode437/">Leetcode 437 Path Sum III</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode116/">Leetcode 116 Populating Next Right Pointers in Each Node</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode863/">Leetcode 863 All Nodes Distance K in Binary Tree</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode117/">Leetcode 117 Populating Next Right Pointers in Each Node II</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode654/">Leetcode 654 Maximum Binary Tree</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode105/">Leetcode 105 Construct Binary Tree from Preorder and Inorder Traversal</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode098/">Leetcode 098 Validate Binary Search Tree</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode236/">Leetcode 236 Lowest Common Ancestor of a Binary Tree</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode662/">Leetcode 662 Maximum Width of Binary Tree</a></li>
</ul>
]]></content>
		</item>
		
		<item>
			<title>Leetcode BFS Soruları</title>
			<link>https://www.dincerbakkal.com/posts/sorubfs/</link>
			<pubDate>Mon, 04 Apr 2022 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/sorubfs/</guid>
			<description> Leetcode 111 Minimum Depth of Binary Tree Leetcode 637 Average of Levels in Binary Tree)   Leetcode 323 Number of Connected Components inan Undirected Graph Leetcode 102 Binary Tree Level Order Traversal Leetcode 103 Binary Tree Zigzag Level Order Traversal Leetcode 107 Binary Tree Level Order Traversal II Leetcode 199 Binary Tree Right Side View  </description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<ul>
<li><a href="https://www.dincerbakkal.com/posts/leetcode111/">Leetcode 111 Minimum Depth of Binary Tree</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode637/">Leetcode 637 Average of Levels in Binary Tree</a>)</li>
</ul>
<!-- raw HTML omitted -->
<ul>
<li><a href="https://www.dincerbakkal.com/posts/leetcode323/">Leetcode 323 Number of Connected Components inan Undirected Graph</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode102/">Leetcode 102 Binary Tree Level Order Traversal</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode103/">Leetcode 103 Binary Tree Zigzag Level Order Traversal</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode107/">Leetcode 107 Binary Tree Level Order Traversal II</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode199/">Leetcode 199 Binary Tree Right Side View</a></li>
</ul>
]]></content>
		</item>
		
		<item>
			<title>Leetcode Dynamic Programming Soruları</title>
			<link>https://www.dincerbakkal.com/posts/sorudynamic/</link>
			<pubDate>Sun, 03 Apr 2022 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/sorudynamic/</guid>
			<description> Leetcode 070 Climbing Stairs Leetcode 053 Maximum Subarray Leetcode 303 Range Sum Query - Immutable   Leetcode 198 House Robber Leetcode 213 House Robber II Leetcode 322 Coin Change Leetcode 152 Maximum Product Subarray Leetcode 300 Longest Increasing Subsequence Leetcode 005 Longest Palindromic Substring Leetcode 139 Word Break Leetcode 377 Combination Sum IV Leetcode 091 Decode Ways Leetcode 062 Unique Paths Leetcode 055 Jump Game Leetcode 647 Palindromic Substrings Leetcode 673 Number of Longest Increasing Subsequence Leetcode 416 Partition Equal Subset Sum Leetcode 698 Partition to K Equal Sum Subsets Leetcode 309 Best Time to Buy and Sell Stock with Cooldown Leetcode 125 Valid Palindrome Leetcode 509 Fibonacci Number  </description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<ul>
<li><a href="https://www.dincerbakkal.com/posts/leetcode070/">Leetcode 070 Climbing Stairs</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode053/">Leetcode 053 Maximum Subarray</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode303/">Leetcode 303 Range Sum Query - Immutable</a></li>
</ul>
<!-- raw HTML omitted -->
<ul>
<li><a href="https://www.dincerbakkal.com/posts/leetcode198/">Leetcode 198 House Robber</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode213/">Leetcode 213 House Robber II</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode322/">Leetcode 322 Coin Change</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode152/">Leetcode 152 Maximum Product Subarray</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode300/">Leetcode 300 Longest Increasing Subsequence</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode005/">Leetcode 005 Longest Palindromic Substring</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode139/">Leetcode 139 Word Break</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode377/">Leetcode 377 Combination Sum IV</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode091/">Leetcode 091 Decode Ways</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode062/">Leetcode 062 Unique Paths</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode055/">Leetcode 055 Jump Game</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode647/">Leetcode 647 Palindromic Substrings</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode673/">Leetcode 673 Number of Longest Increasing Subsequence</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode416/">Leetcode 416 Partition Equal Subset Sum</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode698/">Leetcode 698 Partition to K Equal Sum Subsets</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode309/">Leetcode 309 Best Time to Buy and Sell Stock with Cooldown</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode125/">Leetcode 125 Valid Palindrome</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode509/">Leetcode 509 Fibonacci Number</a></li>
</ul>
]]></content>
		</item>
		
		<item>
			<title>Leetcode Backtracking Soruları</title>
			<link>https://www.dincerbakkal.com/posts/sorubacktracking/</link>
			<pubDate>Sat, 02 Apr 2022 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/sorubacktracking/</guid>
			<description> Leetcode 079 Word Search Leetcode 784 Letter Case Permutation Leetcode 078 Subsets Leetcode 090 Subsets II Leetcode 046 Permutations Leetcode 047 Permutations II Leetcode 077 Combinations Leetcode 039 Combination Sum Leetcode 040 Combination Sum II Leetcode 216 Combination Sum III Leetcode 022 Generate Parentheses Leetcode 494 Target Sum Leetcode 131 Palindrome Partitioning Leetcode 017 Letter Combinations of a Phone Number Leetcode 320 Generalized Abbreviation  </description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<ul>
<li><a href="https://www.dincerbakkal.com/posts/leetcode079/">Leetcode 079 Word Search</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode784/">Leetcode 784 Letter Case Permutation</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode078/">Leetcode 078 Subsets</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode090/">Leetcode 090 Subsets II</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode046/">Leetcode 046 Permutations</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode047/">Leetcode 047 Permutations II</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode077/">Leetcode 077 Combinations</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode039/">Leetcode 039 Combination Sum</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode040/">Leetcode 040 Combination Sum II</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode216/">Leetcode 216 Combination Sum III</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode022/">Leetcode 022 Generate Parentheses</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode494/">Leetcode 494 Target Sum</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode131/">Leetcode 131 Palindrome Partitioning</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode017/">Leetcode 017 Letter Combinations of a Phone Number</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode320/">Leetcode 320 Generalized Abbreviation</a></li>
</ul>
]]></content>
		</item>
		
		<item>
			<title>Leetcode Arrays Soruları</title>
			<link>https://www.dincerbakkal.com/posts/soruarrays/</link>
			<pubDate>Fri, 01 Apr 2022 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/soruarrays/</guid>
			<description>Kolay  Leetcode 448 Find All Numbers Disappeared in an Array Leetcode 136 Single Number Leetcode 217 Contains Duplicate Leetcode 268 Missing Number Leetcode 001 Two Sum Leetcode 977 Squares of a Sorted Array Leetcode 026 Remove Duplicates from Sorted Array Leetcode 066 Plus One Leetcode 088 Merge Sorted Array Leetcode 118 Pascal&amp;rsquo;s Triangle Leetcode 125 Valid Palindrome Leetcode 167 Two Sum II - Input Array Is Sorted Leetcode 349 Intersection of Two Arrays Leetcode 414 Third Maximum Number Leetcode 724 Find Pivot Index  Orta  Leetcode 238 Product of Array Except Self Leetcode 287 Find the Duplicate Number Leetcode 442 Find All Duplicates in an Array Leetcode 073 Set Matrix Zeroes Leetcode 054 Spiral Matrix Leetcode 048 Rotate Image  needcode Arrays &amp;amp; Hashing  Leetcode 217 Contains Duplicate Leetcode 242 Valid Anagram Leetcode 001 Two Sum Leetcode 049 Group Anagrams Leetcode 347 Top K Frequent Elements  </description>
			<content type="html"><![CDATA[<h3 id="kolay">Kolay</h3>
<ul>
<li><a href="https://www.dincerbakkal.com/posts/leetcode448/">Leetcode 448 Find All Numbers Disappeared in an Array</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode136/">Leetcode 136 Single Number</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode217/">Leetcode 217 Contains Duplicate</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode268/">Leetcode 268 Missing Number</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode001/">Leetcode 001 Two Sum</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode977/">Leetcode 977 Squares of a Sorted Array</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode026/">Leetcode 026 Remove Duplicates from Sorted Array</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode066/">Leetcode 066 Plus One</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode088/">Leetcode 088 Merge Sorted Array</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode118/">Leetcode 118 Pascal&rsquo;s Triangle</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode125/">Leetcode 125 Valid Palindrome</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode167/">Leetcode 167 Two Sum II - Input Array Is Sorted</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode349/">Leetcode 349 Intersection of Two Arrays</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode414/">Leetcode 414 Third Maximum Number</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode724/">Leetcode 724 Find Pivot Index</a></li>
</ul>
<h3 id="orta">Orta</h3>
<ul>
<li><a href="https://www.dincerbakkal.com/posts/leetcode238/">Leetcode 238 Product of Array Except Self</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode287/">Leetcode 287 Find the Duplicate Number</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode442/">Leetcode 442 Find All Duplicates in an Array</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode073/">Leetcode 073 Set Matrix Zeroes</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode054/">Leetcode 054 Spiral Matrix</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode048/">Leetcode 048 Rotate Image</a></li>
</ul>
<h3 id="needcode-arrays--hashing">needcode Arrays &amp; Hashing</h3>
<ul>
<li><a href="https://www.dincerbakkal.com/posts/leetcode217/">Leetcode 217 Contains Duplicate</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode242/">Leetcode 242 Valid Anagram</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode001/">Leetcode 001 Two Sum</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode001/">Leetcode 049 Group Anagrams</a></li>
<li><a href="https://www.dincerbakkal.com/posts/leetcode347/">Leetcode 347 Top K Frequent Elements</a></li>
</ul>
]]></content>
		</item>
		
		<item>
			<title>Leetcode 662 Maximum Width of Binary Tree</title>
			<link>https://www.dincerbakkal.com/posts/leetcode662/</link>
			<pubDate>Sat, 21 Aug 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode662/</guid>
			<description>Given the root of a binary tree, return the maximum width of the given tree.
The maximum width of a tree is the maximum width among all levels.
The width of one level is defined as the length between the end-nodes (the leftmost and rightmost non-null nodes), where the null nodes between the end-nodes are also counted into the length calculation.
It is guaranteed that the answer will in the range of 32-bit signed integer.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>Given the root of a binary tree, return the maximum width of the given tree.</p>
<p>The maximum width of a tree is the maximum width among all levels.</p>
<p>The width of one level is defined as the length between the end-nodes (the leftmost and rightmost non-null nodes), where the null nodes between the end-nodes are also counted into the length calculation.</p>
<p>It is guaranteed that the answer will in the range of 32-bit signed integer.</p>
<!-- raw HTML omitted -->
<pre><code><figure><img src="/image/662ex1.jpg"
         alt="image"/>
</figure>


Input: root = [1,3,2,5,3,null,9]
Output: 4
Explanation: The maximum width existing in the third level with the length 4 (5,3,null,9).
</code></pre><!-- raw HTML omitted -->
<pre><code><figure><img src="/image/662ex2.jpg"
         alt="image"/>
</figure>


Input: root = [1,3,null,5,3]
Output: 2
Explanation: The maximum width existing in the third level with the length 2 (5,3).
</code></pre><!-- raw HTML omitted -->
<figure><img src="/image/662sol1.jpg"
         alt="image"/>
</figure>

<figure><img src="/image/662sol2.jpg"
         alt="image"/>
</figure>

<ul>
<li>Let us assign an id to each node, similar to the index of a heap. root is 1, left child = parent * 2, right child = parent * 2 + 1. Width = id(right most child) – id(left most child) + 1, so far so good.
However, this kind of id system grows exponentially, it overflows even with long type with just 64 levels. To avoid that, we can remap the id with id – id(left most child of each level).</li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="c1"># Definition for a binary tree node.</span>
<span class="c1"># class TreeNode:</span>
<span class="c1">#     def __init__(self, val=0, left=None, right=None):</span>
<span class="c1">#         self.val = val</span>
<span class="c1">#         self.left = left</span>
<span class="c1">#         self.right = right</span>
<span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
  <span class="k">def</span> <span class="nf">widthOfBinaryTree</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">root</span><span class="p">:</span> <span class="n">TreeNode</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
    <span class="n">ids</span> <span class="o">=</span> <span class="p">[]</span>
    <span class="k">def</span> <span class="nf">dfs</span><span class="p">(</span><span class="n">node</span><span class="p">:</span> <span class="n">TreeNode</span><span class="p">,</span> <span class="n">d</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span> <span class="nb">id</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
      <span class="k">if</span> <span class="ow">not</span> <span class="n">node</span><span class="p">:</span> <span class="k">return</span> <span class="mi">0</span>
      <span class="k">if</span> <span class="n">d</span> <span class="o">==</span> <span class="nb">len</span><span class="p">(</span><span class="n">ids</span><span class="p">):</span> <span class="n">ids</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">id</span><span class="p">)</span>
      <span class="k">return</span> <span class="nb">max</span><span class="p">(</span><span class="nb">id</span> <span class="o">-</span> <span class="n">ids</span><span class="p">[</span><span class="n">d</span><span class="p">]</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> 
                 <span class="n">dfs</span><span class="p">(</span><span class="n">node</span><span class="o">.</span><span class="n">left</span><span class="p">,</span> <span class="n">d</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="p">(</span><span class="nb">id</span> <span class="o">-</span> <span class="n">ids</span><span class="p">[</span><span class="n">d</span><span class="p">])</span> <span class="o">*</span> <span class="mi">2</span><span class="p">),</span>
                 <span class="n">dfs</span><span class="p">(</span><span class="n">node</span><span class="o">.</span><span class="n">right</span><span class="p">,</span> <span class="n">d</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="p">(</span><span class="nb">id</span> <span class="o">-</span> <span class="n">ids</span><span class="p">[</span><span class="n">d</span><span class="p">])</span> <span class="o">*</span> <span class="mi">2</span> <span class="o">+</span> <span class="mi">1</span><span class="p">))</span>
    <span class="k">return</span> <span class="n">dfs</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
        
        
        
        
        
               
</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 236 Lowest Common Ancestor of a Binary Tree</title>
			<link>https://www.dincerbakkal.com/posts/leetcode236/</link>
			<pubDate>Fri, 20 Aug 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode236/</guid>
			<description>Given a binary tree, find the lowest common ancestor (LCA) of two given nodes in the tree.
According to the definition of LCA on Wikipedia: “The lowest common ancestor is defined between two nodes p and q as the lowest node in T that has both p and q as descendants (where we allow a node to be a descendant of itself).”
 Input: root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1 Output: 3 Explanation: The LCA of nodes 5 and 1 is 3.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>Given a binary tree, find the lowest common ancestor (LCA) of two given nodes in the tree.</p>
<p>According to the definition of LCA on Wikipedia: “The lowest common ancestor is defined between two nodes p and q as the lowest node in T that has both p and q as descendants (where we allow a node to be a descendant of itself).”</p>
<!-- raw HTML omitted -->
<pre><code><figure><img src="/image/236ex1.png"
         alt="image"/>
</figure>


Input: root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1
Output: 3
Explanation: The LCA of nodes 5 and 1 is 3.
</code></pre><!-- raw HTML omitted -->
<pre><code><figure><img src="/image/236ex1.png"
         alt="image"/>
</figure>


Input: root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 4
Output: 5
Explanation: The LCA of nodes 5 and 4 is 5, since a node can be a descendant of itself according to the LCA definition.
</code></pre><!-- raw HTML omitted -->
<p>-Our approach to this problem is to solve it recursively. In our base case, we return the current node if it is equal to &lsquo;p&rsquo;, &lsquo;q&rsquo;, or null. This way, we will receive falsy values as we recurse down a branch that does not contain either &lsquo;p&rsquo; or &lsquo;q&rsquo;. Therefore, if either the left or right side of the current node returns null, then we know that that side of the tree does not contain the target values, and we can simply check the opposite side. We repeat this process until we arrive at a subtree that contains both target values, at which point we return the root node of the subtree.</p>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="c1"># Definition for a binary tree node.</span>
<span class="c1"># class TreeNode:</span>
<span class="c1">#     def __init__(self, x):</span>
<span class="c1">#         self.val = x</span>
<span class="c1">#         self.left = None</span>
<span class="c1">#         self.right = None</span>

<span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">lowestCommonAncestor</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">root</span><span class="p">:</span> <span class="s1">&#39;TreeNode&#39;</span><span class="p">,</span> <span class="n">p</span><span class="p">:</span> <span class="s1">&#39;TreeNode&#39;</span><span class="p">,</span> <span class="n">q</span><span class="p">:</span> <span class="s1">&#39;TreeNode&#39;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="s1">&#39;TreeNode&#39;</span><span class="p">:</span>
        <span class="s2">&#34;&#34;&#34;
</span><span class="s2">        :type root: TreeNode
</span><span class="s2">        :type p: TreeNode
</span><span class="s2">        :type q: TreeNode
</span><span class="s2">        :rtype: TreeNode
</span><span class="s2">        &#34;&#34;&#34;</span>

        <span class="k">if</span> <span class="ow">not</span> <span class="n">root</span><span class="p">:</span>
            <span class="k">return</span> <span class="n">root</span> 

        <span class="k">if</span> <span class="n">root</span> <span class="o">==</span> <span class="n">p</span> <span class="ow">or</span> <span class="n">root</span> <span class="o">==</span> <span class="n">q</span><span class="p">:</span> 
            <span class="k">return</span> <span class="n">root</span> 

        <span class="n">left</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">lowestCommonAncestor</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">left</span><span class="p">,</span> <span class="n">p</span><span class="p">,</span> <span class="n">q</span><span class="p">)</span>
        <span class="n">right</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">lowestCommonAncestor</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">right</span><span class="p">,</span> <span class="n">p</span><span class="p">,</span> <span class="n">q</span><span class="p">)</span>

        <span class="k">if</span> <span class="n">left</span> <span class="ow">and</span> <span class="n">right</span><span class="p">:</span>
            <span class="k">return</span> <span class="n">root</span>
        <span class="k">else</span><span class="p">:</span>
            <span class="k">return</span> <span class="n">left</span> <span class="ow">or</span> <span class="n">right</span>
        
        
        
        
        
               
</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 208 Implement Trie (Prefix Tree)</title>
			<link>https://www.dincerbakkal.com/posts/leetcode208/</link>
			<pubDate>Wed, 18 Aug 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode208/</guid>
			<description>A trie (pronounced as &amp;ldquo;try&amp;rdquo;) or prefix tree is a tree data structure used to efficiently store and retrieve keys in a dataset of strings. There are various applications of this data structure, such as autocomplete and spellchecker.
Implement the Trie class:
 Trie() Initializes the trie object. void insert(String word) Inserts the string word into the trie. boolean search(String word) Returns true if the string word is in the trie (i.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>A trie (pronounced as &ldquo;try&rdquo;) or prefix tree is a tree data structure used to efficiently store and retrieve keys in a dataset of strings. There are various applications of this data structure, such as autocomplete and spellchecker.</p>
<p>Implement the Trie class:</p>
<ul>
<li>Trie() Initializes the trie object.</li>
<li>void insert(String word) Inserts the string word into the trie.</li>
<li>boolean search(String word) Returns true if the string word is in the trie (i.e., was inserted before), and false otherwise.</li>
<li>boolean startsWith(String prefix) Returns true if there is a previously inserted string word that has the prefix prefix, and false otherwise.</li>
</ul>
<!-- raw HTML omitted -->
<pre><code>Input
[&quot;Trie&quot;, &quot;insert&quot;, &quot;search&quot;, &quot;search&quot;, &quot;startsWith&quot;, &quot;insert&quot;, &quot;search&quot;]
[[], [&quot;apple&quot;], [&quot;apple&quot;], [&quot;app&quot;], [&quot;app&quot;], [&quot;app&quot;], [&quot;app&quot;]]
Output
[null, null, true, false, true, null, true]

Explanation
Trie trie = new Trie();
trie.insert(&quot;apple&quot;);
trie.search(&quot;apple&quot;);   // return True
trie.search(&quot;app&quot;);     // return False
trie.startsWith(&quot;app&quot;); // return True
trie.insert(&quot;app&quot;);
trie.search(&quot;app&quot;);     // return True
</code></pre><!-- raw HTML omitted -->
<ul>
<li></li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">class</span> <span class="nc">TrieNode</span><span class="p">:</span>

    <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">children</span> <span class="o">=</span> <span class="p">{}</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">endOfWord</span> <span class="o">=</span> <span class="kc">False</span>




<span class="k">class</span> <span class="nc">Trie</span><span class="p">:</span>

    <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">root</span> <span class="o">=</span> <span class="n">TrieNode</span><span class="p">()</span>
        

    <span class="k">def</span> <span class="nf">insert</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">word</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
        <span class="n">cur</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">root</span>
        <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="n">word</span><span class="p">:</span>
            <span class="k">if</span> <span class="n">c</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">cur</span><span class="o">.</span><span class="n">children</span><span class="p">:</span>
                <span class="n">cur</span><span class="o">.</span><span class="n">children</span><span class="p">[</span><span class="n">c</span><span class="p">]</span> <span class="o">=</span> <span class="n">TrieNode</span><span class="p">()</span>
            <span class="n">cur</span> <span class="o">=</span> <span class="n">cur</span><span class="o">.</span><span class="n">children</span><span class="p">[</span><span class="n">c</span><span class="p">]</span>
        <span class="n">cur</span><span class="o">.</span><span class="n">endOfWord</span> <span class="o">=</span> <span class="kc">True</span>

    <span class="k">def</span> <span class="nf">search</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">word</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
        <span class="n">cur</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">root</span>
        <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="n">word</span><span class="p">:</span>
            <span class="k">if</span> <span class="n">c</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">cur</span><span class="o">.</span><span class="n">children</span><span class="p">:</span>
                <span class="k">return</span> <span class="kc">False</span>
            <span class="n">cur</span> <span class="o">=</span> <span class="n">cur</span><span class="o">.</span><span class="n">children</span><span class="p">[</span><span class="n">c</span><span class="p">]</span>
        <span class="k">return</span> <span class="n">cur</span><span class="o">.</span><span class="n">endOfWord</span>
        

    <span class="k">def</span> <span class="nf">startsWith</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">prefix</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
        <span class="n">cur</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">root</span>
        
        <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="n">prefix</span><span class="p">:</span>
            <span class="k">if</span> <span class="n">c</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">cur</span><span class="o">.</span><span class="n">children</span><span class="p">:</span>
                <span class="k">return</span> <span class="kc">False</span>
            <span class="n">cur</span> <span class="o">=</span> <span class="n">cur</span><span class="o">.</span><span class="n">children</span><span class="p">[</span><span class="n">c</span><span class="p">]</span>
        <span class="k">return</span> <span class="kc">True</span>
        


<span class="c1"># Your Trie object will be instantiated and called as such:</span>
<span class="c1"># obj = Trie()</span>
<span class="c1"># obj.insert(word)</span>
<span class="c1"># param_2 = obj.search(word)</span>
<span class="c1"># param_3 = obj.startsWith(prefix)</span>
        
        
        
        
        
               
</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 98 Validate Binary Search Tree</title>
			<link>https://www.dincerbakkal.com/posts/leetcode098/</link>
			<pubDate>Tue, 17 Aug 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode098/</guid>
			<description>Soru Given the root of a binary tree, determine if it is a valid binary search tree (BST).
A valid BST is defined as follows:
 The left subtree of a node contains only nodes with keys less than the node&amp;rsquo;s key. The right subtree of a node contains only nodes with keys greater than the node&amp;rsquo;s key. Both the left and right subtrees must also be binary search trees.  Örnek 1  Input: root = [2,1,3] Output: true Örnek 2  Input: root = [5,1,4,null,null,3,6] Output: false Explanation: The root node&#39;s value is 5 but its right child&#39;s value is 4.</description>
			<content type="html"><![CDATA[<h3 id="soru">Soru</h3>
<p>Given the root of a binary tree, determine if it is a valid binary search tree (BST).</p>
<p>A valid BST is defined as follows:</p>
<ul>
<li>The left subtree of a node contains only nodes with keys less than the node&rsquo;s key.</li>
<li>The right subtree of a node contains only nodes with keys greater than the node&rsquo;s key.</li>
<li>Both the left and right subtrees must also be binary search trees.</li>
</ul>
<h3 id="örnek-1">Örnek 1</h3>
<pre><code><figure><img src="/image/098EX1.jpg"
         alt="image"/>
</figure>


Input: root = [2,1,3]
Output: true
</code></pre><h3 id="örnek-2">Örnek 2</h3>
<pre><code><figure><img src="/image/098EX2.jpg"
         alt="image"/>
</figure>


Input: root = [5,1,4,null,null,3,6]
Output: false
Explanation: The root node's value is 5 but its right child's value is 4.
</code></pre><h3 id="çözüm">Çözüm</h3>
<ul>
<li>Bir binary tree (ikili ağaç) veriliyor, bu ağacın geçerli bir Binary Search Tree (BST) olup olmadığını kontrol edeceğiz.</li>
<li>BST Nedir?Her bir node (düğüm) için:</li>
<li>Sol alt ağaçtaki tüm değerler: node.val&rsquo;den küçük olmalı</li>
<li>Sağ alt ağaçtaki tüm değerler: node.val&rsquo;den büyük olmalı</li>
<li>Bu kural tüm alt ağaçlar için geçerli olmalı, sadece direkt çocuklar için değil.</li>
<li>inorder Traversal ile BST Kontrolü</li>
<li>Eğer bir ağaç geçerli bir BST ise, inorder traversal sonucu artan sırada olur.</li>
<li>Yani:Sol alt ağaç → Kök → Sağ alt ağaç şeklinde gezeriz.</li>
<li>Her adımda bir önceki düğümün değerini saklarız (prev).</li>
<li>Eğer şu anki düğümün değeri prev&rsquo;den küçük veya eşit olursa, kural bozulmuştur → Geçerli BST değildir.</li>
<li>Neden Inorder Traversal Kullanılır?BST&rsquo;lerde inorder traversal sonucu sıralı olur.</li>
<li>Bu yüzden tek bir değişken (prev) ile kontrol etmek mümkündür.</li>
<li>Fazladan veri yapısı kullanmadan, çok sade bir şekilde kontrol yapılır.</li>
</ul>
<h2 id="code">Code</h2>
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">isValidBST</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">root</span><span class="p">):</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">prev</span> <span class="o">=</span> <span class="kc">None</span>  <span class="c1"># Önceki düğüm değerini saklamak için</span>
        
        <span class="k">def</span> <span class="nf">inorder</span><span class="p">(</span><span class="n">node</span><span class="p">):</span>
            <span class="k">if</span> <span class="ow">not</span> <span class="n">node</span><span class="p">:</span>
                <span class="k">return</span> <span class="kc">True</span>
            
            <span class="c1"># 1. Sol alt ağacı kontrol et</span>
            <span class="k">if</span> <span class="ow">not</span> <span class="n">inorder</span><span class="p">(</span><span class="n">node</span><span class="o">.</span><span class="n">left</span><span class="p">):</span>
                <span class="k">return</span> <span class="kc">False</span>
            
            <span class="c1"># 2. Şu anki düğüm BST kuralını bozuyor mu?</span>
            <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">prev</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="ow">and</span> <span class="n">node</span><span class="o">.</span><span class="n">val</span> <span class="o">&lt;=</span> <span class="bp">self</span><span class="o">.</span><span class="n">prev</span><span class="p">:</span>
                <span class="k">return</span> <span class="kc">False</span>  <span class="c1"># Sıra bozuldu: geçerli BST değil</span>
            <span class="bp">self</span><span class="o">.</span><span class="n">prev</span> <span class="o">=</span> <span class="n">node</span><span class="o">.</span><span class="n">val</span>  <span class="c1"># Güncel değeri sakla</span>
            
            <span class="c1"># 3. Sağ alt ağacı kontrol et</span>
            <span class="k">return</span> <span class="n">inorder</span><span class="p">(</span><span class="n">node</span><span class="o">.</span><span class="n">right</span><span class="p">)</span>
        
        <span class="k">return</span> <span class="n">inorder</span><span class="p">(</span><span class="n">root</span><span class="p">)</span>

               
</code></pre></div><h3 id="complexity">Complexity</h3>
<ul>
<li>Time complexity (Zaman Karmaşıklığı): O(N) → Her düğüm bir kez ziyaret edilir</li>
<li>Space complexity (Alan Karmaşıklığı): O(H) → H = ağacın yüksekliği (recursive stack)</li>
</ul>
]]></content>
		</item>
		
		<item>
			<title>Leetcode 105 Construct Binary Tree from Preorder and Inorder Traversal</title>
			<link>https://www.dincerbakkal.com/posts/leetcode105/</link>
			<pubDate>Mon, 16 Aug 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode105/</guid>
			<description>Soru Given two integer arrays preorder and inorder where preorder is the preorder traversal of a binary tree and inorder is the inorder traversal of the same tree, construct and return the binary tree.
Örnek 1  Input: preorder = [3,9,20,15,7], inorder = [9,3,15,20,7] Output: [3,9,20,null,null,15,7] Örnek 2 Input: preorder = [-1], inorder = [-1] Output: [-1] Çözüm  Bu soruda, preorder ve inorder dizileri verilmiş, ve bu iki traversala göre binary tree&amp;rsquo;yi yeniden oluşturmamız isteniyor.</description>
			<content type="html"><![CDATA[<h3 id="soru">Soru</h3>
<p>Given two integer arrays preorder and inorder where preorder is the preorder traversal of a binary tree and inorder is the inorder traversal of the same tree, construct and return the binary tree.</p>
<h3 id="örnek-1">Örnek 1</h3>
<pre><code><figure><img src="/image/105EX1.jpg"
         alt="image"/>
</figure>


Input: preorder = [3,9,20,15,7], inorder = [9,3,15,20,7]
Output: [3,9,20,null,null,15,7]
</code></pre><h3 id="örnek-2">Örnek 2</h3>
<pre><code>Input: preorder = [-1], inorder = [-1]
Output: [-1]
</code></pre><h3 id="çözüm">Çözüm</h3>
<ul>
<li>Bu soruda, preorder ve inorder dizileri verilmiş, ve bu iki traversala göre binary tree&rsquo;yi yeniden oluşturmamız isteniyor.</li>
<li>Binary Tree Traversal Özellikleri:</li>
<li>Preorder (Root - Left - Right): İlk eleman her zaman root’tur.</li>
<li>Inorder (Left - Root - Right): Root&rsquo;un solundakiler sol subtree, sağındakiler sağ subtree’dir.</li>
<li>Preorder&rsquo;daki ilk elemanı root olarak al.</li>
<li>Bu root elemanını inorder’da bul ve konumuna göre sol ve sağ alt ağaçları ayır.</li>
<li>Aynı işlemi recursive olarak sol ve sağ taraflar için uygula.</li>
</ul>
<h2 id="code">Code</h2>
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">buildTree</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">preorder</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">],</span> <span class="n">inorder</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">Optional</span><span class="p">[</span><span class="n">TreeNode</span><span class="p">]:</span>
        <span class="k">if</span> <span class="ow">not</span> <span class="n">preorder</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">inorder</span><span class="p">:</span>
            <span class="k">return</span> <span class="kc">None</span>

        <span class="c1"># Root node preorder&#39;ın ilk elemanı</span>
        <span class="n">root_val</span> <span class="o">=</span> <span class="n">preorder</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
        <span class="n">root</span> <span class="o">=</span> <span class="n">TreeNode</span><span class="p">(</span><span class="n">root_val</span><span class="p">)</span>

        <span class="c1"># Root&#39;un inorder&#39;daki index&#39;ini bul</span>
        <span class="n">mid</span> <span class="o">=</span> <span class="n">inorder</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="n">root_val</span><span class="p">)</span>

        <span class="c1"># Sol ve sağ subtree&#39;leri recursive olarak kur</span>
        <span class="n">root</span><span class="o">.</span><span class="n">left</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">buildTree</span><span class="p">(</span><span class="n">preorder</span><span class="p">[</span><span class="mi">1</span><span class="p">:</span><span class="mi">1</span> <span class="o">+</span> <span class="n">mid</span><span class="p">],</span> <span class="n">inorder</span><span class="p">[:</span><span class="n">mid</span><span class="p">])</span>
        <span class="n">root</span><span class="o">.</span><span class="n">right</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">buildTree</span><span class="p">(</span><span class="n">preorder</span><span class="p">[</span><span class="mi">1</span> <span class="o">+</span> <span class="n">mid</span><span class="p">:],</span> <span class="n">inorder</span><span class="p">[</span><span class="n">mid</span> <span class="o">+</span> <span class="mi">1</span><span class="p">:])</span>

        <span class="k">return</span> <span class="n">root</span>

                
</code></pre></div><h3 id="complexity">Complexity</h3>
<ul>
<li>Optimize Edilmiş Versiyon (O(n) zaman)</li>
<li>inorder dizisindeki indeksleri bir hashmap ile önceden kaydedersen, her root&rsquo;un index&rsquo;ini O(1) sürede bulabilirsin:</li>
</ul>
<h2 id="code-1">Code</h2>
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">buildTree</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">preorder</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">],</span> <span class="n">inorder</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">Optional</span><span class="p">[</span><span class="n">TreeNode</span><span class="p">]:</span>
        <span class="n">inorder_index_map</span> <span class="o">=</span> <span class="p">{</span><span class="n">val</span><span class="p">:</span> <span class="n">idx</span> <span class="k">for</span> <span class="n">idx</span><span class="p">,</span> <span class="n">val</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">inorder</span><span class="p">)}</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">preorder_index</span> <span class="o">=</span> <span class="mi">0</span>

        <span class="k">def</span> <span class="nf">helper</span><span class="p">(</span><span class="n">left</span><span class="p">,</span> <span class="n">right</span><span class="p">):</span>
            <span class="k">if</span> <span class="n">left</span> <span class="o">&gt;</span> <span class="n">right</span><span class="p">:</span>
                <span class="k">return</span> <span class="kc">None</span>

            <span class="n">root_val</span> <span class="o">=</span> <span class="n">preorder</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">preorder_index</span><span class="p">]</span>
            <span class="bp">self</span><span class="o">.</span><span class="n">preorder_index</span> <span class="o">+=</span> <span class="mi">1</span>

            <span class="n">root</span> <span class="o">=</span> <span class="n">TreeNode</span><span class="p">(</span><span class="n">root_val</span><span class="p">)</span>
            <span class="n">index</span> <span class="o">=</span> <span class="n">inorder_index_map</span><span class="p">[</span><span class="n">root_val</span><span class="p">]</span>

            <span class="n">root</span><span class="o">.</span><span class="n">left</span> <span class="o">=</span> <span class="n">helper</span><span class="p">(</span><span class="n">left</span><span class="p">,</span> <span class="n">index</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
            <span class="n">root</span><span class="o">.</span><span class="n">right</span> <span class="o">=</span> <span class="n">helper</span><span class="p">(</span><span class="n">index</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="n">right</span><span class="p">)</span>

            <span class="k">return</span> <span class="n">root</span>

        <span class="k">return</span> <span class="n">helper</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">inorder</span><span class="p">)</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>


                
</code></pre></div><h3 id="complexity-1">Complexity</h3>
<ul>
<li>Time complexity (Zaman Karmaşıklığı) :O(n²) O(n²) çünkü inorder.index() her seferinde O(n) zaman alır, toplamda n kez çağrılır.</li>
<li>Space complexity (Alan Karmaşıklığı) :O(n)</li>
</ul>
]]></content>
		</item>
		
		<item>
			<title>Leetcode 124 Binary Tree Maximum Path Sum</title>
			<link>https://www.dincerbakkal.com/posts/leetcode124/</link>
			<pubDate>Mon, 16 Aug 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode124/</guid>
			<description>Soru A path in a binary tree is a sequence of nodes where each pair of adjacent nodes in the sequence has an edge connecting them. A node can only appear in the sequence at most once. Note that the path does not need to pass through the root.
The path sum of a path is the sum of the node&amp;rsquo;s values in the path.
Given the root of a binary tree, return the maximum path sum of any non-empty path.</description>
			<content type="html"><![CDATA[<h3 id="soru">Soru</h3>
<p>A path in a binary tree is a sequence of nodes where each pair of adjacent nodes in the sequence has an edge connecting them. A node can only appear in the sequence at most once. Note that the path does not need to pass through the root.</p>
<p>The path sum of a path is the sum of the node&rsquo;s values in the path.</p>
<p>Given the root of a binary tree, return the maximum path sum of any non-empty path.</p>
<h3 id="örnek-1">Örnek 1</h3>
<pre><code><figure><img src="/image/124EX1.jpg"
         alt="image"/>
</figure>


Input: root = [1,2,3]
Output: 6
Explanation: The optimal path is 2 -&gt; 1 -&gt; 3 with a path sum of 2 + 1 + 3 = 6.
</code></pre><h3 id="örnek-2">Örnek 2</h3>
<pre><code><figure><img src="/image/124EX2.jpg"
         alt="image"/>
</figure>


Input: root = [-10,9,20,null,null,15,7]
Output: 42
Explanation: The optimal path is 15 -&gt; 20 -&gt; 7 with a path sum of 15 + 20 + 7 = 42.
</code></pre><h3 id="çözüm">Çözüm</h3>
<ul>
<li>Bir binary tree veriliyor ve bu ağaçtaki herhangi bir başlangıç ve bitiş düğümü arasında giden bir path’in toplam değeri isteniyor. Bu path, bir node’dan aşağı veya yukarı doğru gidebilir ama bir node&rsquo;u sadece bir kez içerebilir.</li>
<li>Path’in root’tan başlaması gerekmez.</li>
<li>Çözüm Stratejisi:</li>
<li>Her node&rsquo;da:Sol alt ağaçtan ve sağ alt ağaçtan gelen maksimum path sum’u al.</li>
<li>Bu node’u içeren toplam yolu: left + node.val + right şeklinde düşün.</li>
<li>Ama üst node&rsquo;a dönerken ya sola ya sağa devam edebilirsin. Yani sadece node.val + max(left, right) dönülür.</li>
<li>Her adımda global maksimumu güncelle.</li>
</ul>
<h2 id="code">Code</h2>
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">maxPathSum</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">root</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">TreeNode</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">max_sum</span> <span class="o">=</span> <span class="nb">float</span><span class="p">(</span><span class="s1">&#39;-inf&#39;</span><span class="p">)</span>

        <span class="k">def</span> <span class="nf">dfs</span><span class="p">(</span><span class="n">node</span><span class="p">):</span>
            <span class="k">if</span> <span class="ow">not</span> <span class="n">node</span><span class="p">:</span>
                <span class="k">return</span> <span class="mi">0</span>

            <span class="c1"># Negatif katkı yapan path&#39;leri yok say</span>
            <span class="n">left</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="n">dfs</span><span class="p">(</span><span class="n">node</span><span class="o">.</span><span class="n">left</span><span class="p">),</span> <span class="mi">0</span><span class="p">)</span>
            <span class="n">right</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="n">dfs</span><span class="p">(</span><span class="n">node</span><span class="o">.</span><span class="n">right</span><span class="p">),</span> <span class="mi">0</span><span class="p">)</span>

            <span class="c1"># Şu anki node&#39;dan geçen en iyi yol</span>
            <span class="n">current_max</span> <span class="o">=</span> <span class="n">node</span><span class="o">.</span><span class="n">val</span> <span class="o">+</span> <span class="n">left</span> <span class="o">+</span> <span class="n">right</span>

            <span class="c1"># Global max&#39;ı güncelle</span>
            <span class="bp">self</span><span class="o">.</span><span class="n">max_sum</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">max_sum</span><span class="p">,</span> <span class="n">current_max</span><span class="p">)</span>

            <span class="c1"># Parent&#39;a dönecek path (sadece bir yön seçilebilir)</span>
            <span class="k">return</span> <span class="n">node</span><span class="o">.</span><span class="n">val</span> <span class="o">+</span> <span class="nb">max</span><span class="p">(</span><span class="n">left</span><span class="p">,</span> <span class="n">right</span><span class="p">)</span>

        <span class="n">dfs</span><span class="p">(</span><span class="n">root</span><span class="p">)</span>
        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">max_sum</span>


                
</code></pre></div><h3 id="complexity">Complexity</h3>
<ul>
<li>Time complexity (Zaman Karmaşıklığı) :O(n)</li>
<li>Space complexity (Alan Karmaşıklığı) :O(h) (h: ağacın yüksekliği)</li>
</ul>
]]></content>
		</item>
		
		<item>
			<title>Leetcode 297 Serialize and Deserialize Binary Tree</title>
			<link>https://www.dincerbakkal.com/posts/leetcode297/</link>
			<pubDate>Mon, 16 Aug 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode297/</guid>
			<description>Soru Serialization is the process of converting a data structure or object into a sequence of bits so that it can be stored in a file or memory buffer, or transmitted across a network connection link to be reconstructed later in the same or another computer environment.
Design an algorithm to serialize and deserialize a binary tree. There is no restriction on how your serialization/deserialization algorithm should work. You just need to ensure that a binary tree can be serialized to a string and this string can be deserialized to the original tree structure.</description>
			<content type="html"><![CDATA[<h3 id="soru">Soru</h3>
<p>Serialization is the process of converting a data structure or object into a sequence of bits so that it can be stored in a file or memory buffer, or transmitted across a network connection link to be reconstructed later in the same or another computer environment.</p>
<p>Design an algorithm to serialize and deserialize a binary tree. There is no restriction on how your serialization/deserialization algorithm should work. You just need to ensure that a binary tree can be serialized to a string and this string can be deserialized to the original tree structure.</p>
<p>Clarification: The input/output format is the same as how LeetCode serializes a binary tree. You do not necessarily need to follow this format, so please be creative and come up with different approaches yourself.</p>
<h3 id="örnek-1">Örnek 1</h3>
<pre><code><figure><img src="/image/124EX1.jpg"
         alt="image"/>
</figure>


Input: root = [1,2,3,null,null,4,5]
Output: [1,2,3,null,null,4,5]
</code></pre><h3 id="örnek-2">Örnek 2</h3>
<pre><code>
Input: root = []
Output: []
</code></pre><h3 id="çözüm">Çözüm</h3>
<ul>
<li>Bir binary tree&rsquo;yi string&rsquo;e çeviren (serialize) ve bu string&rsquo;den tekrar aynı binary tree&rsquo;yi oluşturan (deserialize) iki fonksiyonu implement etmen isteniyor.</li>
<li>Tree yapısını koruyarak, kayıpsız bir şekilde bu dönüşümleri yapmak gerekiyor.</li>
<li>Örneğin, ağaçtaki null değerler (yani çocukları olmayan dallar) da string temsilinde yer almalı.</li>
</ul>
<h2 id="code">Code</h2>
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">class</span> <span class="nc">Codec</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">serialize</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">root</span><span class="p">):</span>
        <span class="k">if</span> <span class="ow">not</span> <span class="n">root</span><span class="p">:</span>
            <span class="k">return</span> <span class="s2">&#34;&#34;</span>
        <span class="c1">#Eğer ağacımız boşsa (yani root yoksa), boş bir string döndürürüz.</span>
        <span class="n">res</span> <span class="o">=</span> <span class="p">[]</span>
        <span class="n">queue</span> <span class="o">=</span> <span class="n">deque</span><span class="p">([</span><span class="n">root</span><span class="p">])</span>
        <span class="c1">#Sonuçları tutmak için res listesi, BFS yapmak için de queue (bir deque) başlatıyoruz.</span>
        <span class="k">while</span> <span class="n">queue</span><span class="p">:</span>
            <span class="n">node</span> <span class="o">=</span> <span class="n">queue</span><span class="o">.</span><span class="n">popleft</span><span class="p">()</span>
            <span class="k">if</span> <span class="n">node</span><span class="p">:</span>
                <span class="n">res</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">node</span><span class="o">.</span><span class="n">val</span><span class="p">))</span>
                <span class="n">queue</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">node</span><span class="o">.</span><span class="n">left</span><span class="p">)</span>
                <span class="n">queue</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">node</span><span class="o">.</span><span class="n">right</span><span class="p">)</span>
            <span class="k">else</span><span class="p">:</span>
                <span class="n">res</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&#34;null&#34;</span><span class="p">)</span>

        <span class="c1">#Kuyruktan bir düğüm alıyoruz.</span>
        <span class="c1">#Eğer düğüm varsa:</span>
        <span class="c1">#Değerini listeye ekliyoruz.</span>
        <span class="c1">#Sol ve sağ çocuklarını kuyruğa ekliyoruz.</span>
        <span class="c1">#Eğer düğüm None ise &#34;null&#34; olarak işaretliyoruz.</span>
        <span class="c1">#Bu şekilde tüm ağaç katman katman (level by level) taranıyor.</span>

        <span class="k">return</span> <span class="s2">&#34;,&#34;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">res</span><span class="p">)</span>
        <span class="c1">#Son olarak, listeyi virgülle birleştirerek string&#39;e çeviriyoruz.</span>

    <span class="k">def</span> <span class="nf">deserialize</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span>
        <span class="k">if</span> <span class="ow">not</span> <span class="n">data</span><span class="p">:</span>
            <span class="k">return</span> <span class="kc">None</span>
        <span class="c1">#Eğer data boşsa, ağacımız da boştur, direkt None döneriz.</span>

        <span class="n">nodes</span> <span class="o">=</span> <span class="n">data</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&#34;,&#34;</span><span class="p">)</span>
        <span class="n">root</span> <span class="o">=</span> <span class="n">TreeNode</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">nodes</span><span class="p">[</span><span class="mi">0</span><span class="p">]))</span>
        <span class="n">queue</span> <span class="o">=</span> <span class="n">deque</span><span class="p">([</span><span class="n">root</span><span class="p">])</span>
        <span class="n">i</span> <span class="o">=</span> <span class="mi">1</span>

        <span class="c1">#data string’ini ayırıp bir listeye çeviriyoruz.</span>
        <span class="c1">#İlk değer kök düğümdür.</span>
        <span class="c1">#BFS yapmak için bir kuyruk başlatıyoruz.</span>
        <span class="c1">#i pointer’ı, nodes listesinde ilerlemeyi sağlar.</span>
        
        <span class="k">while</span> <span class="n">queue</span><span class="p">:</span>
            <span class="n">node</span> <span class="o">=</span> <span class="n">queue</span><span class="o">.</span><span class="n">popleft</span><span class="p">()</span>
            <span class="k">if</span> <span class="n">nodes</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">!=</span> <span class="s2">&#34;null&#34;</span><span class="p">:</span>
                <span class="n">node</span><span class="o">.</span><span class="n">left</span> <span class="o">=</span> <span class="n">TreeNode</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">nodes</span><span class="p">[</span><span class="n">i</span><span class="p">]))</span>
                <span class="n">queue</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">node</span><span class="o">.</span><span class="n">left</span><span class="p">)</span>
            <span class="n">i</span> <span class="o">+=</span> <span class="mi">1</span>

            <span class="k">if</span> <span class="n">nodes</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">!=</span> <span class="s2">&#34;null&#34;</span><span class="p">:</span>
                <span class="n">node</span><span class="o">.</span><span class="n">right</span> <span class="o">=</span> <span class="n">TreeNode</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">nodes</span><span class="p">[</span><span class="n">i</span><span class="p">]))</span>
                <span class="n">queue</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">node</span><span class="o">.</span><span class="n">right</span><span class="p">)</span>
            <span class="n">i</span> <span class="o">+=</span> <span class="mi">1</span>
        
        <span class="c1">#Kuyruktan bir düğüm alıp, sol ve sağ çocuklarını oluşturuyoruz (eğer &#34;null&#34; değilse).</span>
        <span class="c1">#Her oluşturulan çocuğu tekrar kuyruğa ekliyoruz ki onun da alt çocuklarını kurabilelim.</span>

        <span class="k">return</span> <span class="n">root</span>


                
</code></pre></div><h3 id="complexity">Complexity</h3>
<ul>
<li>Time complexity (Zaman Karmaşıklığı) :
<ul>
<li>Serialize (Time)	O(n)</li>
<li>Deserialize (Time)	O(n)</li>
</ul>
</li>
<li>Space complexity (Alan Karmaşıklığı) :
<ul>
<li>Serialize (Space)	O(n)</li>
<li>Deserialize (Space)	O(n)</li>
</ul>
</li>
</ul>
]]></content>
		</item>
		
		<item>
			<title>Leetcode 117 Populating Next Right Pointers in Each Node II</title>
			<link>https://www.dincerbakkal.com/posts/leetcode117/</link>
			<pubDate>Sun, 15 Aug 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode117/</guid>
			<description>struct Node { int val; Node *left; Node *right; Node *next; } Populate each next pointer to point to its next right node. If there is no next right node, the next pointer should be set to NULL.
Initially, all next pointers are set to NULL.
 Input: root = [1,2,3,4,5,null,7] Output: [1,#,2,3,#,4,5,7,#] Explanation: Given the above binary tree (Figure A), your function should populate each next pointer to point to its next right node, just like in Figure B.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>struct Node {
int val;
Node *left;
Node *right;
Node *next;
}
Populate each next pointer to point to its next right node. If there is no next right node, the next pointer should be set to NULL.</p>
<p>Initially, all next pointers are set to NULL.</p>
<!-- raw HTML omitted -->
<pre><code><figure><img src="/image/117EX1.png"
         alt="image"/>
</figure>


Input: root = [1,2,3,4,5,null,7]
Output: [1,#,2,3,#,4,5,7,#]
Explanation: Given the above binary tree (Figure A), your function should populate each next pointer to point to its next right node, just like in Figure B. The serialized output is in level order as connected by the next pointers, with '#' signifying the end of each level. 
</code></pre><!-- raw HTML omitted -->
<pre><code>Input: root = []
Output: []
</code></pre><!-- raw HTML omitted -->
<ul>
<li>
<p>This question can be solved by Breadth First Search. It is similar with question 116. Populating Next Right Pointers in Each Node . The difference is the tree is no longer perfect binary tree.</p>
</li>
<li>
<p>To point all nodes to their next right node. We are going to use BFS. We need go through each level. In each level, we will get all nodes from left to right and use next pointer to connect each other.</p>
</li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="s2">&#34;&#34;&#34;
</span><span class="s2"># Definition for a Node.
</span><span class="s2">class Node:
</span><span class="s2">    def __init__(self, val: int = 0, left: &#39;Node&#39; = None, right: &#39;Node&#39; = None, next: &#39;Node&#39; = None):
</span><span class="s2">        self.val = val
</span><span class="s2">        self.left = left
</span><span class="s2">        self.right = right
</span><span class="s2">        self.next = next
</span><span class="s2">&#34;&#34;&#34;</span>

<span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">connect</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">root</span><span class="p">:</span> <span class="s1">&#39;Node&#39;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="s1">&#39;Node&#39;</span><span class="p">:</span>
        <span class="k">if</span> <span class="ow">not</span> <span class="n">root</span><span class="p">:</span>
            <span class="k">return</span> <span class="n">root</span>
        <span class="n">Q</span> <span class="o">=</span> <span class="n">collections</span><span class="o">.</span><span class="n">deque</span><span class="p">([</span><span class="n">root</span><span class="p">])</span>
        <span class="k">while</span> <span class="n">Q</span><span class="p">:</span>
            <span class="n">size</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">Q</span><span class="p">)</span>
            <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">size</span><span class="p">):</span>
                <span class="n">node</span><span class="o">=</span><span class="n">Q</span><span class="o">.</span><span class="n">popleft</span><span class="p">()</span>
                <span class="k">if</span> <span class="n">i</span><span class="o">&lt;</span><span class="n">size</span><span class="o">-</span><span class="mi">1</span><span class="p">:</span>
                    <span class="n">node</span><span class="o">.</span><span class="n">next</span><span class="o">=</span><span class="n">Q</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
                <span class="k">if</span> <span class="n">node</span><span class="o">.</span><span class="n">left</span><span class="p">:</span>
                    <span class="n">Q</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">node</span><span class="o">.</span><span class="n">left</span><span class="p">)</span>
                <span class="k">if</span> <span class="n">node</span><span class="o">.</span><span class="n">right</span><span class="p">:</span>
                    <span class="n">Q</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">node</span><span class="o">.</span><span class="n">right</span><span class="p">)</span>
        <span class="k">return</span> <span class="n">root</span>
        
        
        
        
        
               
</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 654 Maximum Binary Tree</title>
			<link>https://www.dincerbakkal.com/posts/leetcode654/</link>
			<pubDate>Sun, 15 Aug 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode654/</guid>
			<description>Create a root node whose value is the maximum value in nums. Recursively build the left subtree on the subarray prefix to the left of the maximum value. Recursively build the right subtree on the subarray suffix to the right of the maximum value. Return the maximum binary tree built from nums.   Input: nums = [3,2,1,6,0,5] Output: [6,3,5,null,2,0,null,null,1] Explanation: The recursive calls are as follow: - The largest value in [3,2,1,6,0,5] is 6.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<ol>
<li>Create a root node whose value is the maximum value in nums.</li>
<li>Recursively build the left subtree on the subarray prefix to the left of the maximum value.</li>
<li>Recursively build the right subtree on the subarray suffix to the right of the maximum value.
Return the maximum binary tree built from nums.</li>
</ol>
<!-- raw HTML omitted -->
<pre><code><figure><img src="/image/654EX1.jpg"
         alt="image"/>
</figure>


Input: nums = [3,2,1,6,0,5]
Output: [6,3,5,null,2,0,null,null,1]
Explanation: The recursive calls are as follow:
- The largest value in [3,2,1,6,0,5] is 6. Left prefix is [3,2,1] and right suffix is [0,5].
    - The largest value in [3,2,1] is 3. Left prefix is [] and right suffix is [2,1].
        - Empty array, so no child.
        - The largest value in [2,1] is 2. Left prefix is [] and right suffix is [1].
            - Empty array, so no child.
            - Only one element, so child is a node with value 1.
    - The largest value in [0,5] is 5. Left prefix is [0] and right suffix is [].
        - Only one element, so child is a node with value 0.
        - Empty array, so no child.
</code></pre><!-- raw HTML omitted -->
<pre><code><figure><img src="/image/654EX2.jpg"
         alt="image"/>
</figure>


Input: nums = [3,2,1]
Output: [3,null,2,null,1]
</code></pre><!-- raw HTML omitted -->
<ul>
<li>
<p>Using DFS to recursively get the sub-list which contains the numbers that represented node values for left sub-stree. Convert the maximum value of current list be the root node of sub-tree. Then the left parts of list that exclusice the maximum value will constructed as left sub-stree of the current root. And the right parts of list that exclusice the maximum value will constructed as right substree of the current root.</p>
</li>
<li>
<p>Conditions</p>
</li>
<li>
<p>If there is no value in the list, which means there are no more nodes to construct the sub-tree, terminate the current recursion.
After done the recursion, return the root node of the tree</p>
</li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">def</span> <span class="nf">constructMaximumBinaryTree</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">nums</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">TreeNode</span><span class="p">:</span>
        <span class="k">if</span> <span class="ow">not</span> <span class="n">nums</span><span class="p">:</span><span class="k">return</span>
        <span class="n">mx</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="n">nums</span><span class="p">)</span>
        <span class="n">index</span><span class="o">=</span><span class="n">nums</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="n">mx</span><span class="p">)</span>
        <span class="n">root</span> <span class="o">=</span> <span class="n">TreeNode</span><span class="p">(</span><span class="n">mx</span><span class="p">)</span>
        <span class="n">root</span><span class="o">.</span><span class="n">left</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">constructMaximumBinaryTree</span><span class="p">(</span><span class="n">nums</span><span class="p">[:</span><span class="n">index</span><span class="p">])</span>
        <span class="n">root</span><span class="o">.</span><span class="n">right</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">constructMaximumBinaryTree</span><span class="p">(</span><span class="n">nums</span><span class="p">[</span><span class="n">index</span><span class="o">+</span><span class="mi">1</span><span class="p">:])</span>
        <span class="k">return</span> <span class="n">root</span>
        
        
        
        
               
</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 863 All Nodes Distance K in Binary Tree</title>
			<link>https://www.dincerbakkal.com/posts/leetcode863/</link>
			<pubDate>Sat, 14 Aug 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode863/</guid>
			<description>You can return the answer in any order.
 Input: root = [3,5,1,6,2,0,8,null,null,7,4], target = 5, k = 2 Output: [7,4,1] Explanation: The nodes that are a distance 2 from the target node (with value 5) have values 7, 4, and 1. Input: root = [1], target = 1, k = 3 Output: []  First use DFS to construct a graph like dictionary and then use BFS to iterate K levels start from the target point.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>You can return the answer in any order.</p>
<!-- raw HTML omitted -->
<pre><code><figure><img src="/image/863EX1.png"
         alt="image"/>
</figure>


Input: root = [3,5,1,6,2,0,8,null,null,7,4], target = 5, k = 2
Output: [7,4,1]
Explanation: The nodes that are a distance 2 from the target node (with value 5) have values 7, 4, and 1.
</code></pre><!-- raw HTML omitted -->
<pre><code>Input: root = [1], target = 1, k = 3
Output: []
</code></pre><!-- raw HTML omitted -->
<ul>
<li>First use DFS to construct a graph like dictionary and then use BFS to iterate K levels start from the target point.</li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="s2">&#34;&#34;&#34;
</span><span class="s2"># Definition for a Node.
</span><span class="s2">class Node:
</span><span class="s2">    def __init__(self, val: int = 0, left: &#39;Node&#39; = None, right: &#39;Node&#39; = None, next: &#39;Node&#39; = None):
</span><span class="s2">        self.val = val
</span><span class="s2">        self.left = left
</span><span class="s2">        self.right = right
</span><span class="s2">        self.next = next
</span><span class="s2">&#34;&#34;&#34;</span>
<span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">connect</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">root</span><span class="p">:</span> <span class="s1">&#39;Node&#39;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="s1">&#39;Node&#39;</span><span class="p">:</span>
        <span class="k">if</span> <span class="n">root</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">or</span> <span class="n">root</span><span class="o">.</span><span class="n">left</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
            <span class="k">return</span> <span class="n">root</span>
        <span class="n">root</span><span class="o">.</span><span class="n">left</span><span class="o">.</span><span class="n">next</span> <span class="o">=</span> <span class="n">root</span><span class="o">.</span><span class="n">right</span>
        <span class="k">if</span> <span class="n">root</span><span class="o">.</span><span class="n">next</span><span class="p">:</span>
            <span class="n">root</span><span class="o">.</span><span class="n">right</span><span class="o">.</span><span class="n">next</span> <span class="o">=</span> <span class="n">root</span><span class="o">.</span><span class="n">next</span><span class="o">.</span><span class="n">left</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">left</span><span class="p">)</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">right</span><span class="p">)</span>
        <span class="k">return</span> <span class="n">root</span>
        
        
        
        
               
</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 116 Populating Next Right Pointers in Each Node</title>
			<link>https://www.dincerbakkal.com/posts/leetcode116/</link>
			<pubDate>Fri, 13 Aug 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode116/</guid>
			<description>struct Node { int val; Node *left; Node *right; Node *next; } Populate each next pointer to point to its next right node. If there is no next right node, the next pointer should be set to NULL.
Initially, all next pointers are set to NULL.
 Input: root = [1,2,3,4,5,6,7] Output: [1,#,2,3,#,4,5,6,7,#] Explanation: Given the above perfect binary tree (Figure A), your function should populate each next pointer to point to its next right node, just like in Figure B.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>struct Node {
int val;
Node *left;
Node *right;
Node *next;
}
Populate each next pointer to point to its next right node. If there is no next right node, the next pointer should be set to NULL.</p>
<p>Initially, all next pointers are set to NULL.</p>
<!-- raw HTML omitted -->
<pre><code><figure><img src="/image/116EX1.png"
         alt="image"/>
</figure>


Input: root = [1,2,3,4,5,6,7]
Output: [1,#,2,3,#,4,5,6,7,#]
Explanation: Given the above perfect binary tree (Figure A), your function should populate each next pointer to point to its next right node, just like in Figure B. The serialized output is in level order as connected by the next pointers, with '#' signifying the end of each 
</code></pre><!-- raw HTML omitted -->
<pre><code>Input: root = []
Output: []
</code></pre><!-- raw HTML omitted -->
<ul>
<li>
<p>This question can be solved by Depth First Search</p>
</li>
<li>
<p>The tree is a perfect binary tree. So if there is left node then there must be right node. For each node, if it has left child node then we use next pointer to connect the left child node to right child node. If the node has next pointer, then the node’s right child node will use next pointer to connect to the node’s next node’s left child node.</p>
</li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="s2">&#34;&#34;&#34;
</span><span class="s2"># Definition for a Node.
</span><span class="s2">class Node:
</span><span class="s2">    def __init__(self, val: int = 0, left: &#39;Node&#39; = None, right: &#39;Node&#39; = None, next: &#39;Node&#39; = None):
</span><span class="s2">        self.val = val
</span><span class="s2">        self.left = left
</span><span class="s2">        self.right = right
</span><span class="s2">        self.next = next
</span><span class="s2">&#34;&#34;&#34;</span>
<span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">connect</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">root</span><span class="p">:</span> <span class="s1">&#39;Node&#39;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="s1">&#39;Node&#39;</span><span class="p">:</span>
        <span class="k">if</span> <span class="n">root</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">or</span> <span class="n">root</span><span class="o">.</span><span class="n">left</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
            <span class="k">return</span> <span class="n">root</span>
        <span class="n">root</span><span class="o">.</span><span class="n">left</span><span class="o">.</span><span class="n">next</span> <span class="o">=</span> <span class="n">root</span><span class="o">.</span><span class="n">right</span>
        <span class="k">if</span> <span class="n">root</span><span class="o">.</span><span class="n">next</span><span class="p">:</span>
            <span class="n">root</span><span class="o">.</span><span class="n">right</span><span class="o">.</span><span class="n">next</span> <span class="o">=</span> <span class="n">root</span><span class="o">.</span><span class="n">next</span><span class="o">.</span><span class="n">left</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">left</span><span class="p">)</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">right</span><span class="p">)</span>
        <span class="k">return</span> <span class="n">root</span>
        
        
        
        
               
</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 437 Path Sum III</title>
			<link>https://www.dincerbakkal.com/posts/leetcode437/</link>
			<pubDate>Thu, 12 Aug 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode437/</guid>
			<description>The path does not need to start or end at the root or a leaf, but it must go downwards (i.e., traveling only from parent nodes to child nodes).
 Input: root = [10,5,-3,3,2,null,11,3,-2,null,1], targetSum = 8 Output: 3 Explanation: The paths that sum to 8 are shown. Input: root = [5,4,8,11,null,13,4,7,2,null,null,5,1], targetSum = 22 Output: 3   This question can be solved by Depth First Search.
  We want to find all possible path that sum to the given number.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>The path does not need to start or end at the root or a leaf, but it must go downwards (i.e., traveling only from parent nodes to child nodes).</p>
<!-- raw HTML omitted -->
<pre><code><figure><img src="/image/437EX1.jpg"
         alt="image"/>
</figure>


Input: root = [10,5,-3,3,2,null,11,3,-2,null,1], targetSum = 8
Output: 3
Explanation: The paths that sum to 8 are shown.
</code></pre><!-- raw HTML omitted -->
<pre><code>Input: root = [5,4,8,11,null,13,4,7,2,null,null,5,1], targetSum = 22
Output: 3
</code></pre><!-- raw HTML omitted -->
<ul>
<li>
<p>This question can be solved by Depth First Search.</p>
</li>
<li>
<p>We want to find all possible path that sum to the given number. Since the path does not have to start from the root, so any node can be the start of the path. We need to try every node to be the root and find if there is path from that root that sum up to the given number.</p>
</li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="c1"># Definition for a binary tree node.</span>
<span class="c1"># class TreeNode:</span>
<span class="c1">#     def __init__(self, val=0, left=None, right=None):</span>
<span class="c1">#         self.val = val</span>
<span class="c1">#         self.left = left</span>
<span class="c1">#         self.right = right</span>
<span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">pathSum</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">root</span><span class="p">:</span> <span class="n">TreeNode</span><span class="p">,</span> <span class="nb">sum</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
            <span class="k">if</span> <span class="ow">not</span> <span class="n">root</span><span class="p">:</span> <span class="k">return</span> <span class="mi">0</span>
            <span class="k">def</span> <span class="nf">dfs</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="nb">sum</span><span class="p">):</span>
                <span class="n">res</span> <span class="o">=</span> <span class="mi">0</span>
                <span class="k">if</span> <span class="ow">not</span> <span class="n">root</span><span class="p">:</span> <span class="k">return</span> <span class="n">res</span>
                <span class="k">if</span> <span class="nb">sum</span> <span class="o">==</span> <span class="n">root</span><span class="o">.</span><span class="n">val</span><span class="p">:</span>
                    <span class="n">res</span> <span class="o">+=</span> <span class="mi">1</span>
                <span class="n">res</span> <span class="o">+=</span> <span class="n">dfs</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">left</span><span class="p">,</span> <span class="nb">sum</span><span class="o">-</span><span class="n">root</span><span class="o">.</span><span class="n">val</span><span class="p">)</span>
                <span class="n">res</span> <span class="o">+=</span> <span class="n">dfs</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">right</span><span class="p">,</span> <span class="nb">sum</span><span class="o">-</span><span class="n">root</span><span class="o">.</span><span class="n">val</span><span class="p">)</span>
                <span class="k">return</span> <span class="n">res</span>
            <span class="k">return</span> <span class="n">dfs</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="nb">sum</span><span class="p">)</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">pathSum</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">left</span><span class="p">,</span> <span class="nb">sum</span><span class="p">)</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">pathSum</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">right</span><span class="p">,</span> <span class="nb">sum</span><span class="p">)</span>
        
                          
</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 113 Path Sum II</title>
			<link>https://www.dincerbakkal.com/posts/leetcode113/</link>
			<pubDate>Wed, 11 Aug 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode113/</guid>
			<description>A root-to-leaf path is a path starting from the root and ending at any leaf node. A leaf is a node with no children.
 Input: root = [5,4,8,11,null,13,4,7,2,null,null,5,1], targetSum = 22 Output: [[5,4,11,2],[5,8,4,5]] Explanation: There are two paths whose sum equals targetSum: 5 + 4 + 11 + 2 = 22 5 + 8 + 4 + 5 = 22  Input: root = [1,2,3], targetSum = 5 Output: []   This question can be solved by Depth First Search.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>A root-to-leaf path is a path starting from the root and ending at any leaf node. A leaf is a node with no children.</p>
<!-- raw HTML omitted -->
<pre><code><figure><img src="/image/113EX1.jpg"
         alt="image"/>
</figure>


Input: root = [5,4,8,11,null,13,4,7,2,null,null,5,1], targetSum = 22
Output: [[5,4,11,2],[5,8,4,5]]
Explanation: There are two paths whose sum equals targetSum:
5 + 4 + 11 + 2 = 22
5 + 8 + 4 + 5 = 22
</code></pre><!-- raw HTML omitted -->
<pre><code><figure><img src="/image/113EX2.jpg"
         alt="image"/>
</figure>


Input: root = [1,2,3], targetSum = 5
Output: []
</code></pre><!-- raw HTML omitted -->
<ul>
<li>
<p>This question can be solved by Depth First Search. Similar with question 112. Path Sum II and 257. Binary Tree Paths However, this time need to list all path that sum to the given sum</p>
</li>
<li>
<p>We use dfs to traversal the tree. Each time we compare the sum and the current root value if the they are same and the root does not have left child and right child (root is leaf), then we find a path that equal to give sum, we need to return the the current root value and add to it’s previous path. Otherwist, we make the sum equal to sum - root.val and continue recursively find the next root.</p>
</li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="c1"># Definition for a binary tree node.</span>
<span class="c1"># class TreeNode:</span>
<span class="c1">#     def __init__(self, val=0, left=None, right=None):</span>
<span class="c1">#         self.val = val</span>
<span class="c1">#         self.left = left</span>
<span class="c1">#         self.right = right</span>
<span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">pathSum</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">root</span><span class="p">:</span> <span class="n">TreeNode</span><span class="p">,</span> <span class="nb">sum</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">List</span><span class="p">[</span><span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">]]:</span>
            <span class="k">if</span> <span class="ow">not</span> <span class="n">root</span><span class="p">:</span>
                <span class="k">return</span> <span class="p">[]</span>
            <span class="k">if</span> <span class="ow">not</span> <span class="n">root</span><span class="o">.</span><span class="n">left</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">root</span><span class="o">.</span><span class="n">right</span> <span class="ow">and</span> <span class="nb">sum</span> <span class="o">==</span> <span class="n">root</span><span class="o">.</span><span class="n">val</span><span class="p">:</span>
                <span class="k">return</span> <span class="p">[[</span><span class="n">root</span><span class="o">.</span><span class="n">val</span><span class="p">]]</span>
            <span class="n">l_path</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">pathSum</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">left</span><span class="p">,</span> <span class="nb">sum</span><span class="o">-</span><span class="n">root</span><span class="o">.</span><span class="n">val</span><span class="p">)</span>
            <span class="n">r_path</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">pathSum</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">right</span><span class="p">,</span> <span class="nb">sum</span><span class="o">-</span><span class="n">root</span><span class="o">.</span><span class="n">val</span><span class="p">)</span>
            <span class="n">left</span> <span class="o">=</span> <span class="p">[[</span><span class="n">root</span><span class="o">.</span><span class="n">val</span><span class="p">]</span><span class="o">+</span><span class="n">l</span> <span class="k">for</span> <span class="n">l</span> <span class="ow">in</span> <span class="n">l_path</span><span class="p">]</span>
            <span class="n">right</span> <span class="o">=</span> <span class="p">[[</span><span class="n">root</span><span class="o">.</span><span class="n">val</span><span class="p">]</span><span class="o">+</span><span class="n">r</span> <span class="k">for</span> <span class="n">r</span> <span class="ow">in</span> <span class="n">r_path</span><span class="p">]</span>
            <span class="k">return</span> <span class="n">left</span><span class="o">+</span><span class="n">right</span>
        
        
               
</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 1448 Count Good Nodes in Binary Tree</title>
			<link>https://www.dincerbakkal.com/posts/leetcode1448/</link>
			<pubDate>Tue, 10 Aug 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode1448/</guid>
			<description>Soru Given a binary tree root, a node X in the tree is named good if in the path from root to X there are no nodes with a value greater than X.
Return the number of good nodes in the binary tree.
Örnek 1  Input: root = [3,1,4,3,null,1,5] Output: 4 Explanation: Nodes in blue are good. Root Node (3) is always a good node. Node 4 -&amp;gt; (3,4) is the maximum value in the path starting from the root.</description>
			<content type="html"><![CDATA[<h3 id="soru">Soru</h3>
<p>Given a binary tree root, a node X in the tree is named good if in the path from root to X there are no nodes with a value greater than X.</p>
<p>Return the number of good nodes in the binary tree.</p>
<h3 id="örnek-1">Örnek 1</h3>
<pre><code><figure><img src="/image/1448EX1.jpg"
         alt="image"/>
</figure>


Input: root = [3,1,4,3,null,1,5]
Output: 4
Explanation: Nodes in blue are good.
Root Node (3) is always a good node.
Node 4 -&gt; (3,4) is the maximum value in the path starting from the root.
Node 5 -&gt; (3,4,5) is the maximum value in the path
Node 3 -&gt; (3,1,3) is the maximum value in the path.
</code></pre><h3 id="örnek-2">Örnek 2</h3>
<pre><code><figure><img src="/image/1448EX2.jpg"
         alt="image"/>
</figure>

Input: root = [3,3,null,4,2]
Output: 3
Explanation: Node 2 -&gt; (3, 3, 2) is not good, because &quot;3&quot; is higher than it.
</code></pre><h3 id="örnek-3">Örnek 3</h3>
<pre><code>Input: root = [1]
Output: 1
Explanation: Root is considered as good.
</code></pre><h3 id="çözüm">Çözüm</h3>
<ul>
<li>Bir binary tree (ikili ağaç) veriliyor. Bu ağaçta &ldquo;good node&rdquo; olarak adlandırılan düğümler şunlardır:Root&rsquo;tan o düğüme giden yolda, değeri kendisinden büyük olan bir düğüm yoksa, o düğüm &ldquo;good node&rdquo;&lsquo;dur.</li>
<li>Bu soruda, DFS (Depth First Search - Derinlik Öncelikli Arama) kullanabiliriz.</li>
<li>Her düğümde, o ana kadar gördüğümüz maksimum değeri tutarız.</li>
<li>Eğer şu anki düğümün değeri, bu maksimum değerden büyük veya eşitse → good node&rsquo;dur.</li>
<li>Not:DFS yerine BFS ile de yapılabilir ama DFS daha doğal hissettiriyor bu tarz root-to-node yol takibi gereken sorularda.DFS ile birlikte sürekli bir &ldquo;max so far&rdquo; taşıdığımız için ekstra veri yapısına ihtiyaç yok.</li>
</ul>
<h2 id="code">Code</h2>
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">goodNodes</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">root</span><span class="p">):</span>
        <span class="k">def</span> <span class="nf">dfs</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="n">max_val</span><span class="p">):</span>
            <span class="k">if</span> <span class="ow">not</span> <span class="n">node</span><span class="p">:</span>
                <span class="k">return</span> <span class="mi">0</span>
            
            <span class="c1"># Bu düğüm good node mu?</span>
            <span class="n">good</span> <span class="o">=</span> <span class="mi">1</span> <span class="k">if</span> <span class="n">node</span><span class="o">.</span><span class="n">val</span> <span class="o">&gt;=</span> <span class="n">max_val</span> <span class="k">else</span> <span class="mi">0</span>
            
            <span class="c1"># Yeni maksimumu hesapla</span>
            <span class="n">new_max</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="n">max_val</span><span class="p">,</span> <span class="n">node</span><span class="o">.</span><span class="n">val</span><span class="p">)</span>
            
            <span class="c1"># Sol ve sağ çocuklara git</span>
            <span class="n">good</span> <span class="o">+=</span> <span class="n">dfs</span><span class="p">(</span><span class="n">node</span><span class="o">.</span><span class="n">left</span><span class="p">,</span> <span class="n">new_max</span><span class="p">)</span>
            <span class="n">good</span> <span class="o">+=</span> <span class="n">dfs</span><span class="p">(</span><span class="n">node</span><span class="o">.</span><span class="n">right</span><span class="p">,</span> <span class="n">new_max</span><span class="p">)</span>
            
            <span class="k">return</span> <span class="n">good</span>
        
        <span class="k">return</span> <span class="n">dfs</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="n">root</span><span class="o">.</span><span class="n">val</span><span class="p">)</span>



</code></pre></div><h3 id="complexity">Complexity</h3>
<ul>
<li>
<p>Time complexity (Zaman Karmaşıklığı): O(N) → Her düğüm bir kez ziyaret edilir</p>
</li>
<li>
<p>Space complexity (Alan Karmaşıklığı): O(H) → H = ağacın yüksekliği (stack derinliği, balanced ise O(logN))</p>
</li>
</ul>
]]></content>
		</item>
		
		<item>
			<title>Leetcode 199 Binary Tree Right Side View</title>
			<link>https://www.dincerbakkal.com/posts/leetcode199/</link>
			<pubDate>Tue, 10 Aug 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode199/</guid>
			<description>Soru Given the root of a binary tree, imagine yourself standing on the right side of it, return the values of the nodes you can see ordered from top to bottom.
Örnek 1  Input: root = [1,2,3,null,5,null,4] Output: [1,3,4] Örnek 2 Input: root = [1,null,3] Output: [1,3] Çözüm  Bir binary tree (ikili ağaç) verildiğinde, sağdan bakıldığında görülen düğümlerin listesini döndürmemiz isteniyor. Bu soruyu BFS (Genişlik Öncelikli Arama) veya DFS (Derinlik Öncelikli Arama) ile çözebiliriz.</description>
			<content type="html"><![CDATA[<h3 id="soru">Soru</h3>
<p>Given the root of a binary tree, imagine yourself standing on the right side of it, return the values of the nodes you can see ordered from top to bottom.</p>
<h3 id="örnek-1">Örnek 1</h3>
<pre><code><figure><img src="/image/199EX1.jpg"
         alt="image"/>
</figure>


Input: root = [1,2,3,null,5,null,4]
Output: [1,3,4]
</code></pre><h3 id="örnek-2">Örnek 2</h3>
<pre><code>Input: root = [1,null,3]
Output: [1,3]
</code></pre><h3 id="çözüm">Çözüm</h3>
<ul>
<li>Bir binary tree (ikili ağaç) verildiğinde, sağdan bakıldığında görülen düğümlerin listesini döndürmemiz isteniyor.</li>
<li>Bu soruyu BFS (Genişlik Öncelikli Arama) veya DFS (Derinlik Öncelikli Arama) ile çözebiliriz.</li>
<li>BFS (Level Order - Kuyuğa Dayalı Çözüm)</li>
<li>Ağaç seviyelerini level order (katman bazlı) BFS ile gezeriz.</li>
<li>Her seviyede en sağdaki düğümü alırız.</li>
<li>DFS (Sağdan Öncelikli Derinlemesine Arama)</li>
<li>Önce sağ çocuğa giderek DFS yaparsak, her seviyede ilk ziyaret edilen düğüm sağ taraftan görülen düğüm olur.</li>
<li>Her seviyede sadece ilk düğümü ekleriz.</li>
<li>Eğer ağacın çok derin olduğunu biliyorsan, BFS kullan çünkü DFS stack overflow hatasına sebep olabilir. Ama genellikle DFS daha az bellek tüketir.</li>
</ul>
<h2 id="code">Code</h2>
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="kn">from</span> <span class="nn">collections</span> <span class="kn">import</span> <span class="n">deque</span>

<span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">rightSideView</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">root</span><span class="p">):</span>
        <span class="k">if</span> <span class="ow">not</span> <span class="n">root</span><span class="p">:</span>
            <span class="k">return</span> <span class="p">[]</span>
        
        <span class="n">result</span> <span class="o">=</span> <span class="p">[]</span>
        <span class="n">queue</span> <span class="o">=</span> <span class="n">deque</span><span class="p">([</span><span class="n">root</span><span class="p">])</span>
        
        <span class="k">while</span> <span class="n">queue</span><span class="p">:</span>
            <span class="n">level_size</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">queue</span><span class="p">)</span>
            
            <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">level_size</span><span class="p">):</span>
                <span class="n">node</span> <span class="o">=</span> <span class="n">queue</span><span class="o">.</span><span class="n">popleft</span><span class="p">()</span>
                
                <span class="c1"># Eğer bu seviyenin en sağındaki düğümse</span>
                <span class="k">if</span> <span class="n">i</span> <span class="o">==</span> <span class="n">level_size</span> <span class="o">-</span> <span class="mi">1</span><span class="p">:</span>
                    <span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">node</span><span class="o">.</span><span class="n">val</span><span class="p">)</span>
                
                <span class="c1"># Önce sol, sonra sağ çocukları ekle</span>
                <span class="k">if</span> <span class="n">node</span><span class="o">.</span><span class="n">left</span><span class="p">:</span>
                    <span class="n">queue</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">node</span><span class="o">.</span><span class="n">left</span><span class="p">)</span>
                <span class="k">if</span> <span class="n">node</span><span class="o">.</span><span class="n">right</span><span class="p">:</span>
                    <span class="n">queue</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">node</span><span class="o">.</span><span class="n">right</span><span class="p">)</span>
        
        <span class="k">return</span> <span class="n">result</span>

</code></pre></div><h3 id="complexity">Complexity</h3>
<ul>
<li>
<p>Time complexity (Zaman Karmaşıklığı): O(N) çünkü her düğüm bir kez ziyaret edilir.</p>
</li>
<li>
<p>Space complexity (Alan Karmaşıklığı): O(N) en kötü durumda kuyrukta tüm seviyedeki düğümler tutulur.</p>
</li>
</ul>
<h2 id="code-1">Code</h2>
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">rightSideView</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">root</span><span class="p">):</span>
        <span class="n">result</span> <span class="o">=</span> <span class="p">[]</span>
        
        <span class="k">def</span> <span class="nf">dfs</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="n">depth</span><span class="p">):</span>
            <span class="k">if</span> <span class="ow">not</span> <span class="n">node</span><span class="p">:</span>
                <span class="k">return</span>
            
            <span class="c1"># Eğer bu seviyede ilk kez bir düğüm ziyaret ediliyorsa, ekle</span>
            <span class="k">if</span> <span class="n">depth</span> <span class="o">==</span> <span class="nb">len</span><span class="p">(</span><span class="n">result</span><span class="p">):</span>
                <span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">node</span><span class="o">.</span><span class="n">val</span><span class="p">)</span>
            
            <span class="c1"># Önce sağ çocuğa git, sonra sol çocuğa</span>
            <span class="n">dfs</span><span class="p">(</span><span class="n">node</span><span class="o">.</span><span class="n">right</span><span class="p">,</span> <span class="n">depth</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span>
            <span class="n">dfs</span><span class="p">(</span><span class="n">node</span><span class="o">.</span><span class="n">left</span><span class="p">,</span> <span class="n">depth</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span>
        
        <span class="n">dfs</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
        <span class="k">return</span> <span class="n">result</span>


</code></pre></div><h3 id="complexity-1">Complexity</h3>
<ul>
<li>
<p>Time complexity (Zaman Karmaşıklığı): O(N) çünkü her düğüm bir kez ziyaret edilir.</p>
</li>
<li>
<p>Space complexity (Alan Karmaşıklığı): O(H) (H = ağacın yüksekliği, dengeli ağaçta O(logN), düz ağaçta O(N)).</p>
</li>
</ul>
]]></content>
		</item>
		
		<item>
			<title>Leetcode 107 Binary Tree Level Order Traversal II</title>
			<link>https://www.dincerbakkal.com/posts/leetcode107/</link>
			<pubDate>Mon, 09 Aug 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode107/</guid>
			<description>Input: root = [3,9,20,null,null,15,7] Output: [[15,7],[9,20],[3]] Input: root = [1] Output: [[1]]  Soruda bize bir binary tree veriliyor ve bu binary tree dallarından başlayarak köke doğru level level değerlerini yazdırmamız isteniyor. Bu soru leetcode 102&amp;rsquo;ye çok benzemektedir. Tüm ağacı BfS kullanarak level level gezeriz ve değerleri bir listeye ekleriz. Elimizdeki liste kökten dala doğru oluşmuştur.Ama bizden dallardan köke uzanan bir sonuç beklenmektedir.Tek yapmamız gereken bu listeyi terse çevirerek sonucu bulmaktır.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<!-- raw HTML omitted -->
<pre><code><figure><img src="/image/107EX1.jpg"
         alt="image"/>
</figure>


Input: root = [3,9,20,null,null,15,7]
Output: [[15,7],[9,20],[3]]
</code></pre><!-- raw HTML omitted -->
<pre><code>Input: root = [1]
Output: [[1]]
</code></pre><!-- raw HTML omitted -->
<ul>
<li>Soruda bize bir binary tree veriliyor ve bu binary tree dallarından başlayarak köke doğru level level değerlerini yazdırmamız isteniyor.</li>
<li>Bu soru leetcode 102&rsquo;ye çok benzemektedir.</li>
<li>Tüm ağacı BfS kullanarak level level gezeriz ve değerleri bir listeye ekleriz.</li>
<li>Elimizdeki liste kökten dala doğru oluşmuştur.Ama bizden dallardan köke uzanan bir sonuç beklenmektedir.Tek yapmamız gereken bu listeyi terse çevirerek sonucu bulmaktır.</li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="c1"># Definition for a binary tree node.</span>
<span class="c1"># class TreeNode:</span>
<span class="c1">#     def __init__(self, val=0, left=None, right=None):</span>
<span class="c1">#         self.val = val</span>
<span class="c1">#         self.left = left</span>
<span class="c1">#         self.right = right</span>
<span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">levelOrderBottom</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">root</span><span class="p">:</span> <span class="n">TreeNode</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">List</span><span class="p">[</span><span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">]]:</span>
            <span class="k">if</span> <span class="ow">not</span> <span class="n">root</span><span class="p">:</span> <span class="k">return</span> <span class="p">[]</span>
            <span class="n">queue</span> <span class="o">=</span> <span class="n">collections</span><span class="o">.</span><span class="n">deque</span><span class="p">([</span><span class="n">root</span><span class="p">])</span>
            <span class="n">res</span><span class="o">=</span><span class="p">[]</span>
            <span class="k">while</span> <span class="n">queue</span><span class="p">:</span>
                <span class="n">tmp</span> <span class="o">=</span> <span class="p">[]</span>
                <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">queue</span><span class="p">)):</span>
                    <span class="n">node</span><span class="o">=</span><span class="n">queue</span><span class="o">.</span><span class="n">popleft</span><span class="p">()</span>
                    <span class="n">tmp</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">node</span><span class="o">.</span><span class="n">val</span><span class="p">)</span>
                    <span class="k">if</span> <span class="n">node</span><span class="o">.</span><span class="n">left</span><span class="p">:</span>
                        <span class="n">queue</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">node</span><span class="o">.</span><span class="n">left</span><span class="p">)</span>
                    <span class="k">if</span> <span class="n">node</span><span class="o">.</span><span class="n">right</span><span class="p">:</span>
                        <span class="n">queue</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">node</span><span class="o">.</span><span class="n">right</span><span class="p">)</span>
                <span class="n">res</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">tmp</span><span class="p">)</span>
            <span class="k">return</span> <span class="n">res</span><span class="p">[::</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
        
        
               
</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 103 Binary Tree Zigzag Level Order Traversal</title>
			<link>https://www.dincerbakkal.com/posts/leetcode103/</link>
			<pubDate>Sat, 07 Aug 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode103/</guid>
			<description>Input: root = [3,9,20,null,null,15,7] Output: [[3],[20,9],[15,7]] Input: root = [1] Output: [[1]]  Soruda bize bir binary tree veriliyor ve bu binary tree deki her basamağı kökten başlayarak zikzak şeklinde yazmamız isteniyor.Örneğin 0. basamak kök soldan sağa,1. basamaktaki elemanlar sağdan sola yazılacak,2. basamaktaki elemanlar yine soldan sağa yazılacak bu böyle gidecek. 4 liste oluşturuz s1 = [root],s2 = [],level = [],result = [] s1 içinde root ile program akışını başlatırız.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<!-- raw HTML omitted -->
<pre><code><figure><img src="/image/103EX1.jpg"
         alt="image"/>
</figure>


Input: root = [3,9,20,null,null,15,7]
Output: [[3],[20,9],[15,7]]
</code></pre><!-- raw HTML omitted -->
<pre><code>Input: root = [1]
Output: [[1]]
</code></pre><!-- raw HTML omitted -->
<ul>
<li>Soruda bize bir binary tree veriliyor ve bu binary tree deki her basamağı kökten başlayarak zikzak şeklinde yazmamız isteniyor.Örneğin 0. basamak kök soldan sağa,1. basamaktaki elemanlar sağdan sola yazılacak,2. basamaktaki elemanlar yine soldan sağa yazılacak bu böyle gidecek.</li>
<li>4 liste oluşturuz s1 = [root],s2 = [],level = [],result = []</li>
<li>s1 içinde root ile program akışını başlatırız.</li>
<li>Sonra sırası ile s1&rsquo;in içindekilerin childları s2&rsquo;ye,s2&rsquo;in içindeki nodeların childları s1&rsquo;e atayarak ilerleriz.</li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="c1"># Definition for a binary tree node.</span>
<span class="c1"># class TreeNode:</span>
<span class="c1">#     def __init__(self, val=0, left=None, right=None):</span>
<span class="c1">#         self.val = val</span>
<span class="c1">#         self.left = left</span>
<span class="c1">#         self.right = right</span>
<span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">zigzagLevelOrder</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">root</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">TreeNode</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">List</span><span class="p">[</span><span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">]]:</span>
        <span class="k">if</span> <span class="n">root</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
            <span class="k">return</span> <span class="p">[]</span>
        <span class="n">s1</span> <span class="o">=</span> <span class="p">[</span><span class="n">root</span><span class="p">]</span>
        <span class="n">s2</span> <span class="o">=</span> <span class="p">[]</span>
        <span class="n">level</span> <span class="o">=</span> <span class="p">[]</span>
        <span class="n">result</span> <span class="o">=</span> <span class="p">[]</span>
        <span class="k">while</span> <span class="n">s1</span> <span class="ow">or</span> <span class="n">s2</span><span class="p">:</span>
            <span class="k">while</span> <span class="n">s1</span><span class="p">:</span>
                <span class="n">root</span> <span class="o">=</span> <span class="n">s1</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
                <span class="n">level</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">val</span><span class="p">)</span>
                <span class="k">if</span> <span class="n">root</span><span class="o">.</span><span class="n">left</span><span class="p">:</span>
                    <span class="n">s2</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">left</span><span class="p">)</span>
                <span class="k">if</span> <span class="n">root</span><span class="o">.</span><span class="n">right</span><span class="p">:</span>
                    <span class="n">s2</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">right</span><span class="p">)</span>
            <span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">level</span><span class="p">)</span>
            <span class="n">level</span> <span class="o">=</span> <span class="p">[]</span>
            <span class="k">while</span> <span class="n">s2</span><span class="p">:</span>
                <span class="n">root</span> <span class="o">=</span> <span class="n">s2</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
                <span class="n">level</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">val</span><span class="p">)</span>
                <span class="k">if</span> <span class="n">root</span><span class="o">.</span><span class="n">right</span><span class="p">:</span>
                    <span class="n">s1</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">right</span><span class="p">)</span>
                <span class="k">if</span> <span class="n">root</span><span class="o">.</span><span class="n">left</span><span class="p">:</span>
                    <span class="n">s1</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">left</span><span class="p">)</span>
            <span class="k">if</span> <span class="n">level</span> <span class="o">!=</span> <span class="p">[]:</span>
                <span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">level</span><span class="p">)</span>
                <span class="n">level</span> <span class="o">=</span> <span class="p">[]</span>
        <span class="k">return</span> <span class="n">result</span>
        
               
</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 102 Binary Tree Level Order Traversal</title>
			<link>https://www.dincerbakkal.com/posts/leetcode102/</link>
			<pubDate>Fri, 06 Aug 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode102/</guid>
			<description>Soru Given the root of a binary tree, return the level order traversal of its nodes&#39; values. (i.e., from left to right, level by level).
Örnek 1  Input: root = [3,9,20,null,null,15,7] Output: [[3],[9,20],[15,7]] Örnek 2 Input: root = [1] Output: [[1]] Çözüm  Bir binary tree (ikili ağaç) verildiğinde, level order traversal (seviye seviye gezme) işlemini gerçekleştirip sonucu döndürmemiz isteniyor. Bu soruyu BFS (Breadth-First Search) ile çözebiliriz. BFS, seviyeleri sırayla dolaşmamıza yardımcı olur.</description>
			<content type="html"><![CDATA[<h3 id="soru">Soru</h3>
<p>Given the root of a binary tree, return the level order traversal of its nodes' values. (i.e., from left to right, level by level).</p>
<h3 id="örnek-1">Örnek 1</h3>
<pre><code><figure><img src="/image/102EX1.jpg"
         alt="image"/>
</figure>


Input: root = [3,9,20,null,null,15,7]
Output: [[3],[9,20],[15,7]]
</code></pre><h3 id="örnek-2">Örnek 2</h3>
<pre><code>Input: root = [1]
Output: [[1]]
</code></pre><h3 id="çözüm">Çözüm</h3>
<ul>
<li>Bir binary tree (ikili ağaç) verildiğinde, level order traversal (seviye seviye gezme) işlemini gerçekleştirip sonucu döndürmemiz isteniyor.</li>
<li>Bu soruyu BFS (Breadth-First Search) ile çözebiliriz. BFS, seviyeleri sırayla dolaşmamıza yardımcı olur. BFS için queue (kuyruk) veri yapısını kullanacağız.</li>
<li>Root düğümünü kuyruğa ekle.</li>
<li>Kuyruktan bir düğüm çıkar ve onun çocuklarını kuyruğa ekle.</li>
<li>Aynı seviyedeki tüm düğümleri işlerken aynı listeye ekle.</li>
<li>Tüm seviyeleri işleyerek sonucu döndür.</li>
</ul>
<h2 id="code">Code</h2>
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="c1"># Definition for a binary tree node.</span>
<span class="c1"># class TreeNode:</span>
<span class="c1">#     def __init__(self, val=0, left=None, right=None):</span>
<span class="c1">#         self.val = val</span>
<span class="c1">#         self.left = left</span>
<span class="c1">#         self.right = right</span>
<span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">levelOrder</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">root</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">TreeNode</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">List</span><span class="p">[</span><span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">]]:</span>
        <span class="n">res</span> <span class="o">=</span> <span class="p">[]</span> <span class="c1">#sonuç listesini oluştururuz.</span>
        
        <span class="n">q</span> <span class="o">=</span> <span class="n">collections</span><span class="o">.</span><span class="n">deque</span><span class="p">()</span> <span class="c1">#python que yapsını oluştururuz.</span>
        <span class="n">q</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">root</span><span class="p">)</span> <span class="c1">#que ilk node olan kökü ekleriz.</span>
        
        <span class="k">while</span> <span class="n">q</span><span class="p">:</span> <span class="c1">#que içinde değer olduğu sürece</span>
            <span class="n">qLen</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">q</span><span class="p">)</span> <span class="c1">#que boyutunu alırız.</span>
            <span class="n">level</span> <span class="o">=</span> <span class="p">[]</span>    <span class="c1">#ağaçdaki basamakların değerlerini burada tutacağız.[3],[9,20]...</span>
            <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">qLen</span><span class="p">):</span>
                <span class="n">node</span> <span class="o">=</span> <span class="n">q</span><span class="o">.</span><span class="n">popleft</span><span class="p">()</span><span class="c1">#quedaki ilk giren değeri al(ilk giren ilk çıkar)</span>
                <span class="k">if</span> <span class="n">node</span><span class="p">:</span><span class="c1">#node değeri var ise</span>
                    <span class="n">level</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">node</span><span class="o">.</span><span class="n">val</span><span class="p">)</span><span class="c1">#bunu basamağın değer listesine ekle</span>
                    <span class="n">q</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">node</span><span class="o">.</span><span class="n">left</span><span class="p">)</span> <span class="c1">#sol dalında node var ise queya ekle</span>
                    <span class="n">q</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">node</span><span class="o">.</span><span class="n">right</span><span class="p">)</span><span class="c1">#sağ dalında node var ise queya ekle</span>
            <span class="k">if</span> <span class="n">level</span><span class="p">:</span><span class="c1">#eğer basamakta değer var ise sonuç listesine ekle</span>
                <span class="n">res</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">level</span><span class="p">)</span>
        <span class="k">return</span> <span class="n">res</span>
        
               
</code></pre></div><h3 id="complexity">Complexity</h3>
<ul>
<li>Time complexity  :O(n) Çünkü her düğümü yalnızca bir kez ziyaret ediyoruz.</li>
<li>Space complexity :O(n) En kötü durumda, kuyrukta bir seviyedeki tüm düğümler tutulacağı için O(N) olabilir.</li>
</ul>
]]></content>
		</item>
		
		<item>
			<title>Leetcode 310 Minimum Height Trees</title>
			<link>https://www.dincerbakkal.com/posts/leetcode310/</link>
			<pubDate>Thu, 05 Aug 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode310/</guid>
			<description>Given a tree of n nodes labelled from 0 to n - 1, and an array of n - 1 edges where edges[i] = [ai, bi] indicates that there is an undirected edge between the two nodes ai and bi in the tree, you can choose any node of the tree as the root. When you select a node x as the root, the result tree has height h. Among all possible rooted trees, those with minimum height (i.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>Given a tree of n nodes labelled from 0 to n - 1, and an array of n - 1 edges where edges[i] = [ai, bi] indicates that there is an undirected edge between the two nodes ai and bi in the tree, you can choose any node of the tree as the root. When you select a node x as the root, the result tree has height h. Among all possible rooted trees, those with minimum height (i.e. min(h))  are called minimum height trees (MHTs).</p>
<p>Return a list of all MHTs' root labels. You can return the answer in any order.</p>
<p>The height of a rooted tree is the number of edges on the longest downward path between the root and a leaf.</p>
<!-- raw HTML omitted -->
<pre><code><figure><img src="/image/310EX1.jpg"
         alt="image"/>
</figure>


Input: n = 4, edges = [[1,0],[1,2],[1,3]]
Output: [1]
Explanation: As shown, the height of the tree is 1 when the root is the node with label 1 which is the only MHT.
</code></pre><!-- raw HTML omitted -->
<pre><code><figure><img src="/image/310EX2.jpg"
         alt="image"/>
</figure>


Input: n = 6, edges = [[3,0],[3,1],[3,2],[3,4],[5,4]]
Output: [3,4]
</code></pre><!-- raw HTML omitted -->
<ul>
<li>Given the above intuition, the problem is now reduced down to looking for all the centroid nodes in a tree-alike graph, which in addition are no more than two.</li>
</ul>
<p>The idea is that we trim out the leaf nodes layer by layer, until we reach the core of the graph, which are the centroids nodes.</p>
<p>trim</p>
<p>Once we trim out the first layer of the leaf nodes (nodes that have only one connection), some of the non-leaf nodes would become leaf nodes.</p>
<p>The trimming process continues until there are only two nodes left in the graph, which are the centroids that we are looking for.</p>
<p>The above algorithm resembles the topological sorting algorithm which generates the order of objects based on their dependencies. For instance, in the scenario of course scheduling, the courses that have the least dependency would appear first in the order.</p>
<p>In our case, we trim out the leaf nodes first, which are the farther away from the centroids. At each step, the nodes we trim out are closer to the centroids than the nodes in the previous step. At the end, the trimming process terminates at the centroids nodes.</p>
<p>Implementation</p>
<p>Given the above algorithm, we could implement it via the Breadth First Search (BFS) strategy, to trim the leaf nodes layer by layer (i.e. level by level).</p>
<p>Initially, we would build a graph with the adjacency list from the input.</p>
<p>We then create a queue which would be used to hold the leaf nodes.</p>
<p>At the beginning, we put all the current leaf nodes into the queue.</p>
<p>We then run a loop until there is only two nodes left in the graph.</p>
<p>At each iteration, we remove the current leaf nodes from the queue. While removing the nodes, we also remove the edges that are linked to the nodes. As a consequence, some of the non-leaf nodes would become leaf nodes. And these are the nodes that would be trimmed out in the next iteration.</p>
<p>The iteration terminates when there are no more than two nodes left in the graph, which are the desired centroids nodes.</p>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">findMinHeightTrees</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">n</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span> <span class="n">edges</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">]])</span> <span class="o">-&gt;</span> <span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">]:</span>

        <span class="c1"># edge cases</span>
        <span class="k">if</span> <span class="n">n</span> <span class="o">&lt;=</span> <span class="mi">2</span><span class="p">:</span>
            <span class="k">return</span> <span class="p">[</span><span class="n">i</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">n</span><span class="p">)]</span>

        <span class="c1"># Build the graph with the adjacency list</span>
        <span class="n">neighbors</span> <span class="o">=</span> <span class="p">[</span><span class="nb">set</span><span class="p">()</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">n</span><span class="p">)]</span>
        <span class="k">for</span> <span class="n">start</span><span class="p">,</span> <span class="n">end</span> <span class="ow">in</span> <span class="n">edges</span><span class="p">:</span>
            <span class="n">neighbors</span><span class="p">[</span><span class="n">start</span><span class="p">]</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">end</span><span class="p">)</span>
            <span class="n">neighbors</span><span class="p">[</span><span class="n">end</span><span class="p">]</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">start</span><span class="p">)</span>

        <span class="c1"># Initialize the first layer of leaves</span>
        <span class="n">leaves</span> <span class="o">=</span> <span class="p">[]</span>
        <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">n</span><span class="p">):</span>
            <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">neighbors</span><span class="p">[</span><span class="n">i</span><span class="p">])</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
                <span class="n">leaves</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">i</span><span class="p">)</span>

        <span class="c1"># Trim the leaves until reaching the centroids</span>
        <span class="n">remaining_nodes</span> <span class="o">=</span> <span class="n">n</span>
        <span class="k">while</span> <span class="n">remaining_nodes</span> <span class="o">&gt;</span> <span class="mi">2</span><span class="p">:</span>
            <span class="n">remaining_nodes</span> <span class="o">-=</span> <span class="nb">len</span><span class="p">(</span><span class="n">leaves</span><span class="p">)</span>
            <span class="n">new_leaves</span> <span class="o">=</span> <span class="p">[]</span>
            <span class="c1"># remove the current leaves along with the edges</span>
            <span class="k">while</span> <span class="n">leaves</span><span class="p">:</span>
                <span class="n">leaf</span> <span class="o">=</span> <span class="n">leaves</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
                <span class="c1"># the only neighbor left for the leaf node</span>
                <span class="n">neighbor</span> <span class="o">=</span> <span class="n">neighbors</span><span class="p">[</span><span class="n">leaf</span><span class="p">]</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
                <span class="c1"># remove the only edge left</span>
                <span class="n">neighbors</span><span class="p">[</span><span class="n">neighbor</span><span class="p">]</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">leaf</span><span class="p">)</span>
                <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">neighbors</span><span class="p">[</span><span class="n">neighbor</span><span class="p">])</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
                    <span class="n">new_leaves</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">neighbor</span><span class="p">)</span>

            <span class="c1"># prepare for the next round</span>
            <span class="n">leaves</span> <span class="o">=</span> <span class="n">new_leaves</span>

        <span class="c1"># The remaining nodes are the centroids of the graph</span>
        <span class="k">return</span> <span class="n">leaves</span>
               
</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 210 Course Schedule II</title>
			<link>https://www.dincerbakkal.com/posts/leetcode210/</link>
			<pubDate>Wed, 04 Aug 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode210/</guid>
			<description>For example, the pair [0, 1], indicates that to take course 0 you have to first take course 1. Return the ordering of courses you should take to finish all courses. If there are many valid answers, return any of them. If it is impossible to finish all courses, return an empty array.
Input: numCourses = 2, prerequisites = [[1,0]] Output: [0,1] Explanation: There are a total of 2 courses to take.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>For example, the pair [0, 1], indicates that to take course 0 you have to first take course 1.
Return the ordering of courses you should take to finish all courses. If there are many valid answers, return any of them. If it is impossible to finish all courses, return an empty array.</p>
<!-- raw HTML omitted -->
<pre><code>Input: numCourses = 2, prerequisites = [[1,0]]
Output: [0,1]
Explanation: There are a total of 2 courses to take. To take course 1 you should have finished course 0. So the correct course order is [0,1].
</code></pre><!-- raw HTML omitted -->
<pre><code>Input: numCourses = 4, prerequisites = [[1,0],[2,0],[3,1],[3,2]]
Output: [0,2,1,3]
Explanation: There are a total of 4 courses to take. To take course 3 you should have finished both courses 1 and 2. Both courses 1 and 2 should be taken after you finished course 0.
So one correct course order is [0,1,2,3]. Another correct ordering is [0,2,1,3].
</code></pre><!-- raw HTML omitted -->
<ul>
<li>Soruda bize kurs sayısı ve bu kursların ön koşullarının olduğu bir liste veriliyor.Bazı kursları almak için önce ön koşulu olan kursu almak lazım.</li>
<li>Cevap olarakta tüm kursları alabileceğimiz sıralamayı dönmemiz isteniyor.</li>
<li>Eğer tüm kursları alamıyorsak o zaman boş liste dönmemiz isteniyor.</li>
<li>Tüm kursları alamama durumunu sağlayan şey [[1,0],[0,1]] görüldüğü gibi iki kursun birbirinin ön koşulu olup bir döngüye girmesi sonucu oluşur.</li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">findOrder</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">numCourses</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span> <span class="n">prerequisites</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">]])</span> <span class="o">-&gt;</span> <span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">]:</span>
        <span class="c1">#ilk olarak prereq adında tüm kurslar için ön koşul listesi boş bir dict oluştururuz.</span>
        <span class="n">prereq</span> <span class="o">=</span> <span class="p">{</span><span class="n">c</span><span class="p">:[]</span> <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">numCourses</span><span class="p">)}</span>
        <span class="c1">#daha sonra bu dict doldururuz.Artık hangi kursun ön koşulunun hangi kurs olduğunu biliyoruz.</span>
        <span class="k">for</span> <span class="n">crs</span><span class="p">,</span><span class="n">pre</span> <span class="ow">in</span> <span class="n">prerequisites</span><span class="p">:</span>
            <span class="n">prereq</span><span class="p">[</span><span class="n">crs</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">pre</span><span class="p">)</span>
        <span class="c1">#sıralı kurs listesini döneceğimiz output listesini oluştururuz.    </span>
        <span class="n">output</span> <span class="o">=</span> <span class="p">[]</span>
        <span class="c1">#visit adında bir set() liste oluştururuz.Kursumuz bu listede ise zaten ziyaret etmişizdir.</span>
        <span class="c1">#cycle adındaki liste ise kursların ön koşul kurslarını bulmak isterken kullanacağımız liste.</span>
        <span class="n">visit</span><span class="p">,</span><span class="n">cycle</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(),</span> <span class="nb">set</span><span class="p">()</span>
        <span class="k">def</span> <span class="nf">dfs</span><span class="p">(</span><span class="n">crs</span><span class="p">):</span>
            <span class="c1">#eğer kurs ön koşul aramak için oluşturduğumuz cycle listede ise döngü oluştu False dön</span>
            <span class="k">if</span> <span class="n">crs</span> <span class="ow">in</span> <span class="n">cycle</span><span class="p">:</span>
                <span class="k">return</span> <span class="kc">False</span>
            <span class="c1">#eğer kurs daha önce ziyaret ettiğimiz visit listede ise tekrar uğraşma True dön</span>
            <span class="k">if</span> <span class="n">crs</span> <span class="ow">in</span> <span class="n">visit</span><span class="p">:</span>
                <span class="k">return</span> <span class="kc">True</span>
             <span class="c1">#kursu ön koşul döngü listesine ekle</span>
            <span class="n">cycle</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">crs</span><span class="p">)</span>
            <span class="c1">#kursun ön koşul kursları için dfs fonksiyonunu çağır.İşte burası döngüyü oluşturan kısım.</span>
            <span class="k">for</span> <span class="n">pre</span> <span class="ow">in</span> <span class="n">prereq</span><span class="p">[</span><span class="n">crs</span><span class="p">]:</span>
                <span class="c1">#eğer dfs false dönüyor ise direk false dön</span>
                <span class="k">if</span> <span class="n">dfs</span><span class="p">(</span><span class="n">pre</span><span class="p">)</span><span class="o">==</span><span class="kc">False</span><span class="p">:</span>
                    <span class="k">return</span> <span class="kc">False</span>
            <span class="c1">#Kursu ön koşul döngü listesinden çıkar</span>
            <span class="n">cycle</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">crs</span><span class="p">)</span>
            <span class="c1">#kursu ziyaret edilmiş kurslar listesine ekle</span>
            <span class="n">visit</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">crs</span><span class="p">)</span>
            <span class="c1">#kursu cevap olarak döneceğimiz output listesine ekle</span>
            <span class="n">output</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">crs</span><span class="p">)</span>
            <span class="k">return</span> <span class="kc">True</span>
        <span class="c1">#listedeki tüm kurslar için dfs fonksiyonunu çağır herhangi biri false alır ise boş liste dön</span>
        <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">numCourses</span><span class="p">):</span>
            <span class="k">if</span> <span class="n">dfs</span><span class="p">(</span><span class="n">c</span><span class="p">)</span> <span class="o">==</span><span class="kc">False</span><span class="p">:</span>
                <span class="k">return</span> <span class="p">[]</span>
        <span class="k">return</span> <span class="n">output</span>
               
</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 207 Course Schedule</title>
			<link>https://www.dincerbakkal.com/posts/leetcode207/</link>
			<pubDate>Tue, 03 Aug 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode207/</guid>
			<description>For example, the pair [0, 1], indicates that to take course 0 you have to first take course 1. Return true if you can finish all courses. Otherwise, return false.
Input: numCourses = 2, prerequisites = [[1,0]] Output: true Explanation: There are a total of 2 courses to take. To take course 1 you should have finished course 0. So it is possible. Input: numCourses = 2, prerequisites = [[1,0],[0,1]] Output: false Explanation: There are a total of 2 courses to take.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>For example, the pair [0, 1], indicates that to take course 0 you have to first take course 1.
Return true if you can finish all courses. Otherwise, return false.</p>
<!-- raw HTML omitted -->
<pre><code>Input: numCourses = 2, prerequisites = [[1,0]]
Output: true
Explanation: There are a total of 2 courses to take. 
To take course 1 you should have finished course 0. So it is possible.
</code></pre><!-- raw HTML omitted -->
<pre><code>Input: numCourses = 2, prerequisites = [[1,0],[0,1]]
Output: false
Explanation: There are a total of 2 courses to take. 
To take course 1 you should have finished course 0, and to take course 0 you should also have finished course 1. So it is impossible.
</code></pre><!-- raw HTML omitted -->
<ul>
<li>Soruda bize kurs sayısı ve bu kursların ön koşullarının olduğu bir liste veriliyor.Bazı kursları almak için önce ön koşulu olan kursu almak lazım.Tüm kursları alabiliyorsak True alamıyorsak False dönmemiz isteniyor.</li>
<li>Tüm kursları alamama durumunu sağlayan şey [[1,0],[0,1]] görüldüğü gibi iki kursun birbirinin ön koşulu olup bir döngüye girmesi sonucu oluşur.</li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">canFinish</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">numCourses</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span> <span class="n">prerequisites</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">]])</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
        <span class="c1">#ilk olarak preMap adında tüm kurslar için ön koşul listesi boş bir dict oluştururuz.</span>
        <span class="n">preMap</span> <span class="o">=</span> <span class="p">{</span><span class="n">i</span><span class="p">:[]</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">numCourses</span><span class="p">)}</span>
        <span class="c1">#daha sonra bu dict doldururuz.Artık hangi kursun ön koşulunun hangi kurs olduğunu biliyoruz.</span>
        <span class="k">for</span> <span class="n">crs</span><span class="p">,</span><span class="n">pre</span> <span class="ow">in</span> <span class="n">prerequisites</span><span class="p">:</span>
            <span class="n">preMap</span><span class="p">[</span><span class="n">crs</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">pre</span><span class="p">)</span>
        
        <span class="c1">#şimdi yapacağımız şey visitSet adında ziyaret ettiğimiz kursları koyacağımız bir set()</span>
        <span class="c1">#bu sayede aynı kursu gördüğümüzde bir döngü olduğunu anlayıp False dönebiliriz</span>
        <span class="n">visitSet</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
        <span class="c1">#dfs ana fonksiyonu yazalım</span>
        <span class="k">def</span> <span class="nf">dfs</span><span class="p">(</span><span class="n">crs</span><span class="p">):</span>
            <span class="c1">#eğer kurs daha önce ziyaret edildi ise False dön</span>
            <span class="k">if</span> <span class="n">crs</span> <span class="ow">in</span> <span class="n">visitSet</span><span class="p">:</span>
                <span class="k">return</span> <span class="kc">False</span>
            <span class="c1">#eğer kursun bir ön koşul kursu yok ise True dön</span>
            <span class="k">if</span> <span class="n">preMap</span><span class="p">[</span><span class="n">crs</span><span class="p">]</span> <span class="o">==</span> <span class="p">[]:</span>
                <span class="k">return</span> <span class="kc">True</span>
            <span class="c1">#kursu ziyaret edilenlere ekle</span>
            <span class="n">visitSet</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">crs</span><span class="p">)</span>
            <span class="c1">#kursun ön koşul kursları için dfs fonksiyonunu çağır</span>
            <span class="k">for</span> <span class="n">pre</span> <span class="ow">in</span> <span class="n">preMap</span><span class="p">[</span><span class="n">crs</span><span class="p">]:</span>
                <span class="c1">#eğer dfs false dönüyor ise direk false dön</span>
                <span class="k">if</span> <span class="ow">not</span> <span class="n">dfs</span><span class="p">(</span><span class="n">pre</span><span class="p">):</span><span class="k">return</span> <span class="kc">False</span>
            <span class="c1">#kursu ziyaret edilmiş kurslardan çıkar</span>
            <span class="n">visitSet</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">crs</span><span class="p">)</span>
            <span class="c1">#bu kurs ile ilgili daha sonraki işlemlerin daha hızlı olması için önkoşul kurslarını boşalt</span>
            <span class="n">preMap</span><span class="p">[</span><span class="n">crs</span><span class="p">]</span><span class="o">=</span><span class="p">[]</span>
            <span class="k">return</span> <span class="kc">True</span>
        <span class="c1">#listedeki tüm kurslar için dfs fonksiyonunu çağır herhangi biri false alır ise direk false dön</span>
        <span class="k">for</span> <span class="n">crs</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">numCourses</span><span class="p">):</span>
            <span class="k">if</span> <span class="ow">not</span> <span class="n">dfs</span><span class="p">(</span><span class="n">crs</span><span class="p">):</span><span class="k">return</span> <span class="kc">False</span>
        <span class="k">return</span> <span class="kc">True</span>
        

               
</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 767 Reorganize String</title>
			<link>https://www.dincerbakkal.com/posts/leetcode767/</link>
			<pubDate>Mon, 02 Aug 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode767/</guid>
			<description>Return any possible rearrangement of s or return &amp;quot;&amp;quot; if not possible.
Input: s = &amp;quot;aab&amp;quot; Output: &amp;quot;aba&amp;quot; Input: s = &amp;quot;aaab&amp;quot; Output: &amp;quot;&amp;quot;  We use max heap to solve this question. We need to calculate the frequence of each letter. The we store the letter and frequence as pair based on its frequence in max heap and we pop the first letter and frequence pair from heap as the pre pair and append the letter to result string.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>Return any possible rearrangement of s or return &quot;&quot; if not possible.</p>
<!-- raw HTML omitted -->
<pre><code>Input: s = &quot;aab&quot;
Output: &quot;aba&quot;
</code></pre><!-- raw HTML omitted -->
<pre><code>Input: s = &quot;aaab&quot;
Output: &quot;&quot;
</code></pre><!-- raw HTML omitted -->
<ul>
<li>We use max heap to solve this question. We need to calculate the frequence of each letter. The we store the letter and frequence as pair based on its frequence in max heap and we pop the first letter and frequence pair from heap as the pre pair and append the letter to result string. We iterate the heap, pop the letter and frequence pair from heap as current pair. We append the current letter to result string and update pre pair’s frequence to minus 1. Now if the pre letter frequence is not 0, we re-push the letter with updated frequence pair to heap and let the pre pair now equal to current pair until there is nothing in heap. If the result string is not equal to the length of given string return ‘’ otherwise return result string.</li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">reorganizeString</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">S</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
            <span class="k">if</span> <span class="ow">not</span> <span class="n">S</span><span class="p">:</span> <span class="k">return</span> <span class="s2">&#34;&#34;</span> 
            <span class="c1"># create a counter </span>
            <span class="n">heap</span> <span class="o">=</span> <span class="p">[]</span>
            <span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">value</span> <span class="ow">in</span> <span class="n">collections</span><span class="o">.</span><span class="n">Counter</span><span class="p">(</span><span class="n">S</span><span class="p">)</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
                <span class="n">heapq</span><span class="o">.</span><span class="n">heappush</span><span class="p">(</span><span class="n">heap</span><span class="p">,[</span><span class="o">-</span><span class="n">value</span><span class="p">,</span><span class="n">key</span><span class="p">])</span>

            <span class="n">res</span> <span class="o">=</span> <span class="s2">&#34;&#34;</span>
            <span class="n">pre</span> <span class="o">=</span> <span class="n">heapq</span><span class="o">.</span><span class="n">heappop</span><span class="p">(</span><span class="n">heap</span><span class="p">)</span>
            <span class="n">res</span><span class="o">+=</span> <span class="n">pre</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>

            <span class="k">while</span> <span class="n">heap</span><span class="p">:</span> 
                <span class="n">curr</span> <span class="o">=</span> <span class="n">heapq</span><span class="o">.</span><span class="n">heappop</span><span class="p">(</span><span class="n">heap</span><span class="p">)</span>
                <span class="n">res</span><span class="o">+=</span><span class="n">curr</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>

                <span class="n">pre</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">+=</span><span class="mi">1</span>
                <span class="k">if</span> <span class="n">pre</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">&lt;</span><span class="mi">0</span><span class="p">:</span>
                    <span class="n">heapq</span><span class="o">.</span><span class="n">heappush</span><span class="p">(</span><span class="n">heap</span><span class="p">,</span><span class="n">pre</span><span class="p">)</span>
                <span class="n">pre</span> <span class="o">=</span> <span class="n">curr</span> 

            <span class="k">return</span> <span class="s2">&#34;&#34;</span> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">res</span><span class="p">)</span><span class="o">!=</span><span class="nb">len</span><span class="p">(</span><span class="n">S</span><span class="p">)</span> <span class="k">else</span> <span class="n">res</span>
               
</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 215 Kth Largest Element in an Array</title>
			<link>https://www.dincerbakkal.com/posts/leetcode215/</link>
			<pubDate>Sun, 01 Aug 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode215/</guid>
			<description>Note that it is the kth largest element in the sorted order, not the kth distinct element.
Input: nums = [3,2,1,5,6,4], k = 2 Output: 5 Input: nums = [3,2,3,1,2,4,5,5,6], k = 4 Output: 4  You can build a heap from input array and pop the heap until there k element left. Building heap is taking O(nlogn) time complexity.  def findKthLargest(self, nums: List[int], k: int) -&amp;gt; int: heapq.heapify(nums) amount = len(nums) while amount &amp;gt; k: heapq.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>Note that it is the kth largest element in the sorted order, not the kth distinct element.</p>
<!-- raw HTML omitted -->
<pre><code>Input: nums = [3,2,1,5,6,4], k = 2
Output: 5
</code></pre><!-- raw HTML omitted -->
<pre><code>Input: nums = [3,2,3,1,2,4,5,5,6], k = 4
Output: 4
</code></pre><!-- raw HTML omitted -->
<ul>
<li>You can build a heap from input array and pop the heap until there k element left. Building heap is taking O(nlogn) time complexity.</li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">def</span> <span class="nf">findKthLargest</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">nums</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">],</span> <span class="n">k</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
        <span class="n">heapq</span><span class="o">.</span><span class="n">heapify</span><span class="p">(</span><span class="n">nums</span><span class="p">)</span>
        <span class="n">amount</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">nums</span><span class="p">)</span>
        <span class="k">while</span> <span class="n">amount</span> <span class="o">&gt;</span> <span class="n">k</span><span class="p">:</span>
            <span class="n">heapq</span><span class="o">.</span><span class="n">heappop</span><span class="p">(</span><span class="n">nums</span><span class="p">)</span>
            <span class="n">amount</span> <span class="o">-=</span> <span class="mi">1</span>
        <span class="k">return</span> <span class="n">nums</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
        
        
        
        
</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 451 Sort Characters By Frequency</title>
			<link>https://www.dincerbakkal.com/posts/leetcode451/</link>
			<pubDate>Thu, 29 Jul 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode451/</guid>
			<description>Return the sorted string. If there are multiple answers, return any of them.
Input: s = &amp;quot;tree&amp;quot; Output: &amp;quot;eert&amp;quot; Explanation: &#39;e&#39; appears twice while &#39;r&#39; and &#39;t&#39; both appear once. So &#39;e&#39; must appear before both &#39;r&#39; and &#39;t&#39;. Therefore &amp;quot;eetr&amp;quot; is also a valid answer. Input: s = &amp;quot;cccaaa&amp;quot; Output: &amp;quot;aaaccc&amp;quot; Explanation: Both &#39;c&#39; and &#39;a&#39; appear three times, so both &amp;quot;cccaaa&amp;quot; and &amp;quot;aaaccc&amp;quot; are valid answers. Note that &amp;quot;cacaca&amp;quot; is incorrect, as the same characters must be together.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>Return the sorted string. If there are multiple answers, return any of them.</p>
<!-- raw HTML omitted -->
<pre><code>Input: s = &quot;tree&quot;
Output: &quot;eert&quot;
Explanation: 'e' appears twice while 'r' and 't' both appear once.
So 'e' must appear before both 'r' and 't'. Therefore &quot;eetr&quot; is also a valid answer.
</code></pre><!-- raw HTML omitted -->
<pre><code>Input: s = &quot;cccaaa&quot;
Output: &quot;aaaccc&quot;
Explanation: Both 'c' and 'a' appear three times, so both &quot;cccaaa&quot; and &quot;aaaccc&quot; are valid answers.
Note that &quot;cacaca&quot; is incorrect, as the same characters must be together.
</code></pre><!-- raw HTML omitted -->
<ul>
<li>Get frequence of each letter and push frequence and letter pair into heap. After pushed all frequence and letter pair into heap, then we pop and append the current letter*frequence to result string.</li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">def</span> <span class="nf">frequencySort</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">s</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
        <span class="n">heap</span> <span class="o">=</span> <span class="p">[]</span>
        <span class="k">for</span> <span class="n">v</span><span class="p">,</span> <span class="n">c</span> <span class="ow">in</span> <span class="n">collections</span><span class="o">.</span><span class="n">Counter</span><span class="p">(</span><span class="n">s</span><span class="p">)</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
            <span class="n">heapq</span><span class="o">.</span><span class="n">heappush</span><span class="p">(</span><span class="n">heap</span><span class="p">,[</span><span class="o">-</span><span class="n">c</span><span class="p">,</span><span class="n">v</span><span class="p">])</span>
        <span class="n">res</span> <span class="o">=</span> <span class="s2">&#34;&#34;</span>
        <span class="k">while</span> <span class="n">heap</span><span class="p">:</span>
            <span class="n">c</span><span class="p">,</span> <span class="n">v</span> <span class="o">=</span> <span class="n">heapq</span><span class="o">.</span><span class="n">heappop</span><span class="p">(</span><span class="n">heap</span><span class="p">)</span>
            <span class="n">res</span> <span class="o">+=</span> <span class="n">v</span><span class="o">*-</span><span class="n">c</span>
        <span class="k">return</span> <span class="n">res</span>
        
        
        
        
</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 347 Top K Frequent Elements</title>
			<link>https://www.dincerbakkal.com/posts/leetcode347/</link>
			<pubDate>Wed, 28 Jul 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode347/</guid>
			<description>Soru Given an integer array nums and an integer k, return the k most frequent elements. You may return the answer in any order.
Örnek 1 Input: nums = [1,1,1,2,2,3], k = 2 Output: [1,2] Örnek 2 Input: nums = [1], k = 1 Output: [1] Çözüm  First we need count the appearence for each element store it in dictionary. Then we iterate the dictionary, and push the value-key pair (or count-value pair) into heap, if the the heap length less than k.</description>
			<content type="html"><![CDATA[<h3 id="soru">Soru</h3>
<p>Given an integer array nums and an integer k, return the k most frequent elements. You may return the answer in any order.</p>
<h3 id="örnek-1">Örnek 1</h3>
<pre><code>Input: nums = [1,1,1,2,2,3], k = 2
Output: [1,2]
</code></pre><h3 id="örnek-2">Örnek 2</h3>
<pre><code>Input: nums = [1], k = 1
Output: [1]
</code></pre><h3 id="çözüm">Çözüm</h3>
<ul>
<li>First we need count the appearence for each element store it in dictionary. Then we iterate the dictionary, and push the value-key pair (or count-value pair) into heap, if the the heap length less than k. When heap length is greater or equal than k, we push the current value-key pair into heap and pop one from the heap in order to keep the length of the heap equal to key. After iteration, we will get the k most frequent elements pair, we only need to return the value not the count.</li>
</ul>
<h2 id="code">Code</h2>
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">topKFrequent</span><span class="p">(</span><span class="n">nums</span><span class="p">,</span> <span class="n">k</span><span class="p">):</span>
        <span class="c1"># Elemanların frekansını hesapla</span>
        <span class="n">count</span> <span class="o">=</span> <span class="n">Counter</span><span class="p">(</span><span class="n">nums</span><span class="p">)</span>
        <span class="c1"># En sık kullanılan k elemanı bulmak için min-heap kullan</span>
        <span class="c1"># Heap içinde (frekans, eleman) tuple&#39;ları sakla</span>
        <span class="n">heap</span> <span class="o">=</span> <span class="p">[]</span>
        <span class="k">for</span> <span class="n">num</span><span class="p">,</span> <span class="n">freq</span> <span class="ow">in</span> <span class="n">count</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
            <span class="n">heapq</span><span class="o">.</span><span class="n">heappush</span><span class="p">(</span><span class="n">heap</span><span class="p">,</span> <span class="p">(</span><span class="o">-</span><span class="n">freq</span><span class="p">,</span> <span class="n">num</span><span class="p">))</span>
        
        <span class="c1"># Heap&#39;ten en sık kullanılan k elemanı çıkar</span>
        <span class="k">return</span> <span class="p">[</span><span class="n">heapq</span><span class="o">.</span><span class="n">heappop</span><span class="p">(</span><span class="n">heap</span><span class="p">)[</span><span class="mi">1</span><span class="p">]</span> <span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">k</span><span class="p">)][::</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
        
        
        
        
</code></pre></div><h3 id="complexity">Complexity</h3>
<!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 973 K Closest Points to Origin</title>
			<link>https://www.dincerbakkal.com/posts/leetcode973/</link>
			<pubDate>Tue, 27 Jul 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode973/</guid>
			<description>The distance between two points on the X-Y plane is the Euclidean distance (i.e., √(x1 - x2)2 + (y1 - y2)2).
You may return the answer in any order. The answer is guaranteed to be unique (except for the order that it is in).
 Input: points = [[1,3],[-2,2]], k = 1 Output: [[-2,2]] Explanation: The distance between (1, 3) and the origin is sqrt(10). The distance between (-2, 2) and the origin is sqrt(8).</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>The distance between two points on the X-Y plane is the Euclidean distance (i.e., √(x1 - x2)2 + (y1 - y2)2).</p>
<p>You may return the answer in any order. The answer is guaranteed to be unique (except for the order that it is in).</p>
<!-- raw HTML omitted -->
<pre><code><figure><img src="/image/973x1.jpg"
         alt="image"/>
</figure>


Input: points = [[1,3],[-2,2]], k = 1
Output: [[-2,2]]
Explanation:
The distance between (1, 3) and the origin is sqrt(10).
The distance between (-2, 2) and the origin is sqrt(8).
Since sqrt(8) &lt; sqrt(10), (-2, 2) is closer to the origin.
We only want the closest k = 1 points from the origin, so the answer is just [[-2,2]].
</code></pre><!-- raw HTML omitted -->
<pre><code>Input: points = [[3,3],[5,-1],[-2,4]], k = 2
Output: [[3,3],[-2,4]]
Explanation: The answer [[-2,4],[3,3]] would also be accepted.
</code></pre><!-- raw HTML omitted -->
<ul>
<li>Soruda bize bazı kordinatlar ve k sayısı veriliyor.Ve bizden origin noktasına en yakın k. kordinatı bulmamız isteniyor.</li>
<li>Bu soruda heap kullanarak sıralama yapar ve sonucu bulabiliriz.</li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">kClosest</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">points</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">]],</span> <span class="n">k</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">List</span><span class="p">[</span><span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">]]:</span>
        <span class="n">minHeap</span> <span class="o">=</span> <span class="p">[]</span>
        <span class="k">for</span> <span class="n">x</span><span class="p">,</span><span class="n">y</span> <span class="ow">in</span> <span class="n">points</span><span class="p">:</span>
            <span class="n">dist</span> <span class="o">=</span> <span class="p">(</span><span class="n">x</span> <span class="o">**</span> <span class="mi">2</span><span class="p">)</span><span class="o">+</span><span class="p">(</span><span class="n">y</span><span class="o">**</span><span class="mi">2</span><span class="p">)</span>
            <span class="n">minHeap</span><span class="o">.</span><span class="n">append</span><span class="p">([</span><span class="n">dist</span><span class="p">,</span><span class="n">x</span><span class="p">,</span><span class="n">y</span><span class="p">])</span>
        
        <span class="n">heapq</span><span class="o">.</span><span class="n">heapify</span><span class="p">(</span><span class="n">minHeap</span><span class="p">)</span><span class="c1">#minHeap listemizi heap yapısına çevirdik.</span>
        <span class="n">res</span> <span class="o">=</span> <span class="p">[]</span>
        
        <span class="k">while</span> <span class="n">k</span> <span class="o">&gt;</span><span class="mi">0</span><span class="p">:</span>
            <span class="n">dist</span><span class="p">,</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="o">=</span> <span class="n">heapq</span><span class="o">.</span><span class="n">heappop</span><span class="p">(</span><span class="n">minHeap</span><span class="p">)</span><span class="c1">#heap yapısındaki en küçük değeri getirir.:000şipğğ3jupşkldfpopğc</span>
            
            
            
            <span class="n">i</span>            <span class="n">k</span><span class="o">-=</span><span class="mi">1</span>
        <span class="k">return</span> <span class="n">res</span>
        
        
        
        
</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 230 Kth Smallest Element in a BST</title>
			<link>https://www.dincerbakkal.com/posts/leetcode230/</link>
			<pubDate>Sun, 25 Jul 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode230/</guid>
			<description>Soru Given the root of a binary search tree, and an integer k, return the kth smallest value (1-indexed) of all the values of the nodes in the tree.
Örnek 1  Input: root = [3,1,4,null,2], k = 1 Output: 1 Örnek 2  Input: root = [5,3,6,2,4,null,null,1], k = 3 Output: 3 Çözüm  Soruda bir Binary Search Tree (BST) veriliyor ve bu ağaçta k. en küçük elemanı bulmamız isteniyor.</description>
			<content type="html"><![CDATA[<h3 id="soru">Soru</h3>
<p>Given the root of a binary search tree, and an integer k, return the kth smallest value (1-indexed) of all the values of the nodes in the tree.</p>
<h3 id="örnek-1">Örnek 1</h3>
<pre><code><figure><img src="/image/239ex1.jpg"
         alt="image"/>
</figure>


Input: root = [3,1,4,null,2], k = 1
Output: 1
</code></pre><h3 id="örnek-2">Örnek 2</h3>
<pre><code><figure><img src="/image/239ex2.jpg"
         alt="image"/>
</figure>


Input: root = [5,3,6,2,4,null,null,1], k = 3
Output: 3
</code></pre><h3 id="çözüm">Çözüm</h3>
<ul>
<li>Soruda bir Binary Search Tree (BST) veriliyor ve bu ağaçta k. en küçük elemanı bulmamız isteniyor.</li>
<li>Bu klasik bir Binary Search Tree (BST) sorusu ve inorder traversal mantığıyla çok güzel çözülüyor.</li>
<li>BST&rsquo;de:Sol alt ağaçtaki tüm değerler: küçük,Sağ alt ağaçtaki tüm değerler: büyük</li>
<li>Bu yüzden:BST&rsquo;nin inorder traversal sonucu: küçükten büyüğe sıralanmış bir liste verir.</li>
<li>Hedefimiz:BST&rsquo;yi inorder traversal ile gezmek ,k. sıradaki elemanı bulduğumuzda hemen sonucu döndürmek</li>
</ul>
<h2 id="code">Code</h2>
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">kthSmallest</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">root</span><span class="p">,</span> <span class="n">k</span><span class="p">):</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">count</span> <span class="o">=</span> <span class="mi">0</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">result</span> <span class="o">=</span> <span class="kc">None</span>

        <span class="k">def</span> <span class="nf">inorder</span><span class="p">(</span><span class="n">node</span><span class="p">):</span>
            <span class="k">if</span> <span class="ow">not</span> <span class="n">node</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">result</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
                <span class="k">return</span>
            
            <span class="n">inorder</span><span class="p">(</span><span class="n">node</span><span class="o">.</span><span class="n">left</span><span class="p">)</span>
            
            <span class="c1"># Düğüm ziyaret edildiğinde sayacı artır</span>
            <span class="bp">self</span><span class="o">.</span><span class="n">count</span> <span class="o">+=</span> <span class="mi">1</span>
            <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">count</span> <span class="o">==</span> <span class="n">k</span><span class="p">:</span>
                <span class="bp">self</span><span class="o">.</span><span class="n">result</span> <span class="o">=</span> <span class="n">node</span><span class="o">.</span><span class="n">val</span>
                <span class="k">return</span>
            
            <span class="n">inorder</span><span class="p">(</span><span class="n">node</span><span class="o">.</span><span class="n">right</span><span class="p">)</span>
        
        <span class="n">inorder</span><span class="p">(</span><span class="n">root</span><span class="p">)</span>
        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">result</span>

           
        
</code></pre></div><h3 id="comple">Comple</h3>
<ul>
<li>Time complexity (Zaman Karmaşıklığı) : O(n) denilebilir.Aslında O(n+k) n ağacın yüksekliği</li>
<li>Space complexity : O(n)</li>
</ul>
]]></content>
		</item>
		
		<item>
			<title>Leetcode 11 Container With Most Water</title>
			<link>https://www.dincerbakkal.com/posts/leetcode011/</link>
			<pubDate>Sat, 24 Jul 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode011/</guid>
			<description>Soru You are given an integer array height of length n. There are n vertical lines drawn such that the two endpoints of the ith line are (i, 0) and (i, height[i]).
Find two lines that together with the x-axis form a container, such that the container contains the most water.
Return the maximum amount of water a container can store.
Notice that you may not slant the container.
Örnek 1  Input: height = [1,8,6,2,5,4,8,3,7] Output: 49 Explanation: The above vertical lines are represented by array [1,8,6,2,5,4,8,3,7].</description>
			<content type="html"><![CDATA[<h3 id="soru">Soru</h3>
<p>You are given an integer array height of length n. There are n vertical lines drawn such that the two endpoints of the ith line are (i, 0) and (i, height[i]).</p>
<p>Find two lines that together with the x-axis form a container, such that the container contains the most water.</p>
<p>Return the maximum amount of water a container can store.</p>
<p>Notice that you may not slant the container.</p>
<h3 id="örnek-1">Örnek 1</h3>
<pre><code><figure><img src="/image/011ex1.jpg"
         alt="image"/>
</figure>


Input: height = [1,8,6,2,5,4,8,3,7]
Output: 49
Explanation: The above vertical lines are represented by array [1,8,6,2,5,4,8,3,7]. In this case, the max area of water (blue section) the container can contain is 49.
</code></pre><h3 id="örnek-2">Örnek 2</h3>
<pre><code>Input: height = [1,1]
Output: 1
</code></pre><h3 id="çözüm">Çözüm</h3>
<ul>
<li>Verilen bir yükseklik listesiyle en fazla suyu tutabilecek iki çizgiyi bulmanızı isteyen bir problem. Bu problemde amaç, iki çizgi arasındaki maksimum su miktarını tutan alanı hesaplamaktır. Çizgilerin konumları listelenmiş ve bunların arasındaki su hacmi, çizgilerin yüksekliği ve aralarındaki mesafe ile belirlenir.</li>
<li>Bu problem genellikle &ldquo;two-pointer&rdquo; tekniği kullanılarak çözülür. Burada, iki işaretçi (pointer) dizinin başında ve sonunda başlar ve su tutma kapasitesini maksimize edecek şekilde içe doğru hareket ederler.</li>
<li>Çalışma Mekanizması:</li>
<li>İşaretçilerin İnitialize Edilmesi: left işaretçisi dizinin başında, right işaretçisi ise dizinin sonunda başlar.</li>
<li>Su Kapasitesinin Hesaplanması: İki çizgi arasındaki genişlik (width) ve iki çizgi arasındaki minimum yükseklik (water_height) kullanılarak mevcut su kapasitesi hesaplanır.</li>
<li>Maksimum Su Kapasitesinin Güncellenmesi: Şu ana kadar hesaplanan maksimum su kapasitesi (max_water) ile mevcut kapasite karşılaştırılır ve daha büyük olanı kaydedilir.</li>
<li>İşaretçilerin Hareketi: En düşük çizgiye sahip tarafın işaretçisi bir adım içe doğru hareket eder, böylece potansiyel olarak daha yüksek bir çizgi ile daha büyük bir alan hesaplaması yapılır.</li>
<li>Sonuç Döndürme: İşaretçiler birbiriyle kesişene kadar bu işlem tekrarlanır ve hesaplanan maksimum su kapasitesi döndürülür.</li>
</ul>
<h2 id="code">Code</h2>
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">maxArea</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">height</span><span class="p">):</span>
        <span class="n">left</span><span class="p">,</span> <span class="n">right</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">height</span><span class="p">)</span> <span class="o">-</span> <span class="mi">1</span>
        <span class="n">max_water</span> <span class="o">=</span> <span class="mi">0</span>
        <span class="k">while</span> <span class="n">left</span> <span class="o">&lt;</span> <span class="n">right</span><span class="p">:</span>
            <span class="c1"># İki çizgi arasındaki mesafeyi ve en düşük çizgiyi kullanarak su kapasitesini hesapla</span>
            <span class="n">width</span> <span class="o">=</span> <span class="n">right</span> <span class="o">-</span> <span class="n">left</span>
            <span class="n">water_height</span> <span class="o">=</span> <span class="nb">min</span><span class="p">(</span><span class="n">height</span><span class="p">[</span><span class="n">left</span><span class="p">],</span> <span class="n">height</span><span class="p">[</span><span class="n">right</span><span class="p">])</span>
            <span class="n">max_water</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="n">max_water</span><span class="p">,</span> <span class="n">water_height</span> <span class="o">*</span> <span class="n">width</span><span class="p">)</span>
            
            <span class="c1"># Su tutma kapasitesini artırmak için daha düşük yükseklikteki çizgiyi hareket ettir</span>
            <span class="k">if</span> <span class="n">height</span><span class="p">[</span><span class="n">left</span><span class="p">]</span> <span class="o">&lt;</span> <span class="n">height</span><span class="p">[</span><span class="n">right</span><span class="p">]:</span>
                <span class="n">left</span> <span class="o">+=</span> <span class="mi">1</span>
            <span class="k">else</span><span class="p">:</span>
                <span class="n">right</span> <span class="o">-=</span> <span class="mi">1</span>
        <span class="k">return</span> <span class="n">max_water</span>
        
</code></pre></div><h3 id="complexity">Complexity</h3>
<ul>
<li>Time complexity (Zaman Karmaşıklığı) : O(n), burada n dizinin uzunluğudur. Her eleman yalnızca bir kez işaretçiler tarafından incelenir.</li>
<li>Space complexity (Alan Karmaşıklığı) : O(1), çünkü ekstra bir alan kullanılmaz ve yalnızca iki işaretçi ile çözüm sağlanır.</li>
</ul>
]]></content>
		</item>
		
		<item>
			<title>Leetcode 42 Trapping Rain Water</title>
			<link>https://www.dincerbakkal.com/posts/leetcode042/</link>
			<pubDate>Sat, 24 Jul 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode042/</guid>
			<description>Soru Given n non-negative integers representing an elevation map where the width of each bar is 1, compute how much water it can trap after raining.
Örnek 1  Input: height = [0,1,0,2,1,0,1,3,2,1,2,1] Output: 6 Explanation: The above elevation map (black section) is represented by array [0,1,0,2,1,0,1,3,2,1,2,1]. In this case, 6 units of rain water (blue section) are being trapped. Örnek 2 Input: height = [4,2,0,3,2,5] Output: 9 Çözüm  Verilen bir yükseklik haritası üzerinde bir yağmur sonrası kaç birim su birikebileceğini hesaplamanızı isteyen bir problem.</description>
			<content type="html"><![CDATA[<h3 id="soru">Soru</h3>
<p>Given n non-negative integers representing an elevation map where the width of each bar is 1, compute how much water it can trap after raining.</p>
<h3 id="örnek-1">Örnek 1</h3>
<pre><code><figure><img src="/image/042ex1.jpg"
         alt="image"/>
</figure>


Input: height = [0,1,0,2,1,0,1,3,2,1,2,1]
Output: 6
Explanation: The above elevation map (black section) is represented by array [0,1,0,2,1,0,1,3,2,1,2,1]. In this case, 6 units of rain water (blue section) are being trapped.
</code></pre><h3 id="örnek-2">Örnek 2</h3>
<pre><code>Input: height = [4,2,0,3,2,5]
Output: 9
</code></pre><h3 id="çözüm">Çözüm</h3>
<ul>
<li>Verilen bir yükseklik haritası üzerinde bir yağmur sonrası kaç birim su birikebileceğini hesaplamanızı isteyen bir problem. Bu problem, belirli bir yapı üzerinde suyun nasıl toplanabileceğini modellemek için kullanılır ve bu yapı, bir dizi olarak verilen çeşitli yüksekliklerle temsil edilir.</li>
<li>Bu problem, birden fazla yaklaşımla çözülebilir, ancak en yaygın yaklaşımlardan biri iki işaretçi tekniğidir. Alternatif olarak, dinamik programlama veya yığın (stack) kullanılarak da çözülebilir. İki işaretçi tekniğinde, iki işaretçi dizinin başlangıcı ve sonunda başlar ve ortada buluşana kadar hareket eder. Her bir işaretçi, o noktaya kadar gördüğü maksimum yüksekliği takip eder ve su toplama kapasitesi, her adımda bu maksimum değerler arasındaki farka dayanarak hesaplanır.</li>
<li>Çalışma Mekanizması:</li>
<li>İşaretçilerin İnitialize Edilmesi: left ve right işaretçileri dizinin başı ve sonunda başlar. left_max ve right_max ise o noktalardaki yüksekliklerle başlatılır.</li>
<li>Su Toplama Kontrolü: İşaretçiler birbirine doğru hareket ederken, left_max ve right_max güncellenir. Eğer left_max veya right_max mevcut yükseklikten daha büyükse, fark kadar su birikintisi hesaplanır ve toplam suya eklenir.</li>
<li>İşaretçilerin Hareketi: left veya right işaretçisi, karşı tarafın maksimum yüksekliğinden daha küçük olan tarafın işaretçisi bir adım hareket eder.</li>
<li>Sonuç: İşaretçiler birbiriyle kesişene kadar bu işlem tekrarlanır ve hesaplanan toplam su miktarı döndürülür.</li>
</ul>
<h2 id="code">Code</h2>
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">trap</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">height</span><span class="p">):</span>
        <span class="k">if</span> <span class="ow">not</span> <span class="n">height</span><span class="p">:</span>
            <span class="k">return</span> <span class="mi">0</span>
            
        <span class="n">left</span><span class="p">,</span> <span class="n">right</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">height</span><span class="p">)</span> <span class="o">-</span> <span class="mi">1</span>
        <span class="n">left_max</span><span class="p">,</span> <span class="n">right_max</span> <span class="o">=</span> <span class="n">height</span><span class="p">[</span><span class="n">left</span><span class="p">],</span> <span class="n">height</span><span class="p">[</span><span class="n">right</span><span class="p">]</span>
        <span class="n">water_trapped</span> <span class="o">=</span> <span class="mi">0</span>
        
        <span class="k">while</span> <span class="n">left</span> <span class="o">&lt;</span> <span class="n">right</span><span class="p">:</span>
            <span class="k">if</span> <span class="n">height</span><span class="p">[</span><span class="n">left</span><span class="p">]</span> <span class="o">&lt;</span> <span class="n">height</span><span class="p">[</span><span class="n">right</span><span class="p">]:</span>
                <span class="k">if</span> <span class="n">height</span><span class="p">[</span><span class="n">left</span><span class="p">]</span> <span class="o">&gt;=</span> <span class="n">left_max</span><span class="p">:</span>
                    <span class="n">left_max</span> <span class="o">=</span> <span class="n">height</span><span class="p">[</span><span class="n">left</span><span class="p">]</span>
                <span class="k">else</span><span class="p">:</span>
                    <span class="n">water_trapped</span> <span class="o">+=</span> <span class="n">left_max</span> <span class="o">-</span> <span class="n">height</span><span class="p">[</span><span class="n">left</span><span class="p">]</span>
                <span class="n">left</span> <span class="o">+=</span> <span class="mi">1</span>
            <span class="k">else</span><span class="p">:</span>
                <span class="k">if</span> <span class="n">height</span><span class="p">[</span><span class="n">right</span><span class="p">]</span> <span class="o">&gt;=</span> <span class="n">right_max</span><span class="p">:</span>
                    <span class="n">right_max</span> <span class="o">=</span> <span class="n">height</span><span class="p">[</span><span class="n">right</span><span class="p">]</span>
                <span class="k">else</span><span class="p">:</span>
                    <span class="n">water_trapped</span> <span class="o">+=</span> <span class="n">right_max</span> <span class="o">-</span> <span class="n">height</span><span class="p">[</span><span class="n">right</span><span class="p">]</span>
                <span class="n">right</span> <span class="o">-=</span> <span class="mi">1</span>
                
        <span class="k">return</span> <span class="n">water_trapped</span>

        
</code></pre></div><h3 id="complexity">Complexity</h3>
<ul>
<li>Time complexity (Zaman Karmaşıklığı) : O(n), burada n dizinin uzunluğudur. Dizi tam olarak bir kez taranır.</li>
<li>Space complexity (Alan Karmaşıklığı) : O(1), çünkü ekstra bir alan kullanılmaz ve yalnızca iki işaretçi ve birkaç yerel değişkenle çözüm sağlanır.</li>
</ul>
]]></content>
		</item>
		
		<item>
			<title>Leetcode 84 Largest Rectangle in Histogram</title>
			<link>https://www.dincerbakkal.com/posts/leetcode084/</link>
			<pubDate>Sat, 24 Jul 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode084/</guid>
			<description>Soru Given an array of integers heights representing the histogram&amp;rsquo;s bar height where the width of each bar is 1, return the area of the largest rectangle in the histogram.
Örnek 1  Input: heights = [2,1,5,6,2,3] Output: 10 Explanation: The above is a histogram where width of each bar is 1. The largest rectangle is shown in the red area, which has an area = 10 units. Örnek 2  Input: heights = [2,4] Output: 4 Çözüm  Bir histogramda oluşturulabilecek en büyük dikdörtgenin alanını bulmanızı ister.</description>
			<content type="html"><![CDATA[<h3 id="soru">Soru</h3>
<p>Given an array of integers heights representing the histogram&rsquo;s bar height where the width of each bar is 1, return the area of the largest rectangle in the histogram.</p>
<h3 id="örnek-1">Örnek 1</h3>
<pre><code><figure><img src="/image/084ex1.jpg"
         alt="image"/>
</figure>


Input: heights = [2,1,5,6,2,3]
Output: 10
Explanation: The above is a histogram where width of each bar is 1.
The largest rectangle is shown in the red area, which has an area = 10 units.
</code></pre><h3 id="örnek-2">Örnek 2</h3>
<pre><code><figure><img src="/image/084ex2.jpg"
         alt="image"/>
</figure>


Input: heights = [2,4]
Output: 4
</code></pre><h3 id="çözüm">Çözüm</h3>
<ul>
<li>Bir histogramda oluşturulabilecek en büyük dikdörtgenin alanını bulmanızı ister. Histogram, çubukların yüksekliklerini temsil eden bir tam sayı dizisiyle verilir ve her çubuğun genişliği 1 birimdir.</li>
<li>Girdi: Histogramın yüksekliklerini temsil eden bir tam sayı dizisi heights.</li>
<li>Çıktı: Histogram içinde oluşturulabilecek en büyük dikdörtgenin alanı.</li>
<li>Bu problem genellikle bir yığın (stack) kullanılarak çözülür. Yığın, yükseklikleri ve çubukların indekslerini saklayarak, her bir çubuk için sol ve sağda kendisinden daha kısa olan ilk çubuğun konumunu bulmamızı sağlar. Bu bilgi, her çubuk için potansiyel olarak oluşturulabilecek en büyük dikdörtgenin alanını hesaplamak için kullanılabilir.</li>
<li>Çalışma Mekanizması:</li>
<li>Yığın İnitialize Edilmesi: Yığın boş başlar ve histogramın yükseklikleri döngüyle işlenir.</li>
<li>Dikdörtgen Alanının Hesaplanması: Her adımda, mevcut çubuğun yüksekliği yığındaki son çubuktan daha düşükse, yığının en üstündeki çubuk çıkarılır ve bu çubuk için maksimum dikdörtgen alanı hesaplanır. Çıkarılan çubuk, yığında kalan sonraki çubuk ile mevcut çubuk arasında bir dikdörtgen oluşturur.</li>
<li>Yeni Çubukların Eklenmesi: Her çubuk, kendisinden önce gelen ve kendisinden daha yüksek olan çubukların yığına eklenmesiyle işlenir.</li>
<li>Sonlandırma: Histogramın sonuna eklenen sıfır sayesinde, tüm çubuklar için hesaplama tamamlanabilir.</li>
<li>Maksimum Alanın Dönüşü: Hesaplanan maksimum dikdörtgen alanı döndürülür.</li>
</ul>
<h2 id="code">Code</h2>
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">largestRectangleArea</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">heights</span><span class="p">):</span>
        <span class="n">stack</span> <span class="o">=</span> <span class="p">[]</span>
        <span class="n">max_area</span> <span class="o">=</span> <span class="mi">0</span>
        <span class="n">heights</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>  <span class="c1"># Histogramın sonuna bir sıfır ekleyerek sonlandırma kolaylaştırılır.</span>

        <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">heights</span><span class="p">)):</span>
            <span class="k">while</span> <span class="n">stack</span> <span class="ow">and</span> <span class="n">heights</span><span class="p">[</span><span class="n">stack</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]]</span> <span class="o">&gt;</span> <span class="n">heights</span><span class="p">[</span><span class="n">i</span><span class="p">]:</span>
                <span class="n">h</span> <span class="o">=</span> <span class="n">heights</span><span class="p">[</span><span class="n">stack</span><span class="o">.</span><span class="n">pop</span><span class="p">()]</span>
                <span class="n">w</span> <span class="o">=</span> <span class="n">i</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">stack</span> <span class="k">else</span> <span class="n">i</span> <span class="o">-</span> <span class="n">stack</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">-</span> <span class="mi">1</span>
                <span class="n">max_area</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="n">max_area</span><span class="p">,</span> <span class="n">h</span> <span class="o">*</span> <span class="n">w</span><span class="p">)</span>
            <span class="n">stack</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">i</span><span class="p">)</span>
        
        <span class="n">heights</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>  <span class="c1"># Eklenen sıfırı kaldır.</span>
        <span class="k">return</span> <span class="n">max_area</span>


        
</code></pre></div><h3 id="complexity">Complexity</h3>
<ul>
<li>Time complexity (Zaman Karmaşıklığı) : O(n), burada n çubuk sayısıdır. Her çubuk yığına en fazla bir kez eklenir ve bir kez çıkarılır.</li>
<li>Space complexity (Alan Karmaşıklığı) : O(n), yığında en kötü durumda tüm çubuklar saklanabilir.</li>
</ul>
]]></content>
		</item>
		
		<item>
			<title>Leetcode 75 Sort Colors</title>
			<link>https://www.dincerbakkal.com/posts/leetcode075/</link>
			<pubDate>Fri, 23 Jul 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode075/</guid>
			<description>We will use the integers 0, 1, and 2 to represent the color red, white, and blue, respectively.
You must solve this problem without using the library&amp;rsquo;s sort function.
Input: nums = [2,0,2,1,1,0] Output: [0,0,1,1,2,2] Input: nums = [2,0,1] Output: [0,1,2]  Soruda bizden verilen rekleri sıralamamız isteniyor. Renkleri sayısal olarak 0,1,2 olarak temsil edebiliriz.Ve sıralamayı kütüphane fonksiyonları kullanmadan ayrıca ekstra bellek oluşturmadan yapmamız isteniyor. İlk olarak elimizde sadece 3 farklı sayı var bunları işaretçi kullanarak sıralayabiliriz.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>We will use the integers 0, 1, and 2 to represent the color red, white, and blue, respectively.</p>
<p>You must solve this problem without using the library&rsquo;s sort function.</p>
<!-- raw HTML omitted -->
<pre><code>Input: nums = [2,0,2,1,1,0]
Output: [0,0,1,1,2,2]
</code></pre><!-- raw HTML omitted -->
<pre><code>Input: nums = [2,0,1]
Output: [0,1,2]
</code></pre><!-- raw HTML omitted -->
<ul>
<li>Soruda bizden verilen rekleri sıralamamız isteniyor. Renkleri sayısal olarak 0,1,2 olarak temsil edebiliriz.Ve sıralamayı kütüphane fonksiyonları kullanmadan ayrıca ekstra bellek oluşturmadan yapmamız isteniyor.</li>
<li>İlk olarak elimizde sadece 3 farklı sayı var bunları işaretçi kullanarak sıralayabiliriz.</li>
<li>3 işaretçimiz olur sol,sağ ve i .</li>
<li>i ilerleteceğimiz işaretçidir.i=0 durumunda i değerini sol ile değiştiririz.i ve l indekslerini 1 arttırırız.</li>
<li>i=2 durumunda i değerini sağ işaretçi ile değiştiririz. r değerini 1 azaltırız ama i değerini arttırmayız.Çünkü i değerini arttırmamız durumunda arada sayı kaçırma ihtimalimiz olur.</li>
<li>i=1 durumunda bir değişiklik yapmaz sadece i indeksini 1 arttırırız.</li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">sortColors</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">nums</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
        <span class="s2">&#34;&#34;&#34;
</span><span class="s2">        Do not return anything, modify nums in-place instead.
</span><span class="s2">        &#34;&#34;&#34;</span>
        <span class="n">l</span><span class="p">,</span><span class="n">r</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span><span class="nb">len</span><span class="p">(</span><span class="n">nums</span><span class="p">)</span><span class="o">-</span><span class="mi">1</span>
        <span class="n">i</span><span class="o">=</span><span class="mi">0</span>
        
        <span class="k">def</span> <span class="nf">swap</span><span class="p">(</span><span class="n">i</span><span class="p">,</span><span class="n">j</span><span class="p">):</span>
            <span class="n">tmp</span> <span class="o">=</span> <span class="n">nums</span><span class="p">[</span><span class="n">i</span><span class="p">]</span>
            <span class="n">nums</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="n">nums</span><span class="p">[</span><span class="n">j</span><span class="p">]</span>
            <span class="n">nums</span><span class="p">[</span><span class="n">j</span><span class="p">]</span> <span class="o">=</span> <span class="n">tmp</span>
        
        <span class="k">while</span> <span class="n">i</span><span class="o">&lt;=</span><span class="n">r</span><span class="p">:</span>
            <span class="k">if</span> <span class="n">nums</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
                <span class="n">swap</span><span class="p">(</span><span class="n">l</span><span class="p">,</span><span class="n">i</span><span class="p">)</span>
                <span class="n">l</span> <span class="o">+=</span> <span class="mi">1</span>
            <span class="k">elif</span> <span class="n">nums</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span>
                <span class="n">swap</span><span class="p">(</span><span class="n">i</span><span class="p">,</span><span class="n">r</span><span class="p">)</span>
                <span class="n">r</span><span class="o">-=</span><span class="mi">1</span>
                <span class="n">i</span><span class="o">-=</span><span class="mi">1</span>
            <span class="n">i</span> <span class="o">+=</span><span class="mi">1</span>
        
        
</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 713 Subarray Product Less Than K</title>
			<link>https://www.dincerbakkal.com/posts/leetcode713/</link>
			<pubDate>Thu, 22 Jul 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode713/</guid>
			<description>Input: nums = [10,5,2,6], k = 100 Output: 8 Explanation: The 8 subarrays that have product less than 100 are: [10], [5], [2], [6], [10, 5], [5, 2], [2, 6], [5, 2, 6] Note that [10, 5, 2] is not included as the product of 100 is not strictly less than k. Input: nums = [1,2,3], k = 0 Output: 0  Input: nums = [10, 5, 2, 6], k = 100  ======== (End for loop, r = 0 snapshot) ============= [10, 5, 2, 6] r l prod = 10 cnt += 1</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<!-- raw HTML omitted -->
<pre><code>Input: nums = [10,5,2,6], k = 100
Output: 8
Explanation: The 8 subarrays that have product less than 100 are:
[10], [5], [2], [6], [10, 5], [5, 2], [2, 6], [5, 2, 6]
Note that [10, 5, 2] is not included as the product of 100 is not strictly less than k.
</code></pre><!-- raw HTML omitted -->
<pre><code>Input: nums = [1,2,3], k = 0
Output: 0
</code></pre><!-- raw HTML omitted -->
<ul>
<li>Input: nums = [10, 5, 2, 6], k = 100</li>
</ul>
<p>======== (End for loop, r = 0 snapshot) =============
[10, 5, 2, 6]
r
l
prod = 10
cnt += 1</p>
<p>======== (End for loop, r = 1 snapshot) =============
[10, 5, 2, 6]
r
l
prod = 50
cnt += 2</p>
<p>======== (r = 2, prod &gt;= k snapshot) ================
[10, 5, 2, 6]
r
l<br>
prod = 100, &gt;= k,
keep moving l till &lt; k</p>
<p>======== (End for loop, r = 2 snapshot) =============
[10, 5, 2, 6]
r
l<br>
prod = 10
cnt += 2</p>
<p>======== (End for loop, r = 3 snapshot) =============
[10, 5, 2, 6]
r
l<br>
prod = 60	
cnt += 3</p>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">class</span> <span class="nc">Solution</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
    <span class="k">def</span> <span class="nf">numSubarrayProductLessThanK</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">nums</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">],</span> <span class="n">k</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>        
        <span class="n">left</span><span class="p">,</span> <span class="n">prod</span><span class="p">,</span> <span class="n">count</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">0</span>
            
        <span class="k">for</span> <span class="n">right</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">nums</span><span class="p">)):</span>
            <span class="n">prod</span> <span class="o">*=</span> <span class="n">nums</span><span class="p">[</span><span class="n">right</span><span class="p">]</span>            
        
            <span class="k">while</span> <span class="n">prod</span> <span class="o">&gt;=</span> <span class="n">k</span> <span class="ow">and</span> <span class="n">left</span> <span class="o">&lt;=</span> <span class="n">right</span><span class="p">:</span>                    
                <span class="n">prod</span> <span class="o">/=</span> <span class="n">nums</span><span class="p">[</span><span class="n">left</span><span class="p">]</span>
                <span class="n">left</span> <span class="o">+=</span> <span class="mi">1</span>                        
            <span class="n">count</span> <span class="o">+=</span> <span class="n">right</span> <span class="o">-</span> <span class="n">left</span> <span class="o">+</span> <span class="mi">1</span>                
        <span class="k">return</span> <span class="n">count</span>
        
        
</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 16 3Sum Closest</title>
			<link>https://www.dincerbakkal.com/posts/leetcode016/</link>
			<pubDate>Wed, 21 Jul 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode016/</guid>
			<description>Return the sum of the three integers.
You may assume that each input would have exactly one solution.
Input: nums = [-1,2,1,-4], target = 1 Output: 2 Explanation: The sum that is closest to the target is 2. (-1 + 2 + 1 = 2). Input: nums = [0,0,0], target = 1 Output: 0  3Sum Closest is a follow-up question for two sum.  For 3Sum Closest, we are going to find the closest sum to the target.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>Return the sum of the three integers.</p>
<p>You may assume that each input would have exactly one solution.</p>
<!-- raw HTML omitted -->
<pre><code>Input: nums = [-1,2,1,-4], target = 1
Output: 2
Explanation: The sum that is closest to the target is 2. (-1 + 2 + 1 = 2).
</code></pre><!-- raw HTML omitted -->
<pre><code>Input: nums = [0,0,0], target = 1
Output: 0
</code></pre><!-- raw HTML omitted -->
<ul>
<li>3Sum Closest is a follow-up question for two sum.</li>
</ul>
<p>For 3Sum Closest, we are going to find the closest sum to the target. The closest sum could be the target itself or a number close to the target.</p>
<p>First, we can sort the array into ascending order.
Second, we declare an integer variable called closetSum. That’s the final value we are going to return.
Then we can iterate all the numbers in the array. Whenever visiting a number, we should find two numbers in the rest of array which adds the number closet to target. Once iteration finished, we get the result.</p>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">threeSumClosest</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">nums</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">],</span> <span class="n">target</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
        <span class="n">three_sum_closest</span> <span class="o">=</span> <span class="n">sys</span><span class="o">.</span><span class="n">maxsize</span>
        
        <span class="n">nums</span> <span class="o">=</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">nums</span><span class="p">)</span>
                
        <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">num</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">nums</span><span class="p">):</span>        
            <span class="n">l</span> <span class="o">=</span> <span class="n">i</span> <span class="o">+</span> <span class="mi">1</span>
            <span class="n">r</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">nums</span><span class="p">)</span> <span class="o">-</span> <span class="mi">1</span>
            <span class="c1">#ignore the duplicate numbers</span>
            <span class="k">if</span> <span class="n">i</span> <span class="o">&gt;</span> <span class="mi">0</span> <span class="ow">and</span> <span class="n">nums</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">==</span> <span class="n">nums</span><span class="p">[</span><span class="n">i</span><span class="o">-</span><span class="mi">1</span><span class="p">]:</span>
                <span class="k">continue</span>            
            <span class="k">while</span> <span class="n">l</span> <span class="o">&lt;</span> <span class="n">r</span><span class="p">:</span>       
                <span class="n">local_sum</span> <span class="o">=</span> <span class="n">nums</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">+</span> <span class="n">nums</span><span class="p">[</span><span class="n">l</span><span class="p">]</span> <span class="o">+</span> <span class="n">nums</span><span class="p">[</span><span class="n">r</span><span class="p">]</span>
                <span class="k">if</span> <span class="nb">abs</span><span class="p">(</span><span class="n">local_sum</span> <span class="o">-</span> <span class="n">target</span><span class="p">)</span>  <span class="o">&lt;</span> <span class="nb">abs</span><span class="p">(</span><span class="n">three_sum_closest</span> <span class="o">-</span> <span class="n">target</span><span class="p">):</span>
                    <span class="n">three_sum_closest</span> <span class="o">=</span> <span class="n">local_sum</span>
                
                <span class="k">if</span> <span class="n">local_sum</span> <span class="o">&lt;=</span> <span class="n">target</span><span class="p">:</span>
                    <span class="n">l</span> <span class="o">+=</span> <span class="mi">1</span>
                <span class="k">else</span><span class="p">:</span>
                    <span class="n">r</span> <span class="o">-=</span> <span class="mi">1</span>
        
        <span class="k">return</span> <span class="n">three_sum_closest</span>
        
        
</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 15 3Sum</title>
			<link>https://www.dincerbakkal.com/posts/leetcode015/</link>
			<pubDate>Tue, 20 Jul 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode015/</guid>
			<description>Soru Given an integer array nums, return all the triplets [nums[i], nums[j], nums[k]] such that i != j, i != k, and j != k, and nums[i] + nums[j] + nums[k] == 0.
Notice that the solution set must not contain duplicate triplets.
Örnek 1 Input: nums = [-1,0,1,2,-1,-4] Output: [[-1,-1,2],[-1,0,1]] Örnek 2 Input: nums = [] Output: [] Çözüm  Bu problem genellikle iki işaretçi yöntemi kullanılarak çözülür. Diziyi önce sıralayarak başlar, sonra her eleman için iki işaretçi (bir tanesi o elemandan hemen sonraki elemana, diğeri dizinin sonuna yerleştirilir) kullanarak toplamı sıfır olan üçlü kombinasyonları ararsınız.</description>
			<content type="html"><![CDATA[<h3 id="soru">Soru</h3>
<p>Given an integer array nums, return all the triplets [nums[i], nums[j], nums[k]] such that i != j, i != k, and j != k, and nums[i] + nums[j] + nums[k] == 0.</p>
<p>Notice that the solution set must not contain duplicate triplets.</p>
<h3 id="örnek-1">Örnek 1</h3>
<pre><code>Input: nums = [-1,0,1,2,-1,-4]
Output: [[-1,-1,2],[-1,0,1]]
</code></pre><h3 id="örnek-2">Örnek 2</h3>
<pre><code>Input: nums = []
Output: []
</code></pre><h3 id="çözüm">Çözüm</h3>
<ul>
<li>Bu problem genellikle iki işaretçi yöntemi kullanılarak çözülür. Diziyi önce sıralayarak başlar, sonra her eleman için iki işaretçi (bir tanesi o elemandan hemen sonraki elemana, diğeri dizinin sonuna yerleştirilir) kullanarak toplamı sıfır olan üçlü kombinasyonları ararsınız. Çakışmaları ve tekrar eden üçlülerin oluşmasını engellemek için bazı kontroller yapılır.</li>
<li>Çalışma Mekanizması:</li>
<li>Diziyi Sırala: Dizi sıralanarak, iki işaretçi tekniklerinin uygulanabilmesi için hazır hale getirilir.</li>
<li>Tekrar Eden Elemanların Atlaması: İlk for döngüsünde, tekrar eden elemanları atlayarak çözümde yalnızca benzersiz üçlülerin oluşmasını sağlar.</li>
<li>İki İşaretçi Arama: İki işaretçi, mevcut elemanın bir sonraki elemanından başlayarak, dizinin sonuna kadar hareket eder. Üç elemanın toplamı sıfırsa bir çözüm olarak kaydedilir.</li>
<li>Çakışmaları Önleme: Çözüm bulunduktan sonra, sol ve sağ işaretçiler tekrar eden değerleri atlayarak hareket ettirilir.</li>
<li>Sonuç Döndürme: Tüm benzersiz çözümler bir liste olarak döndürülür.</li>
</ul>
<h2 id="code">Code</h2>
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">threeSum</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">nums</span><span class="p">):</span>
        <span class="n">nums</span><span class="o">.</span><span class="n">sort</span><span class="p">()</span>
        <span class="n">result</span> <span class="o">=</span> <span class="p">[]</span>
        <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">nums</span><span class="p">)</span> <span class="o">-</span> <span class="mi">2</span><span class="p">):</span>
            <span class="k">if</span> <span class="n">i</span> <span class="o">&gt;</span> <span class="mi">0</span> <span class="ow">and</span> <span class="n">nums</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">==</span> <span class="n">nums</span><span class="p">[</span><span class="n">i</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]:</span>
                <span class="k">continue</span>  <span class="c1"># Aynı eleman üzerinde tekrar işlem yapmayı önle</span>
            <span class="n">left</span><span class="p">,</span> <span class="n">right</span> <span class="o">=</span> <span class="n">i</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">nums</span><span class="p">)</span> <span class="o">-</span> <span class="mi">1</span>
            <span class="k">while</span> <span class="n">left</span> <span class="o">&lt;</span> <span class="n">right</span><span class="p">:</span>
                <span class="n">total</span> <span class="o">=</span> <span class="n">nums</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">+</span> <span class="n">nums</span><span class="p">[</span><span class="n">left</span><span class="p">]</span> <span class="o">+</span> <span class="n">nums</span><span class="p">[</span><span class="n">right</span><span class="p">]</span>
                <span class="k">if</span> <span class="n">total</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
                    <span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">([</span><span class="n">nums</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="n">nums</span><span class="p">[</span><span class="n">left</span><span class="p">],</span> <span class="n">nums</span><span class="p">[</span><span class="n">right</span><span class="p">]])</span>
                    <span class="k">while</span> <span class="n">left</span> <span class="o">&lt;</span> <span class="n">right</span> <span class="ow">and</span> <span class="n">nums</span><span class="p">[</span><span class="n">left</span><span class="p">]</span> <span class="o">==</span> <span class="n">nums</span><span class="p">[</span><span class="n">left</span> <span class="o">+</span> <span class="mi">1</span><span class="p">]:</span>
                        <span class="n">left</span> <span class="o">+=</span> <span class="mi">1</span>  <span class="c1"># Sol işaretçiyi tekrar eden elemanlar üzerinde hareket ettir</span>
                    <span class="k">while</span> <span class="n">left</span> <span class="o">&lt;</span> <span class="n">right</span> <span class="ow">and</span> <span class="n">nums</span><span class="p">[</span><span class="n">right</span><span class="p">]</span> <span class="o">==</span> <span class="n">nums</span><span class="p">[</span><span class="n">right</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]:</span>
                        <span class="n">right</span> <span class="o">-=</span> <span class="mi">1</span>  <span class="c1"># Sağ işaretçiyi tekrar eden elemanlar üzerinde hareket ettir</span>
                    <span class="n">left</span> <span class="o">+=</span> <span class="mi">1</span>
                    <span class="n">right</span> <span class="o">-=</span> <span class="mi">1</span>
                <span class="k">elif</span> <span class="n">total</span> <span class="o">&lt;</span> <span class="mi">0</span><span class="p">:</span>
                    <span class="n">left</span> <span class="o">+=</span> <span class="mi">1</span>  <span class="c1"># Toplam negatifse, toplamı artırmak için sol işaretçiyi hareket ettir</span>
                <span class="k">else</span><span class="p">:</span>
                    <span class="n">right</span> <span class="o">-=</span> <span class="mi">1</span>  <span class="c1"># Toplam pozitifse, toplamı azaltmak için sağ işaretçiyi hareket ettir</span>
        <span class="k">return</span> <span class="n">result</span>

        
        
</code></pre></div><h3 id="complexity">Complexity</h3>
<ul>
<li>Time complexity (Zaman Karmaşıklığı): O(n^2), burada n dizinin uzunluğudur. Dizi sıralandıktan sonra, her eleman için O(n) karmaşıklığında bir iki işaretçi arama yapılır.</li>
<li>Space complexity (Alan Karmaşıklığı): O(1) ya da O(n), çözüm setini saklamak dışında ekstra bir alan kullanılmaz.</li>
</ul>
]]></content>
		</item>
		
		<item>
			<title>Leetcode 3 Longest Substring Without Repeating Characters</title>
			<link>https://www.dincerbakkal.com/posts/leetcode003/</link>
			<pubDate>Mon, 19 Jul 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode003/</guid>
			<description>Soru Given a string s, find the length of the longest substring without repeating characters.
Örnek 1 Input: s = &amp;quot;abcabcbb&amp;quot; Output: 3 Explanation: The answer is &amp;quot;abc&amp;quot;, with the length of 3. Örnek 2 Input: s = &amp;quot;bbbbb&amp;quot; Output: 1 Explanation: The answer is &amp;quot;b&amp;quot;, with the length of 1. Çözüm  Bir string içinde tekrar eden karakter olmadan en uzun alt diziyi bulmanızı ister. Bu problemde, alt dizinin içinde aynı karakterin birden fazla kez bulunmaması gerekmektedir.</description>
			<content type="html"><![CDATA[<h3 id="soru">Soru</h3>
<p>Given a string s, find the length of the longest substring without repeating characters.</p>
<h3 id="örnek-1">Örnek 1</h3>
<pre><code>Input: s = &quot;abcabcbb&quot;
Output: 3
Explanation: The answer is &quot;abc&quot;, with the length of 3.
</code></pre><h3 id="örnek-2">Örnek 2</h3>
<pre><code>Input: s = &quot;bbbbb&quot;
Output: 1
Explanation: The answer is &quot;b&quot;, with the length of 1.
</code></pre><h3 id="çözüm">Çözüm</h3>
<ul>
<li>Bir string içinde tekrar eden karakter olmadan en uzun alt diziyi bulmanızı ister. Bu problemde, alt dizinin içinde aynı karakterin birden fazla kez bulunmaması gerekmektedir.</li>
<li>Girdi: Bir string s.</li>
<li>Çıktı: Tekrar eden karakter içermeyen en uzun alt dizinin uzunluğu.</li>
<li>Bu problem için yaygın bir yaklaşım, kaydırmalı pencere (sliding window) veya iki işaretçi tekniği ile birlikte bir hash set veya hash map kullanmaktır. Bu yöntemle, bir işaretçi sabit kalırken diğer işaretçi string boyunca kaydırılarak en uzun tekrar eden karakter içermeyen alt dizi bulunur.</li>
<li>Çalışma Mekanizması:</li>
<li>Değişkenlerin İnitialize Edilmesi: char_set tekrar eden karakterleri kontrol etmek için kullanılır. left ve right işaretçileri sıfırdan başlar. max_length maksimum uzunluğu takip eder.</li>
<li>Döngü İle İşlem: right işaretçisi string boyunca ilerler. Her adımda, char_set içinde mevcut karakter kontrol edilir.</li>
<li>Tekrar Eden Karakter Kontrolü: Eğer right işaretçisinin gösterdiği karakter zaten char_set içindeyse, bu karakter char_setten çıkarılana kadar left işaretçisi artırılır.</li>
<li>Maksimum Uzunluğun Güncellenmesi: Her adımda, mevcut maksimum uzunluk, mevcut uzunluk ile karşılaştırılır ve gerekiyorsa güncellenir.</li>
<li>Sonuç Dönüşü: Tüm işlemler tamamlandığında, hesaplanan maksimum uzunluk döndürülür.</li>
</ul>
<h2 id="code">Code</h2>
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">lengthOfLongestSubstring</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">s</span><span class="p">):</span>
        <span class="n">char_set</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
        <span class="n">left</span> <span class="o">=</span> <span class="mi">0</span>
        <span class="n">max_length</span> <span class="o">=</span> <span class="mi">0</span>
        
        <span class="k">for</span> <span class="n">right</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">s</span><span class="p">)):</span>
            <span class="k">while</span> <span class="n">s</span><span class="p">[</span><span class="n">right</span><span class="p">]</span> <span class="ow">in</span> <span class="n">char_set</span><span class="p">:</span>
                <span class="n">char_set</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">s</span><span class="p">[</span><span class="n">left</span><span class="p">])</span>
                <span class="n">left</span> <span class="o">+=</span> <span class="mi">1</span>
            <span class="n">char_set</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">s</span><span class="p">[</span><span class="n">right</span><span class="p">])</span>
            <span class="n">max_length</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="n">max_length</span><span class="p">,</span> <span class="n">right</span> <span class="o">-</span> <span class="n">left</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span>
        
        <span class="k">return</span> <span class="n">max_length</span>

      
</code></pre></div><h3 id="complexity">Complexity</h3>
<ul>
<li>Time complexity (Zaman Karmaşıklığı) : O(n), burada n string s&rsquo;nin uzunluğudur. Her karakter en fazla iki kez işlem görür (eklenir ve çıkarılır).</li>
<li>Space complexity (Alan Karmaşıklığı) : O(min(n, m)), burada m karakter setinin boyutudur. En kötü durumda, tüm benzersiz karakterler char_set içine alınabilir.</li>
</ul>
]]></content>
		</item>
		
		<item>
			<title>Leetcode 424 Longest Repeating Character Replacement</title>
			<link>https://www.dincerbakkal.com/posts/leetcode424/</link>
			<pubDate>Mon, 19 Jul 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode424/</guid>
			<description>Soru You are given a string s and an integer k. You can choose any character of the string and change it to any other uppercase English character. You can perform this operation at most k times.
Return the length of the longest substring containing the same letter you can get after performing the above operations.
Örnek 1 Input: s = &amp;quot;ABAB&amp;quot;, k = 2 Output: 4 Explanation: Replace the two &#39;A&#39;s with two &#39;B&#39;s or vice versa.</description>
			<content type="html"><![CDATA[<h3 id="soru">Soru</h3>
<p>You are given a string s and an integer k. You can choose any character of the string and change it to any other uppercase English character. You can perform this operation at most k times.</p>
<p>Return the length of the longest substring containing the same letter you can get after performing the above operations.</p>
<h3 id="örnek-1">Örnek 1</h3>
<pre><code>Input: s = &quot;ABAB&quot;, k = 2
Output: 4
Explanation: Replace the two 'A's with two 'B's or vice versa.
</code></pre><h3 id="örnek-2">Örnek 2</h3>
<pre><code>Input: s = &quot;AABABBA&quot;, k = 1
Output: 4
Explanation: Replace the one 'A' in the middle with 'B' and form &quot;AABBBBA&quot;.
The substring &quot;BBBB&quot; has the longest repeating letters, which is 4.
</code></pre><h3 id="çözüm">Çözüm</h3>
<ul>
<li>Bir string içinde belirli bir sayıda karakter değişikliği yaparak elde edilebilecek en uzun tekrar eden karakter dizisini bulmanızı ister. Bu soruda, maksimum k karakteri değiştirerek bir karakteri diğer bir karakterle değiştirebilirsiniz, ve amacınız, en uzun aynı karakter dizisini (tek tip dizi) oluşturmaktır.</li>
<li>Girdi: Bir string s ve bir tam sayı k.</li>
<li>Çıktı: En fazla k karakter değiştirerek elde edilebilecek en uzun tekrar eden karakter dizisinin uzunluğu.</li>
<li>Bu problem, kaydırmalı pencere (sliding window) veya iki işaretçi tekniği kullanılarak çözülebilir. Buradaki temel fikir, bir pencere içinde en fazla k değişiklik ile oluşturulabilecek en uzun alt diziyi bulmaktır. Pencere boyutu, penceredeki en yaygın karakterin sayısına ve k&rsquo;ya bağlı olarak dinamik olarak ayarlanır.</li>
<li>Çalışma Mekanizması:</li>
<li>Değişkenlerin İnitialize Edilmesi: count karakter sayılarını tutar, max_count penceredeki en sık tekrar eden karakterin sayısını, max_length ise en uzun alt dizinin uzunluğunu tutar.</li>
<li>Döngü İle İşlem: right işaretçisi string boyunca ilerler ve her karakter için count güncellenir. Ayrıca, her adımda max_count güncellenir.</li>
<li>Pencere Kontrolü: Eğer pencerenin boyutu eksi içindeki en yaygın karakterin sayısı k&rsquo;dan büyükse, bu, daha fazla değişiklik gerektiği anlamına gelir. Bu durumda, left işaretçisi artırılarak pencere daraltılır.</li>
<li>Maksimum Uzunluğun Güncellenmesi: Pencere uygun boyutta olduğunda, max_length güncellenir.</li>
<li>Sonuç Dönüşü: Tüm işlemler tamamlandığında, hesaplanan maksimum uzunluk döndürülür.</li>
</ul>
<h2 id="code">Code</h2>
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">characterReplacement</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">s</span><span class="p">,</span> <span class="n">k</span><span class="p">):</span>
        <span class="n">count</span> <span class="o">=</span> <span class="p">{}</span>
        <span class="n">max_length</span> <span class="o">=</span> <span class="mi">0</span>
        <span class="n">max_count</span> <span class="o">=</span> <span class="mi">0</span>
        <span class="n">left</span> <span class="o">=</span> <span class="mi">0</span>
        
        <span class="k">for</span> <span class="n">right</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">s</span><span class="p">)):</span>
            <span class="n">count</span><span class="p">[</span><span class="n">s</span><span class="p">[</span><span class="n">right</span><span class="p">]]</span> <span class="o">=</span> <span class="n">count</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">s</span><span class="p">[</span><span class="n">right</span><span class="p">],</span> <span class="mi">0</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1</span>
            <span class="n">max_count</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="n">max_count</span><span class="p">,</span> <span class="n">count</span><span class="p">[</span><span class="n">s</span><span class="p">[</span><span class="n">right</span><span class="p">]])</span>

            <span class="c1"># Pencere boyutu - içindeki en yaygın karakterin sayısı &gt; k ise pencereyi daralt</span>
            <span class="k">while</span> <span class="p">(</span><span class="n">right</span> <span class="o">-</span> <span class="n">left</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">-</span> <span class="n">max_count</span> <span class="o">&gt;</span> <span class="n">k</span><span class="p">:</span>
                <span class="n">count</span><span class="p">[</span><span class="n">s</span><span class="p">[</span><span class="n">left</span><span class="p">]]</span> <span class="o">-=</span> <span class="mi">1</span>
                <span class="n">left</span> <span class="o">+=</span> <span class="mi">1</span>
            
            <span class="c1"># Mevcut pencere boyutu maksimum uzunluğu güncelle</span>
            <span class="n">max_length</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="n">max_length</span><span class="p">,</span> <span class="n">right</span> <span class="o">-</span> <span class="n">left</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span>
        
        <span class="k">return</span> <span class="n">max_length</span>

        
        
</code></pre></div><h3 id="complexity">Complexity</h3>
<ul>
<li>Time complexity (Zaman Karmaşıklığı) : O(n), burada n string s&rsquo;nin uzunluğudur. Her karakter için sabit zaman işlemi yapılır.</li>
<li>Space complexity (Alan Karmaşıklığı) : O(1), karakter sayısını tutmak için kullanılan alan genellikle sabittir (ASCII veya Unicode gibi sınırlı bir karakter seti varsayılırsa).</li>
</ul>
]]></content>
		</item>
		
		<item>
			<title>Leetcode 239 Sliding Window Maximum</title>
			<link>https://www.dincerbakkal.com/posts/leetcode239/</link>
			<pubDate>Sun, 18 Jul 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode239/</guid>
			<description>Soru You are given an array of integers nums, there is a sliding window of size k which is moving from the very left of the array to the very right. You can only see the k numbers in the window. Each time the sliding window moves right by one position.
Return the max sliding window.
Örnek 1 Input: nums = [1,3,-1,-3,5,3,6,7], k = 3 Output: [3,3,5,5,6,7] Explanation: Window position Max --------------- ----- [1 3 -1] -3 5 3 6 7 3 1 [3 -1 -3] 5 3 6 7 3 1 3 [-1 -3 5] 3 6 7 5 1 3 -1 [-3 5 3] 6 7 5 1 3 -1 -3 [5 3 6] 7 6 1 3 -1 -3 5 [3 6 7] 7 Örnek 2 Input: nums = [1], k = 1 Output: [1] Çözüm  Verilen bir tam sayı dizisi ve bir pencere boyutu k için, her pencere pozisyonunda maksimum değeri bulmanızı isteyen bir problem.</description>
			<content type="html"><![CDATA[<h3 id="soru">Soru</h3>
<p>You are given an array of integers nums, there is a sliding window of size k which is moving from the very left of the array to the very right. You can only see the k numbers in the window. Each time the sliding window moves right by one position.</p>
<p>Return the max sliding window.</p>
<h3 id="örnek-1">Örnek 1</h3>
<pre><code>Input: nums = [1,3,-1,-3,5,3,6,7], k = 3
Output: [3,3,5,5,6,7]
Explanation: 
Window position                Max
---------------               -----
[1  3  -1] -3  5  3  6  7       3
 1 [3  -1  -3] 5  3  6  7       3
 1  3 [-1  -3  5] 3  6  7       5
 1  3  -1 [-3  5  3] 6  7       5
 1  3  -1  -3 [5  3  6] 7       6
 1  3  -1  -3  5 [3  6  7]      7
</code></pre><h3 id="örnek-2">Örnek 2</h3>
<pre><code>Input: nums = [1], k = 1
Output: [1]
</code></pre><h3 id="çözüm">Çözüm</h3>
<ul>
<li>Verilen bir tam sayı dizisi ve bir pencere boyutu k için, her pencere pozisyonunda maksimum değeri bulmanızı isteyen bir problem. Bu, bir dizide belirli bir boyutta sürekli kaydırılan bir pencerenin her adımında en büyük değeri belirlemeniz gerektiği anlamına gelir.</li>
<li>Girdi: Tam sayılardan oluşan bir dizi nums ve bir pencere boyutu k.</li>
<li>Çıktı: Her pencere için en büyük değeri içeren bir tam sayı dizisi.</li>
<li>Bu problem genellikle bir çift yönlü kuyruk (deque) kullanılarak çözülür. Deque, her pencere için maksimum değeri verimli bir şekilde bulmamızı sağlar çünkü her adımda en büyük değere hızlıca erişebilir ve eski değerleri çıkarabiliriz. Deque, yalnızca en büyük değer adaylarını ve bunların indekslerini saklar, böylece dizinin kaydırılması sırasında en büyük değeri hızlıca güncelleyebiliriz.</li>
<li>Çalışma Mekanizması:</li>
<li>Deque Kullanımı: Deque, mevcut pencere içinde en büyük değerin indekslerini tutar.</li>
<li>Geçersiz İndeksleri Çıkarma: Eğer deque&rsquo;nun başındaki indeks mevcut pencere dışındaysa, çıkarılır.</li>
<li>Değeri Karşılaştırma ve Ekleme: Mevcut değer, deque&rsquo;nun sonundaki değerden büyükse, deque&rsquo;nun sonundakiler çıkarılır, çünkü yeni değer daha büyük bir maksimum adayıdır.</li>
<li>Sonuçların Güncellenmesi: İlk pencereden itibaren, her adımda deque&rsquo;nun başındaki değer, en büyük değer olarak sonuç listesine eklenir.</li>
</ul>
<h2 id="code">Code</h2>
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="kn">from</span> <span class="nn">collections</span> <span class="kn">import</span> <span class="n">deque</span>

<span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">maxSlidingWindow</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">nums</span><span class="p">,</span> <span class="n">k</span><span class="p">):</span>
        <span class="c1"># Sonuç listesi ve deque</span>
        <span class="n">deq</span> <span class="o">=</span> <span class="n">deque</span><span class="p">()</span>
        <span class="n">maxima</span> <span class="o">=</span> <span class="p">[]</span>

        <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">nums</span><span class="p">)):</span>
            <span class="c1"># Deque&#39;nun solundaki indeks geçerliliğini kaybettiğinde çıkar</span>
            <span class="k">if</span> <span class="n">deq</span> <span class="ow">and</span> <span class="n">deq</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="n">i</span> <span class="o">-</span> <span class="n">k</span><span class="p">:</span>
                <span class="n">deq</span><span class="o">.</span><span class="n">popleft</span><span class="p">()</span>

            <span class="c1"># Yeni eleman daha büyükse eski maksimum adaylarını deque&#39;den çıkar</span>
            <span class="k">while</span> <span class="n">deq</span> <span class="ow">and</span> <span class="n">nums</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">&gt;</span> <span class="n">nums</span><span class="p">[</span><span class="n">deq</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]]:</span>
                <span class="n">deq</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>

            <span class="c1"># Yeni elemanın indeksini ekle</span>
            <span class="n">deq</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">i</span><span class="p">)</span>

            <span class="c1"># İlk pencereden sonra maksimumu sonuç listesine ekle</span>
            <span class="k">if</span> <span class="n">i</span> <span class="o">&gt;=</span> <span class="n">k</span> <span class="o">-</span> <span class="mi">1</span><span class="p">:</span>
                <span class="n">maxima</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">nums</span><span class="p">[</span><span class="n">deq</span><span class="p">[</span><span class="mi">0</span><span class="p">]])</span>

        <span class="k">return</span> <span class="n">maxima</span>

     
        
</code></pre></div><h3 id="complexity">Complexity</h3>
<ul>
<li>Time complexity (Zaman Karmaşıklığı) : O(n), burada n nums dizisinin uzunluğudur. Her eleman için sabit sayıda işlem yapılır (her eleman yalnızca bir kez deque&rsquo;ye eklenir ve bir kez çıkarılır).</li>
<li>Space complexity (Alan Karmaşıklığı) : O(k), burada k pencere boyutudur. Deque, en kötü durumda pencere boyutuna eşit sayıda eleman içerebilir.</li>
</ul>
]]></content>
		</item>
		
		<item>
			<title>Leetcode 567 Permutation in String</title>
			<link>https://www.dincerbakkal.com/posts/leetcode567/</link>
			<pubDate>Sun, 18 Jul 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode567/</guid>
			<description>Soru Given two strings s1 and s2, return true if s2 contains a permutation of s1, or false otherwise.
In other words, return true if one of s1&amp;rsquo;s permutations is the substring of s2.
Örnek 1 Input: s1 = &amp;quot;ab&amp;quot;, s2 = &amp;quot;eidbaooo&amp;quot; Output: true Explanation: s2 contains one permutation of s1 (&amp;quot;ba&amp;quot;). Örnek 2 Input: s1 = &amp;quot;ab&amp;quot;, s2 = &amp;quot;eidboaoo&amp;quot; Output: false Çözüm  Bir stringin (s1) permutasyonunun, başka bir string (s2) içinde alt dizi olarak bulunup bulunmadığını belirlemenizi ister.</description>
			<content type="html"><![CDATA[<h3 id="soru">Soru</h3>
<p>Given two strings s1 and s2, return true if s2 contains a permutation of s1, or false otherwise.</p>
<p>In other words, return true if one of s1&rsquo;s permutations is the substring of s2.</p>
<h3 id="örnek-1">Örnek 1</h3>
<pre><code>Input: s1 = &quot;ab&quot;, s2 = &quot;eidbaooo&quot;
Output: true
Explanation: s2 contains one permutation of s1 (&quot;ba&quot;).
</code></pre><h3 id="örnek-2">Örnek 2</h3>
<pre><code>Input: s1 = &quot;ab&quot;, s2 = &quot;eidboaoo&quot;
Output: false
</code></pre><h3 id="çözüm">Çözüm</h3>
<ul>
<li>Bir stringin (s1) permutasyonunun, başka bir string (s2) içinde alt dizi olarak bulunup bulunmadığını belirlemenizi ister. Bu, esasen s1&rsquo;in herhangi bir permutasyonunun s2 içinde olup olmadığını kontrol etmek anlamına gelir.</li>
<li>Girdi: İki string, s1 ve s2.</li>
<li>Çıktı: Eğer s1&rsquo;in herhangi bir permutasyonu s2 içinde varsa true, aksi takdirde false.</li>
<li>Bu problem, kaydırmalı pencere (sliding window) ve hash map kullanılarak çözülebilir. s1 stringinin karakter frekanslarını bir hash map&rsquo;te saklayarak başlanır, ardından s2 üzerinde bir pencere boyutu s1.length() ile kaydırılarak her pencere için karakter frekansları karşılaştırılır. Eğer herhangi bir noktada, s2&rsquo;nin alt dizisinin karakter dağılımı s1 ile aynıysa, bu bir eşleşme olarak kabul edilir.</li>
<li>Çalışma Mekanizması:</li>
<li>Başlangıç Kontrolü: Eğer s1&rsquo;in uzunluğu s2&rsquo;den büyükse, s2 içinde s1&rsquo;in permutasyonu olamaz.</li>
<li>Karakter Sayma: s1 için bir Counter kullanılarak karakter frekansları hesaplanır.</li>
<li>Kaydırmalı Pencere: s2 üzerinde bir döngü ile geçilir ve her adımda pencereye bir karakter eklenir. Pencerenin boyutu s1&rsquo;in uzunluğundan fazla olursa, pencerenin başındaki karakter çıkarılır.</li>
<li>Frekans Karşılaştırması: Her adımda, pencerenin frekans dağılımı s1&rsquo;in frekans dağılımı ile karşılaştırılır. Eşleşme olması durumunda true dönülür.</li>
<li>Sonuç: Eğer döngü sonunda hiçbir eşleşme bulunamazsa, false dönülür.</li>
</ul>
<h2 id="code">Code</h2>
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="kn">from</span> <span class="nn">collections</span> <span class="kn">import</span> <span class="n">Counter</span>

<span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">checkInclusion</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">s1</span><span class="p">,</span> <span class="n">s2</span><span class="p">):</span>
        <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">s1</span><span class="p">)</span> <span class="o">&gt;</span> <span class="nb">len</span><span class="p">(</span><span class="n">s2</span><span class="p">):</span>
            <span class="k">return</span> <span class="kc">False</span>

        <span class="n">s1_count</span> <span class="o">=</span> <span class="n">Counter</span><span class="p">(</span><span class="n">s1</span><span class="p">)</span>
        <span class="n">window_count</span> <span class="o">=</span> <span class="n">Counter</span><span class="p">()</span>

        <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">s2</span><span class="p">)):</span>
            <span class="c1"># Pencereye yeni bir karakter ekle</span>
            <span class="n">window_count</span><span class="p">[</span><span class="n">s2</span><span class="p">[</span><span class="n">i</span><span class="p">]]</span> <span class="o">+=</span> <span class="mi">1</span>

            <span class="c1"># Pencere boyutunu s1&#39;in uzunluğunda tut</span>
            <span class="k">if</span> <span class="n">i</span> <span class="o">&gt;=</span> <span class="nb">len</span><span class="p">(</span><span class="n">s1</span><span class="p">):</span>
                <span class="k">if</span> <span class="n">window_count</span><span class="p">[</span><span class="n">s2</span><span class="p">[</span><span class="n">i</span> <span class="o">-</span> <span class="nb">len</span><span class="p">(</span><span class="n">s1</span><span class="p">)]]</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
                    <span class="k">del</span> <span class="n">window_count</span><span class="p">[</span><span class="n">s2</span><span class="p">[</span><span class="n">i</span> <span class="o">-</span> <span class="nb">len</span><span class="p">(</span><span class="n">s1</span><span class="p">)]]</span>
                <span class="k">else</span><span class="p">:</span>
                    <span class="n">window_count</span><span class="p">[</span><span class="n">s2</span><span class="p">[</span><span class="n">i</span> <span class="o">-</span> <span class="nb">len</span><span class="p">(</span><span class="n">s1</span><span class="p">)]]</span> <span class="o">-=</span> <span class="mi">1</span>

            <span class="c1"># Pencerenin ve s1_count&#39;un karşılaştırılması</span>
            <span class="k">if</span> <span class="n">window_count</span> <span class="o">==</span> <span class="n">s1_count</span><span class="p">:</span>
                <span class="k">return</span> <span class="kc">True</span>

        <span class="k">return</span> <span class="kc">False</span>      
        
</code></pre></div><h3 id="complexity">Complexity</h3>
<ul>
<li>Time complexity (Zaman Karmaşıklığı) : O(n + m), burada n s2&rsquo;nin uzunluğu ve m s1&rsquo;in uzunluğudur. Her karakter için sabit zamanlı işlemler yapılır.</li>
<li>Space complexity (Alan Karmaşıklığı) : O(1), çünkü kullanılan veri yapıları sabit sayıda karakteri tutar ve bu sayı sınırlıdır.</li>
</ul>
]]></content>
		</item>
		
		<item>
			<title>Leetcode 76 Minimum Window Substring</title>
			<link>https://www.dincerbakkal.com/posts/leetcode076/</link>
			<pubDate>Sun, 18 Jul 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode076/</guid>
			<description>Soru Given two strings s and t of lengths m and n respectively, return the minimum window substring of s such that every character in t (including duplicates) is included in the window. If there is no such substring, return the empty string &amp;ldquo;&amp;rdquo;.
The testcases will be generated such that the answer is unique.
Örnek 1 Input: s = &amp;quot;ADOBECODEBANC&amp;quot;, t = &amp;quot;ABC&amp;quot; Output: &amp;quot;BANC&amp;quot; Explanation: The minimum window substring &amp;quot;BANC&amp;quot; includes &#39;A&#39;, &#39;B&#39;, and &#39;C&#39; from string t.</description>
			<content type="html"><![CDATA[<h3 id="soru">Soru</h3>
<p>Given two strings s and t of lengths m and n respectively, return the minimum window
substring of s such that every character in t (including duplicates) is included in the window. If there is no such substring, return the empty string &ldquo;&rdquo;.</p>
<p>The testcases will be generated such that the answer is unique.</p>
<h3 id="örnek-1">Örnek 1</h3>
<pre><code>Input: s = &quot;ADOBECODEBANC&quot;, t = &quot;ABC&quot;
Output: &quot;BANC&quot;
Explanation: The minimum window substring &quot;BANC&quot; includes 'A', 'B', and 'C' from string t.
</code></pre><h3 id="örnek-2">Örnek 2</h3>
<pre><code>Input: s = &quot;a&quot;, t = &quot;a&quot;
Output: &quot;a&quot;
Explanation: The entire string s is the minimum window.
</code></pre><h3 id="örnek-3">Örnek 3</h3>
<pre><code>Input: s = &quot;a&quot;, t = &quot;aa&quot;
Output: &quot;&quot;
Explanation: Both 'a's from t must be included in the window.
Since the largest window of s only has one 'a', return empty string.
</code></pre><h3 id="çözüm">Çözüm</h3>
<ul>
<li>Verilen iki string s ve t arasında, t içindeki tüm karakterleri kapsayan s stringinin en küçük alt dizisini bulmanızı ister. Bu alt dizi, t stringindeki tüm karakterleri içeren s stringinden alınmış en kısa ardışık dizi olmalıdır.</li>
<li>Girdi: İki string, s ve t.</li>
<li>Çıktı: s içinde, t içindeki tüm karakterleri içeren en küçük alt dizi. Eğer böyle bir alt dizi yoksa boş string döndürülür.</li>
<li>Bu problem genellikle kaydırmalı pencere (sliding window) ve hash map kullanılarak çözülür. t stringindeki karakterlerin frekanslarını bir hash map&rsquo;te saklayarak başlanır. Ardından, s üzerinde bir pencere kaydırarak bu pencerenin t stringindeki tüm karakterleri içerip içermediğini kontrol edersiniz. Pencere, t&rsquo;deki tüm karakterleri kapsadığında, bu pencereyi olabildiğince daraltarak en küçük alt diziyi bulmaya çalışırsınız.</li>
<li>Çalışma Mekanizması:</li>
<li>İnitialize: dict_t t&rsquo;deki karakterlerin frekansını saklar. required t&rsquo;deki benzersiz karakter sayısını, formed ise şu an pencerede bulunan ve t&rsquo;deki karakterleri karşılayan karakter sayısını tutar.</li>
<li>Kaydırmalı Pencere: s üzerinde r (sağ) işaretçisiyle ilerlerken, pencereye karakterler eklenir. Her karakter için, window_counts güncellenir.</li>
<li>Pencereyi Daraltma: Pencere t&rsquo;deki tüm karakterleri içerdiğinde, l (sol) işaretçisiyle pencere daraltılarak mümkün olan en küçük boyut aranır.</li>
<li>Sonuç Dönüşü: Eğer bir sonuç bulunmuşsa, bu sonuç döndürülür. Bulunamamışsa boş string döndürülür.</li>
</ul>
<h2 id="code">Code</h2>
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="kn">from</span> <span class="nn">collections</span> <span class="kn">import</span> <span class="n">Counter</span>

<span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">minWindow</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">s</span><span class="p">,</span> <span class="n">t</span><span class="p">):</span>
        <span class="k">if</span> <span class="ow">not</span> <span class="n">t</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">s</span><span class="p">:</span>
            <span class="k">return</span> <span class="s2">&#34;&#34;</span>

        <span class="n">dict_t</span> <span class="o">=</span> <span class="n">Counter</span><span class="p">(</span><span class="n">t</span><span class="p">)</span>
        <span class="n">required</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">dict_t</span><span class="p">)</span>
        <span class="n">l</span><span class="p">,</span> <span class="n">r</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span>
        <span class="n">formed</span> <span class="o">=</span> <span class="mi">0</span>
        <span class="n">window_counts</span> <span class="o">=</span> <span class="p">{}</span>

        <span class="n">ans</span> <span class="o">=</span> <span class="nb">float</span><span class="p">(</span><span class="s2">&#34;inf&#34;</span><span class="p">),</span> <span class="kc">None</span><span class="p">,</span> <span class="kc">None</span>  <span class="c1"># Pencerenin boyutu, başlangıç ve bitiş indeksleri</span>

        <span class="k">while</span> <span class="n">r</span> <span class="o">&lt;</span> <span class="nb">len</span><span class="p">(</span><span class="n">s</span><span class="p">):</span>
            <span class="n">character</span> <span class="o">=</span> <span class="n">s</span><span class="p">[</span><span class="n">r</span><span class="p">]</span>
            <span class="n">window_counts</span><span class="p">[</span><span class="n">character</span><span class="p">]</span> <span class="o">=</span> <span class="n">window_counts</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">character</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1</span>

            <span class="k">if</span> <span class="n">character</span> <span class="ow">in</span> <span class="n">dict_t</span> <span class="ow">and</span> <span class="n">window_counts</span><span class="p">[</span><span class="n">character</span><span class="p">]</span> <span class="o">==</span> <span class="n">dict_t</span><span class="p">[</span><span class="n">character</span><span class="p">]:</span>
                <span class="n">formed</span> <span class="o">+=</span> <span class="mi">1</span>

            <span class="k">while</span> <span class="n">l</span> <span class="o">&lt;=</span> <span class="n">r</span> <span class="ow">and</span> <span class="n">formed</span> <span class="o">==</span> <span class="n">required</span><span class="p">:</span>
                <span class="n">character</span> <span class="o">=</span> <span class="n">s</span><span class="p">[</span><span class="n">l</span><span class="p">]</span>

                <span class="k">if</span> <span class="n">r</span> <span class="o">-</span> <span class="n">l</span> <span class="o">+</span> <span class="mi">1</span> <span class="o">&lt;</span> <span class="n">ans</span><span class="p">[</span><span class="mi">0</span><span class="p">]:</span>
                    <span class="n">ans</span> <span class="o">=</span> <span class="p">(</span><span class="n">r</span> <span class="o">-</span> <span class="n">l</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="n">l</span><span class="p">,</span> <span class="n">r</span><span class="p">)</span>

                <span class="n">window_counts</span><span class="p">[</span><span class="n">character</span><span class="p">]</span> <span class="o">-=</span> <span class="mi">1</span>
                <span class="k">if</span> <span class="n">character</span> <span class="ow">in</span> <span class="n">dict_t</span> <span class="ow">and</span> <span class="n">window_counts</span><span class="p">[</span><span class="n">character</span><span class="p">]</span> <span class="o">&lt;</span> <span class="n">dict_t</span><span class="p">[</span><span class="n">character</span><span class="p">]:</span>
                    <span class="n">formed</span> <span class="o">-=</span> <span class="mi">1</span>

                <span class="n">l</span> <span class="o">+=</span> <span class="mi">1</span>    

            <span class="n">r</span> <span class="o">+=</span> <span class="mi">1</span>

        <span class="k">return</span> <span class="s2">&#34;&#34;</span> <span class="k">if</span> <span class="n">ans</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="nb">float</span><span class="p">(</span><span class="s2">&#34;inf&#34;</span><span class="p">)</span> <span class="k">else</span> <span class="n">s</span><span class="p">[</span><span class="n">ans</span><span class="p">[</span><span class="mi">1</span><span class="p">]:</span><span class="n">ans</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="o">+</span> <span class="mi">1</span><span class="p">]</span>
     
        
</code></pre></div><h3 id="complexity">Complexity</h3>
<ul>
<li>Time complexity (Zaman Karmaşıklığı) : O(S + T), burada S ve T sırasıyla s ve t stringlerinin uzunluklarıdır.</li>
<li>Space complexity (Alan Karmaşıklığı) : O(S + T), hash map için kullanılan alan nedeniyle.</li>
</ul>
]]></content>
		</item>
		
		<item>
			<title>Leetcode 904 Fruit Into Baskets</title>
			<link>https://www.dincerbakkal.com/posts/leetcode904/</link>
			<pubDate>Sat, 17 Jul 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode904/</guid>
			<description>You are visiting a farm that has a single row of fruit trees arranged from left to right. The trees are represented by an integer array fruits where fruits[i] is the type of fruit the ith tree produces.
You want to collect as much fruit as possible. However, the owner has some strict rules that you must follow:
You only have two baskets, and each basket can only hold a single type of fruit.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>You are visiting a farm that has a single row of fruit trees arranged from left to right. The trees are represented by an integer array fruits where fruits[i] is the type of fruit the ith tree produces.</p>
<p>You want to collect as much fruit as possible. However, the owner has some strict rules that you must follow:</p>
<p>You only have two baskets, and each basket can only hold a single type of fruit. There is no limit on the amount of fruit each basket can hold.
Starting from any tree of your choice, you must pick exactly one fruit from every tree (including the start tree) while moving to the right. The picked fruits must fit in one of your baskets.
Once you reach a tree with fruit that cannot fit in your baskets, you must stop.
Given the integer array fruits, return the maximum number of fruits you can pick.</p>
<!-- raw HTML omitted -->
<pre><code>Input: fruits = [1,2,1]
Output: 3
Explanation: We can pick from all 3 trees.
</code></pre><!-- raw HTML omitted -->
<pre><code>Input: fruits = [0,1,2,2]
Output: 3
Explanation: We can pick from trees [1,2,2].
If we had started at the first tree, we would only pick from trees [0,1].
</code></pre><!-- raw HTML omitted -->
<ul>
<li>General idea
The input is a row of trees, and each tree bears fruit. This number represents the type of fruit (note, not the number). Let you pick the fruit from a certain position to the right continuously. There are only two baskets, and each basket can only put the same type of fruit. If there is no fruit to pick during the traversal to the right, or the fruit of the current tree cannot be placed in the fruit basket, then stop and ask how many fruits can be picked in total.</li>
</ul>
<p>Problem solving method
Now LeetCode likes to produce a situational question, it takes people a long time to understand the meaning of the question and abstract it out. If this problem is abstracted into a model, it is to find the longest continuous sub-array of an array, requiring that there are at most two different elements in this sub-array.</p>
<p>If the above abstraction is done, then we can easily think of using double pointers to calculate the number of all elements in the double pointer interval. This number is the number of fruits that we can pick. At the same time, in the process of moving, it is necessary to ensure that the type of elements in the double pointer interval is at most 2. When doing the question before, the Counter was used to directly count all the numbers in an interval, which would time out. Therefore, a dictionary is used for storage, and only the number of the rightmost and leftmost elements is updated each time.</p>
<p>The time complexity is O(N), and the space complexity is O(N).</p>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">class</span> <span class="nc">Solution</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
    <span class="k">def</span> <span class="nf">totalFruit</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">tree</span><span class="p">):</span>
        <span class="s2">&#34;&#34;&#34;
</span><span class="s2">        :type tree: List[int]
</span><span class="s2">        :rtype: int
</span><span class="s2">        &#34;&#34;&#34;</span>
        <span class="n">left</span><span class="p">,</span> <span class="n">right</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span>
        <span class="n">res</span> <span class="o">=</span> <span class="mi">0</span>
        <span class="n">cnt</span> <span class="o">=</span> <span class="n">collections</span><span class="o">.</span><span class="n">defaultdict</span><span class="p">(</span><span class="nb">int</span><span class="p">)</span>
        <span class="k">while</span> <span class="n">right</span> <span class="o">&lt;</span> <span class="nb">len</span><span class="p">(</span><span class="n">tree</span><span class="p">):</span>
            <span class="n">cnt</span><span class="p">[</span><span class="n">tree</span><span class="p">[</span><span class="n">right</span><span class="p">]]</span> <span class="o">+=</span> <span class="mi">1</span>
            <span class="k">while</span> <span class="nb">len</span><span class="p">(</span><span class="n">cnt</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">2</span><span class="p">:</span>
                <span class="n">cnt</span><span class="p">[</span><span class="n">tree</span><span class="p">[</span><span class="n">left</span><span class="p">]]</span> <span class="o">-=</span> <span class="mi">1</span>
                <span class="k">if</span> <span class="n">cnt</span><span class="p">[</span><span class="n">tree</span><span class="p">[</span><span class="n">left</span><span class="p">]]</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
                    <span class="k">del</span> <span class="n">cnt</span><span class="p">[</span><span class="n">tree</span><span class="p">[</span><span class="n">left</span><span class="p">]]</span>
                <span class="n">left</span> <span class="o">+=</span> <span class="mi">1</span>
            <span class="n">res</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="n">res</span><span class="p">,</span> <span class="n">right</span> <span class="o">-</span> <span class="n">left</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span>
            <span class="n">right</span> <span class="o">+=</span> <span class="mi">1</span>
        <span class="k">return</span> <span class="n">res</span>
        
        
</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 209 Minimum Size Subarray Sum</title>
			<link>https://www.dincerbakkal.com/posts/leetcode209/</link>
			<pubDate>Fri, 16 Jul 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode209/</guid>
			<description>Given an array of positive integers nums and a positive integer target, return the minimal length of a contiguous subarray [numsl, numsl+1, &amp;hellip;, numsr-1, numsr] of which the sum is greater than or equal to target. If there is no such subarray, return 0 instead.
Input: target = 7, nums = [2,3,1,2,4,3] Output: 2 Explanation: The subarray [4,3] has the minimal length under the problem constraint. Input: target = 4, nums = [1,4,4] Output: 1  Have two pointers, one fast, one slow to move to the right.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>Given an array of positive integers nums and a positive integer target, return the minimal length of a contiguous subarray [numsl, numsl+1, &hellip;, numsr-1, numsr] of which the sum is greater than or equal to target. If there is no such subarray, return 0 instead.</p>
<!-- raw HTML omitted -->
<pre><code>Input: target = 7, nums = [2,3,1,2,4,3]
Output: 2
Explanation: The subarray [4,3] has the minimal length under the problem constraint.
</code></pre><!-- raw HTML omitted -->
<pre><code>Input: target = 4, nums = [1,4,4]
Output: 1
</code></pre><!-- raw HTML omitted -->
<ul>
<li>Have two pointers, one fast, one slow to move to the right. Keep moving the faster pointer to the right as long as the sum is less than the target. Subtract the slower pointer pointing number when every time moving the slower pointer.</li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">minSubArrayLen</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">target</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span> <span class="n">nums</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
        <span class="k">if</span> <span class="n">target</span> <span class="o">&gt;</span> <span class="nb">sum</span><span class="p">(</span><span class="n">nums</span><span class="p">):</span>
            <span class="k">return</span> <span class="mi">0</span>
        <span class="n">left</span> <span class="o">=</span> <span class="n">right</span> <span class="o">=</span> <span class="mi">0</span>
        <span class="n">running_sum</span> <span class="o">=</span> <span class="mi">0</span>
        <span class="n">result</span> <span class="o">=</span> <span class="n">sys</span><span class="o">.</span><span class="n">maxsize</span>
        <span class="n">n</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">nums</span><span class="p">)</span>
        
        <span class="k">while</span> <span class="n">right</span> <span class="o">&lt;</span> <span class="n">n</span><span class="p">:</span>
            <span class="n">running_sum</span> <span class="o">+=</span><span class="n">nums</span><span class="p">[</span><span class="n">right</span><span class="p">]</span>
            
            <span class="k">while</span> <span class="n">running_sum</span> <span class="o">&gt;=</span> <span class="n">target</span><span class="p">:</span>
                <span class="n">result</span> <span class="o">=</span> <span class="nb">min</span><span class="p">(</span><span class="n">result</span><span class="p">,</span><span class="n">right</span> <span class="o">-</span> <span class="n">left</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span>
                <span class="n">running_sum</span> <span class="o">-=</span> <span class="n">nums</span><span class="p">[</span><span class="n">left</span><span class="p">]</span>
                <span class="n">left</span> <span class="o">+=</span><span class="mi">1</span>
            
            <span class="n">right</span> <span class="o">+=</span><span class="mi">1</span>
        
        <span class="k">return</span> <span class="n">result</span>
        
        
</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 658 Find K Closest Elements</title>
			<link>https://www.dincerbakkal.com/posts/leetcode658/</link>
			<pubDate>Thu, 15 Jul 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode658/</guid>
			<description>Given a sorted integer array arr, two integers k and x, return the k closest integers to x in the array. The result should also be sorted in ascending order.
An integer a is closer to x than an integer b if:
|a - x| &amp;lt; |b - x|, or |a - x| == |b - x| and a &amp;lt; b
Input: arr = [1,2,3,4,5], k = 4, x = 3 Output: [1,2,3,4] Input: arr = [1,2,3,4,5], k = 4, x = -1 Output: [1,2,3,4]  We can utilize binary search to find the index s which makes both s and s + k have almost the same difference to x.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>Given a sorted integer array arr, two integers k and x, return the k closest integers to x in the array. The result should also be sorted in ascending order.</p>
<p>An integer a is closer to x than an integer b if:</p>
<p>|a - x| &lt; |b - x|, or
|a - x| == |b - x| and a &lt; b</p>
<!-- raw HTML omitted -->
<pre><code>Input: arr = [1,2,3,4,5], k = 4, x = 3
Output: [1,2,3,4]
</code></pre><!-- raw HTML omitted -->
<pre><code>Input: arr = [1,2,3,4,5], k = 4, x = -1
Output: [1,2,3,4]
</code></pre><!-- raw HTML omitted -->
<ul>
<li>We can utilize binary search to find the index s which makes both s and s + k have almost the same difference to x.
In each iteration, if mid + k is closer to x, it means elements from mid + 1 to mid + k are all equal or closer to x due to ascending order. Thus we can discard mid by assigning left to mid + 1. Otherwise, it means mid is equal or closer to x than mid + k so we remain mid in next comparison.
In the end, we will found an index s that has the balanced range with s + k.</li>
<li>neetcode gözden geçir.</li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">findClosestElements</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">arr</span><span class="p">,</span> <span class="n">k</span><span class="p">,</span> <span class="n">x</span><span class="p">):</span>
        <span class="s2">&#34;&#34;&#34;
</span><span class="s2">        :type arr: List[int]
</span><span class="s2">        :type k: int
</span><span class="s2">        :type x: int
</span><span class="s2">        :rtype: List[int]
</span><span class="s2">        &#34;&#34;&#34;</span>

        <span class="c1"># approach: use binary search to find the start which is closest to x</span>

        <span class="n">left</span> <span class="o">=</span> <span class="mi">0</span>
        <span class="n">right</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">arr</span><span class="p">)</span> <span class="o">-</span> <span class="n">k</span>

        <span class="k">while</span> <span class="n">left</span> <span class="o">&lt;</span> <span class="n">right</span><span class="p">:</span>
            <span class="n">mid</span> <span class="o">=</span> <span class="n">left</span> <span class="o">+</span> <span class="p">(</span><span class="n">right</span> <span class="o">-</span> <span class="n">left</span><span class="p">)</span> <span class="o">//</span> <span class="mi">2</span>

            <span class="c1"># mid + k is closer to x, discard mid by assigning left = mid + 1</span>
            <span class="k">if</span> <span class="n">x</span> <span class="o">-</span> <span class="n">arr</span><span class="p">[</span><span class="n">mid</span><span class="p">]</span> <span class="o">&gt;</span> <span class="n">arr</span><span class="p">[</span><span class="n">mid</span> <span class="o">+</span> <span class="n">k</span><span class="p">]</span> <span class="o">-</span> <span class="n">x</span><span class="p">:</span>
                <span class="n">left</span> <span class="o">=</span> <span class="n">mid</span> <span class="o">+</span> <span class="mi">1</span>

            <span class="c1"># mid is equal or closer to x than mid + k, remains mid as candidate</span>
            <span class="k">else</span><span class="p">:</span>
                <span class="n">right</span> <span class="o">=</span> <span class="n">mid</span>

        <span class="c1"># left == right, which makes both left and left + k have same diff with x</span>
        <span class="k">return</span> <span class="n">arr</span><span class="p">[</span><span class="n">left</span> <span class="p">:</span> <span class="n">left</span> <span class="o">+</span> <span class="n">k</span><span class="p">]</span>
        
        
</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 240 Search a 2D Matrix II</title>
			<link>https://www.dincerbakkal.com/posts/leetcode240/</link>
			<pubDate>Wed, 14 Jul 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode240/</guid>
			<description>Write an efficient algorithm that searches for a target value in an m x n integer matrix. The matrix has the following properties:
Integers in each row are sorted in ascending from left to right. Integers in each column are sorted in ascending from top to bottom.
 Input: matrix = [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,14,17,24],[18,21,23,26,30]], target = 5 Output: true  Input: matrix = [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,14,17,24],[18,21,23,26,30]], target = 20 Output: false  Soruda bize bir matrix verliyor satırlar ve sütunlar küçükten büyüğe sıralı durumdalar.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>Write an efficient algorithm that searches for a target value in an m x n integer matrix. The matrix has the following properties:</p>
<p>Integers in each row are sorted in ascending from left to right.
Integers in each column are sorted in ascending from top to bottom.</p>
<!-- raw HTML omitted -->
<pre><code><figure><img src="/image/240ex1.jpg"
         alt="image"/>
</figure>


Input: matrix = [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,14,17,24],[18,21,23,26,30]], target = 5
Output: true
</code></pre><!-- raw HTML omitted -->
<pre><code><figure><img src="/image/240ex2.jpg"
         alt="image"/>
</figure>


Input: matrix = [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,14,17,24],[18,21,23,26,30]], target = 20
Output: false
</code></pre><!-- raw HTML omitted -->
<ul>
<li>Soruda bize bir matrix verliyor satırlar ve sütunlar küçükten büyüğe sıralı durumdalar.Ve bize verilen sayının bu matrix içerisinde bulunup bulunmadığı soruluyor.</li>
<li>Aramaya en sol ve en üst indeksten başlarız.</li>
<li>Eğer değerimiz bu indeksteki değerden küçük ise bir sol sütuna(col-1) geçeriz.</li>
<li>Eğer değerimiz bu indeksteki değerden büyük ise bir alt satıra (row + 1) geçeriz.</li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">searchMatrix</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">matrix</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">]],</span> <span class="n">target</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
        <span class="k">if</span> <span class="ow">not</span> <span class="n">matrix</span><span class="p">:</span>
            <span class="k">return</span> <span class="kc">False</span>
        <span class="n">row</span> <span class="o">=</span> <span class="mi">0</span>
        <span class="n">col</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">matrix</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> <span class="o">-</span><span class="mi">1</span>
        
        <span class="k">while</span> <span class="n">row</span> <span class="o">&lt;</span> <span class="nb">len</span><span class="p">(</span><span class="n">matrix</span><span class="p">)</span> <span class="ow">and</span> <span class="n">col</span><span class="o">&gt;=</span><span class="mi">0</span><span class="p">:</span>
            <span class="n">cur</span> <span class="o">=</span> <span class="n">matrix</span><span class="p">[</span><span class="n">row</span><span class="p">][</span><span class="n">col</span><span class="p">]</span>
            <span class="k">if</span> <span class="n">target</span> <span class="o">==</span> <span class="n">cur</span><span class="p">:</span>
                <span class="k">return</span> <span class="kc">True</span>
            <span class="k">elif</span> <span class="n">target</span> <span class="o">&lt;</span> <span class="n">cur</span><span class="p">:</span>
                <span class="n">col</span> <span class="o">-=</span> <span class="mi">1</span>
            <span class="k">elif</span> <span class="n">target</span> <span class="o">&gt;</span> <span class="n">cur</span><span class="p">:</span>
                <span class="n">row</span><span class="o">+=</span><span class="mi">1</span>
        <span class="k">return</span> <span class="kc">False</span>
        
        
</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 74 Search a 2D Matrix</title>
			<link>https://www.dincerbakkal.com/posts/leetcode074/</link>
			<pubDate>Tue, 13 Jul 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode074/</guid>
			<description>Soru Write an efficient algorithm that searches for a value in an m x n matrix. This matrix has the following properties:
Integers in each row are sorted from left to right. The first integer of each row is greater than the last integer of the previous row.
Örnek 1  Input: matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 3 Output: true Örnek 2  Input: matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 13 Output: false Çözüm  Bir matriste belirli bir hedef sayıyı ikili arama yöntemi ile bulmanızı ister.</description>
			<content type="html"><![CDATA[<h3 id="soru">Soru</h3>
<p>Write an efficient algorithm that searches for a value in an m x n matrix. This matrix has the following properties:</p>
<p>Integers in each row are sorted from left to right.
The first integer of each row is greater than the last integer of the previous row.</p>
<h3 id="örnek-1">Örnek 1</h3>
<pre><code><figure><img src="/image/74ex1.jpg"
         alt="image"/>
</figure>


Input: matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 3
Output: true
</code></pre><h3 id="örnek-2">Örnek 2</h3>
<pre><code><figure><img src="/image/74ex2.jpg"
         alt="image"/>
</figure>


Input: matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 13
Output: false
</code></pre><h3 id="çözüm">Çözüm</h3>
<ul>
<li>Bir matriste belirli bir hedef sayıyı ikili arama yöntemi ile bulmanızı ister. Bu matris özel bir yapıya sahiptir: her satır sıralıdır ve bir sonraki satırın ilk elemanı bir önceki satırın son elemanından büyük veya eşittir. Bu özellikler, matrisi tek boyutlu bir dizi gibi düşünerek ikili arama yapmayı mümkün kılar.</li>
<li>Girdi: İki boyutlu bir tam sayı matrisi matrix ve bir hedef sayı target.</li>
<li>Çıktı: Eğer target matriste varsa true, yoksa false döndür.</li>
<li>Bu problem, matrisin düz bir dizi gibi ele alınabileceği ve buna göre ikili arama yapılacağı anlamına gelir. Matris elemanlarına doğrudan indeks hesaplayarak erişebilirsiniz, böylece iki boyutlu bir yapının tek boyutluymuş gibi ele alınmasını sağlayabilirsiniz.</li>
<li>Çalışma Mekanizması:</li>
<li>Başlangıç ve Bitiş İşaretçileri: left ve right işaretçileri matrisin başlangıç ve bitiş noktalarını belirler.</li>
<li>Ortanca Değerin Hesaplanması: İkili arama yapılırken mid değeri hesaplanır ve bu değer, matrisin bir boyutlu bir diziymiş gibi ele alınarak mid_value değerine çevrilir.</li>
<li>Karşılaştırma ve İşaretçilerin Güncellenmesi: Eğer mid_value, hedefe eşitse true döndürülür. Eğer hedef mid_value&rsquo;den büyükse, arama alanı sağa kaydırılır; eğer küçükse sola kaydırılır.</li>
<li>Sonuç: Eğer left işaretçisi right işaretçisini geçerse, hedef değer matriste bulunamamış demektir ve false döndürülür.</li>
</ul>
<h2 id="code">Code</h2>
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">searchMatrix</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">matrix</span><span class="p">,</span> <span class="n">target</span><span class="p">):</span>
        <span class="k">if</span> <span class="ow">not</span> <span class="n">matrix</span><span class="p">:</span>
            <span class="k">return</span> <span class="kc">False</span>
        
        <span class="n">rows</span><span class="p">,</span> <span class="n">cols</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">matrix</span><span class="p">),</span> <span class="nb">len</span><span class="p">(</span><span class="n">matrix</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
        <span class="n">left</span><span class="p">,</span> <span class="n">right</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span> <span class="n">rows</span> <span class="o">*</span> <span class="n">cols</span> <span class="o">-</span> <span class="mi">1</span>
        
        <span class="k">while</span> <span class="n">left</span> <span class="o">&lt;=</span> <span class="n">right</span><span class="p">:</span>
            <span class="n">mid</span> <span class="o">=</span> <span class="n">left</span> <span class="o">+</span> <span class="p">(</span><span class="n">right</span> <span class="o">-</span> <span class="n">left</span><span class="p">)</span> <span class="o">//</span> <span class="mi">2</span>
            <span class="n">mid_value</span> <span class="o">=</span> <span class="n">matrix</span><span class="p">[</span><span class="n">mid</span> <span class="o">//</span> <span class="n">cols</span><span class="p">][</span><span class="n">mid</span> <span class="o">%</span> <span class="n">cols</span><span class="p">]</span>  <span class="c1"># Satır ve sütun indekslerini hesapla</span>
            
            <span class="k">if</span> <span class="n">mid_value</span> <span class="o">==</span> <span class="n">target</span><span class="p">:</span>
                <span class="k">return</span> <span class="kc">True</span>
            <span class="k">elif</span> <span class="n">mid_value</span> <span class="o">&lt;</span> <span class="n">target</span><span class="p">:</span>
                <span class="n">left</span> <span class="o">=</span> <span class="n">mid</span> <span class="o">+</span> <span class="mi">1</span>
            <span class="k">else</span><span class="p">:</span>
                <span class="n">right</span> <span class="o">=</span> <span class="n">mid</span> <span class="o">-</span> <span class="mi">1</span>
        
        <span class="k">return</span> <span class="kc">False</span>

        
        
</code></pre></div><h3 id="complexity">Complexity</h3>
<ul>
<li>Time complexity (Zaman Karmaşıklığı) : O(log(mn)), burada m satır sayısı ve n sütun sayısıdır. Matris, tek boyutlu bir diziymiş gibi ele alındığı için tüm elemanlar üzerinde logaritmik zamanda arama yapılır.</li>
<li>Space complexity (Alan Karmaşıklığı) : O(1), çünkü ekstra alan kullanılmaz; tüm işlemler mevcut matris üzerinde gerçekleştirilir.</li>
</ul>
]]></content>
		</item>
		
		<item>
			<title>Leetcode 875 Koko Eating Bananas</title>
			<link>https://www.dincerbakkal.com/posts/leetcode875/</link>
			<pubDate>Tue, 13 Jul 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode875/</guid>
			<description>Soru Koko loves to eat bananas. There are n piles of bananas, the ith pile has piles[i] bananas. The guards have gone and will come back in h hours.
Koko can decide her bananas-per-hour eating speed of k. Each hour, she chooses some pile of bananas and eats k bananas from that pile. If the pile has less than k bananas, she eats all of them instead and will not eat any more bananas during this hour.</description>
			<content type="html"><![CDATA[<h3 id="soru">Soru</h3>
<p>Koko loves to eat bananas. There are n piles of bananas, the ith pile has piles[i] bananas. The guards have gone and will come back in h hours.</p>
<p>Koko can decide her bananas-per-hour eating speed of k. Each hour, she chooses some pile of bananas and eats k bananas from that pile. If the pile has less than k bananas, she eats all of them instead and will not eat any more bananas during this hour.</p>
<p>Koko likes to eat slowly but still wants to finish eating all the bananas before the guards return.</p>
<p>Return the minimum integer k such that she can eat all the bananas within h hours.</p>
<h3 id="örnek-1">Örnek 1</h3>
<pre><code>Input: piles = [3,6,7,11], h = 8
Output: 4
</code></pre><h3 id="örnek-2">Örnek 2</h3>
<pre><code>Input: piles = [30,11,23,4,20], h = 5
Output: 30
</code></pre><h3 id="örnek-3">Örnek 3</h3>
<pre><code>Input: piles = [30,11,23,4,20], h = 6
Output: 23
</code></pre><h3 id="çözüm">Çözüm</h3>
<ul>
<li>Koko&rsquo;nun verilen miktarda muzları belirli bir zaman dilimi içinde yiyebilmesi için gereken minimum hızı bulmanızı ister. Koko her saat başı belirli bir hızda muz yiyor ve muzları yemeye devam ettiği sürece bu hızı saat başına sabit tutuyor. Sorunun amacı, Koko&rsquo;nun tüm muzları belirtilen saatler içinde yiyebilmesi için gerekli minimum yeme hızını belirlemek.</li>
<li>Girdi: Bir tam sayılar dizisi piles (her öğe bir muz yığınının boyutunu temsil eder) ve bir tam sayı H (Koko&rsquo;nun muzları yemesi gereken maksimum saat sayısı).</li>
<li>Çıktı: Koko&rsquo;nun tüm muzları H saat içinde yiyebilmesi için gereken minimum hız.</li>
<li>Bu problem ikili arama yöntemi kullanılarak çözülebilir. Hız aralığını daraltarak, Koko&rsquo;nun tüm muzları belirlenen süre içinde yiyip yiyemeyeceğini kontrol edersiniz. Minimum hızı ve maksimum hızı belirlemek için muz yığınlarının maksimum değeri kullanılır ve bu hızlar arasında ikili arama yapılır.</li>
<li>Çalışma Mekanizması:</li>
<li>Hız Aralığının Belirlenmesi: Minimum hız 1, maksimum hız ise piles dizisinin maksimum değeri olarak belirlenir.</li>
<li>İkili Arama: Minimum ve maksimum hız arasında ikili arama yapılır. Her adımda, orta değer (mid) kullanılarak canFinish fonksiyonu çağrılır. Bu fonksiyon, belirli bir hızda tüm muzların yenebilip yenemeyeceğini kontrol eder.</li>
<li>Sonuç: İkili arama tamamlandığında, left değeri, Koko&rsquo;nun tüm muzları belirlenen süre içinde yiyebilmesi için gerekli olan minimum hızı gösterir.</li>
</ul>
<h2 id="code">Code</h2>
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">minEatingSpeed</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">piles</span><span class="p">,</span> <span class="n">H</span><span class="p">):</span>
        <span class="k">def</span> <span class="nf">canFinish</span><span class="p">(</span><span class="n">k</span><span class="p">):</span>
            <span class="n">time</span> <span class="o">=</span> <span class="mi">0</span>
            <span class="k">for</span> <span class="n">pile</span> <span class="ow">in</span> <span class="n">piles</span><span class="p">:</span>
                <span class="n">time</span> <span class="o">+=</span> <span class="p">(</span><span class="n">pile</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span> <span class="o">//</span> <span class="n">k</span> <span class="o">+</span> <span class="mi">1</span>  <span class="c1"># Her yığını k hızında yemek için gereken saat</span>
            <span class="k">return</span> <span class="n">time</span> <span class="o">&lt;=</span> <span class="n">H</span>

        <span class="n">left</span><span class="p">,</span> <span class="n">right</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span> <span class="nb">max</span><span class="p">(</span><span class="n">piles</span><span class="p">)</span>  <span class="c1"># Hız aralığı 1 ile en büyük yığın arasında</span>
        <span class="k">while</span> <span class="n">left</span> <span class="o">&lt;</span> <span class="n">right</span><span class="p">:</span>
            <span class="n">mid</span> <span class="o">=</span> <span class="p">(</span><span class="n">left</span> <span class="o">+</span> <span class="n">right</span><span class="p">)</span> <span class="o">//</span> <span class="mi">2</span>
            <span class="k">if</span> <span class="n">canFinish</span><span class="p">(</span><span class="n">mid</span><span class="p">):</span>
                <span class="n">right</span> <span class="o">=</span> <span class="n">mid</span>  <span class="c1"># Daha düşük bir hızda deneyin</span>
            <span class="k">else</span><span class="p">:</span>
                <span class="n">left</span> <span class="o">=</span> <span class="n">mid</span> <span class="o">+</span> <span class="mi">1</span>  <span class="c1"># Hızı arttırın</span>

        <span class="k">return</span> <span class="n">left</span>

        
</code></pre></div><h3 id="complexity">Complexity</h3>
<ul>
<li>Time complexity (Zaman Karmaşıklığı) : O(N log M), burada N piles dizisinin uzunluğu ve M maksimum muz yığını boyutudur. Her canFinish çağrısı O(N) süre alır ve ikili arama O(log M) süre alır.</li>
<li>Space complexity (Alan Karmaşıklığı) : O(1), çünkü ekstra bir alan kullanılmaz; tüm işlemler girdi üzerinde yerinde gerçekleştirilir.</li>
</ul>
]]></content>
		</item>
		
		<item>
			<title>Leetcode 81 Search in Rotated Sorted Array II</title>
			<link>https://www.dincerbakkal.com/posts/leetcode081/</link>
			<pubDate>Mon, 12 Jul 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode081/</guid>
			<description>There is an integer array nums sorted in non-decreasing order (not necessarily with distinct values).
Before being passed to your function, nums is rotated at an unknown pivot index k (0 &amp;lt;= k &amp;lt; nums.length) such that the resulting array is [nums[k], nums[k+1], &amp;hellip;, nums[n-1], nums[0], nums[1], &amp;hellip;, nums[k-1]] (0-indexed). For example, [0,1,2,4,4,4,5,6,6,7] might be rotated at pivot index 5 and become [4,5,6,6,7,0,1,2,4,4].
Given the array nums after the rotation and an integer target, return true if target is in nums, or false if it is not in nums.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>There is an integer array nums sorted in non-decreasing order (not necessarily with distinct values).</p>
<p>Before being passed to your function, nums is rotated at an unknown pivot index k (0 &lt;= k &lt; nums.length) such that the resulting array is [nums[k], nums[k+1], &hellip;, nums[n-1], nums[0], nums[1], &hellip;, nums[k-1]] (0-indexed). For example, [0,1,2,4,4,4,5,6,6,7] might be rotated at pivot index 5 and become [4,5,6,6,7,0,1,2,4,4].</p>
<p>Given the array nums after the rotation and an integer target, return true if target is in nums, or false if it is not in nums.</p>
<p>You must decrease the overall operation steps as much as possible.</p>
<!-- raw HTML omitted -->
<pre><code>Input: nums = [2,5,6,0,0,1,2], target = 0
Output: true
</code></pre><!-- raw HTML omitted -->
<pre><code>Input: nums = [2,5,6,0,0,1,2], target = 3
Output: false
</code></pre><!-- raw HTML omitted -->
<ul>
<li>Soruda bize liste veriliyor.Bu listedeki sayılar küçükten büyüğe sıralı iken n defa kaydırılmış olsun.Ayrıca bu listede aynı sayıdan birden fazla olabilir.Böyle bir listede bize verilen sayı var ise True bulunmuyor ise False dönmemiz isteniyor.</li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">search</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">nums</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">],</span> <span class="n">target</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
        <span class="n">l</span><span class="p">,</span><span class="n">r</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">nums</span><span class="p">)</span> <span class="o">-</span><span class="mi">1</span>
        <span class="k">while</span> <span class="n">l</span> <span class="o">&lt;=</span><span class="n">r</span><span class="p">:</span>
            <span class="n">mid</span> <span class="o">=</span> <span class="p">(</span><span class="n">l</span> <span class="o">+</span> <span class="n">r</span><span class="p">)</span><span class="o">//</span><span class="mi">2</span>
            <span class="k">if</span> <span class="n">nums</span><span class="p">[</span><span class="n">mid</span><span class="p">]</span> <span class="o">==</span> <span class="n">target</span> <span class="p">:</span> <span class="k">return</span> <span class="kc">True</span>
            <span class="k">if</span> <span class="p">(</span><span class="n">nums</span><span class="p">[</span><span class="n">l</span><span class="p">]</span> <span class="o">==</span> <span class="n">nums</span><span class="p">[</span><span class="n">mid</span><span class="p">])</span> <span class="ow">and</span> <span class="p">(</span><span class="n">nums</span><span class="p">[</span><span class="n">r</span><span class="p">]</span> <span class="o">==</span> <span class="n">nums</span><span class="p">[</span><span class="n">mid</span><span class="p">]):</span>
                <span class="n">l</span><span class="p">,</span><span class="n">r</span> <span class="o">=</span> <span class="n">l</span><span class="o">+</span><span class="mi">1</span><span class="p">,</span><span class="n">r</span><span class="o">-</span><span class="mi">1</span>
            <span class="k">elif</span> <span class="n">nums</span><span class="p">[</span><span class="n">l</span><span class="p">]</span><span class="o">&lt;=</span><span class="n">nums</span><span class="p">[</span><span class="n">mid</span><span class="p">]:</span>
                <span class="k">if</span><span class="p">(</span><span class="n">nums</span><span class="p">[</span><span class="n">l</span><span class="p">]</span><span class="o">&lt;=</span><span class="n">target</span><span class="p">)</span> <span class="ow">and</span> <span class="p">(</span><span class="n">nums</span><span class="p">[</span><span class="n">mid</span><span class="p">]</span><span class="o">&gt;</span><span class="n">target</span><span class="p">):</span>
                    <span class="n">r</span><span class="o">=</span><span class="n">mid</span><span class="o">-</span><span class="mi">1</span>
                <span class="k">else</span><span class="p">:</span>
                    <span class="n">l</span> <span class="o">=</span> <span class="n">mid</span> <span class="o">+</span> <span class="mi">1</span>
            <span class="k">else</span><span class="p">:</span>
                <span class="k">if</span><span class="p">(</span><span class="n">nums</span><span class="p">[</span><span class="n">mid</span><span class="p">]</span><span class="o">&lt;</span><span class="n">target</span><span class="p">)</span> <span class="ow">and</span> <span class="p">(</span><span class="n">nums</span><span class="p">[</span><span class="n">r</span><span class="p">]</span><span class="o">&gt;=</span><span class="n">target</span><span class="p">):</span>
                    <span class="n">l</span><span class="o">=</span><span class="n">mid</span><span class="o">+</span><span class="mi">1</span>
                <span class="k">else</span><span class="p">:</span>
                    <span class="n">r</span><span class="o">=</span><span class="n">mid</span><span class="o">-</span><span class="mi">1</span>
        <span class="k">return</span> <span class="kc">False</span>
        
</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 162 Find Peak Element</title>
			<link>https://www.dincerbakkal.com/posts/leetcode162/</link>
			<pubDate>Sun, 11 Jul 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode162/</guid>
			<description>A peak element is an element that is strictly greater than its neighbors.
Given an integer array nums, find a peak element, and return its index. If the array contains multiple peaks, return the index to any of the peaks.
You may imagine that nums[-1] = nums[n] = -∞.
You must write an algorithm that runs in O(log n) time.
Input: nums = [1,2,3,1] Output: 2 Explanation: 3 is a peak element and your function should return the index number 2.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>A peak element is an element that is strictly greater than its neighbors.</p>
<p>Given an integer array nums, find a peak element, and return its index. If the array contains multiple peaks, return the index to any of the peaks.</p>
<p>You may imagine that nums[-1] = nums[n] = -∞.</p>
<p>You must write an algorithm that runs in O(log n) time.</p>
<!-- raw HTML omitted -->
<pre><code>Input: nums = [1,2,3,1]
Output: 2
Explanation: 3 is a peak element and your function should return the index number 2.
</code></pre><!-- raw HTML omitted -->
<pre><code>Input: nums = [1,2,1,3,5,6,4]
Output: 5
Explanation: Your function can return either index number 1 where the peak element is 2, or index number 5 where the peak element is 6.
</code></pre><!-- raw HTML omitted -->
<ul>
<li>Soruda bize liste veriliyor.Bu listedeki sayılar karışık olarak verilmiş.Ve bizden tepe noktasını bulmamız isteniyor.</li>
<li>Tepe noktası demek sayının solundaki ve sağındaki sayılardan büyük olması.</li>
<li>İkili arama ile bu soruyu çözebiliriz.</li>
<li>İlk orta noktayı bulduğumuzda eğer orta noktanın sağındaki sayı orta noktadan büyük ise bu sayı tepe değildir.</li>
<li>Bu durumda sol işaretçiyi orta nokta + 1 yaparız.</li>
<li>Eğer orta noktanın sağındaki sayı orta noktadan büyük değil ise sağ işaretçiyi orta nokta yaparız.</li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">findPeakElement</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">nums</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
        <span class="n">l</span><span class="p">,</span><span class="n">r</span> <span class="o">=</span> <span class="mi">0</span> <span class="p">,</span><span class="nb">len</span><span class="p">(</span><span class="n">nums</span><span class="p">)</span><span class="o">-</span><span class="mi">1</span>
        
        <span class="k">while</span> <span class="n">l</span><span class="o">&lt;</span><span class="n">r</span><span class="p">:</span>
            <span class="n">mid</span><span class="o">=</span><span class="p">(</span><span class="n">l</span><span class="o">+</span><span class="n">r</span><span class="p">)</span><span class="o">//</span><span class="mi">2</span>
            <span class="k">if</span><span class="p">(</span><span class="n">nums</span><span class="p">[</span><span class="n">mid</span><span class="p">]</span><span class="o">&lt;</span><span class="n">nums</span><span class="p">[</span><span class="n">mid</span><span class="o">+</span><span class="mi">1</span><span class="p">]):</span>
                <span class="n">l</span><span class="o">=</span><span class="n">mid</span><span class="o">+</span><span class="mi">1</span>
            <span class="k">else</span><span class="p">:</span>
                <span class="n">r</span><span class="o">=</span><span class="n">mid</span>
        <span class="k">return</span> <span class="n">l</span>
        
</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 33 Search in Rotated Sorted Array</title>
			<link>https://www.dincerbakkal.com/posts/leetcode033/</link>
			<pubDate>Sun, 11 Jul 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode033/</guid>
			<description>Soru There is an integer array nums sorted in ascending order (with distinct values).
Prior to being passed to your function, nums is possibly rotated at an unknown pivot index k (1 &amp;lt;= k &amp;lt; nums.length) such that the resulting array is [nums[k], nums[k+1], &amp;hellip;, nums[n-1], nums[0], nums[1], &amp;hellip;, nums[k-1]] (0-indexed). For example, [0,1,2,4,5,6,7] might be rotated at pivot index 3 and become [4,5,6,7,0,1,2].
Given the array nums after the possible rotation and an integer target, return the index of target if it is in nums, or -1 if it is not in nums.</description>
			<content type="html"><![CDATA[<h3 id="soru">Soru</h3>
<p>There is an integer array nums sorted in ascending order (with distinct values).</p>
<p>Prior to being passed to your function, nums is possibly rotated at an unknown pivot index k (1 &lt;= k &lt; nums.length) such that the resulting array is [nums[k], nums[k+1], &hellip;, nums[n-1], nums[0], nums[1], &hellip;, nums[k-1]] (0-indexed). For example, [0,1,2,4,5,6,7] might be rotated at pivot index 3 and become [4,5,6,7,0,1,2].</p>
<p>Given the array nums after the possible rotation and an integer target, return the index of target if it is in nums, or -1 if it is not in nums.</p>
<p>You must write an algorithm with O(log n) runtime complexity.</p>
<h3 id="örnek-1">Örnek 1</h3>
<pre><code>Input: nums = [4,5,6,7,0,1,2], target = 0
Output: 4
</code></pre><h3 id="örnek-2">Örnek 2</h3>
<pre><code>Input: nums = [4,5,6,7,0,1,2], target = 3
Output: -1
</code></pre><h3 id="çözüm">Çözüm</h3>
<ul>
<li>&ldquo;33. Search in Rotated Sorted Array&rdquo; sorusu, önceden sıralanmış bir dizinin döndürüldüğü bir versiyonunda belirli bir hedef değeri aramanızı ister. Dizi, önce sıralanmış ve ardından belirli bir pivot noktasında döndürülmüştür, yani dizi kısmen sıralıdır.</li>
<li>Girdi: Döndürülmüş bir sıralı tam sayı dizisi nums ve bir hedef sayı target.</li>
<li>Çıktı: Eğer target dizide varsa, onun indeksini döndürün. Yoksa -1 döndürün.</li>
<li>Bu problem, ikili arama (binary search) kullanılarak çözülebilir. Ancak, dizinin döndürülmüş olması, doğrudan ikili aramanın uygulanmasını karmaşıklaştırır. Bunun yerine, ikili arama sırasında dizinin hangi kısmının sıralı olduğunu belirleyip, target değerinin o kısımda olup olmadığını kontrol etmek gerekir.</li>
<li>Çalışma Mekanizması:</li>
<li>Başlangıç ve Bitiş İşaretçileri: left ve right işaretçileri dizinin başlangıç ve bitişinde başlar.</li>
<li>İkili Arama: Döngü, left işaretçisi right işaretçisinden küçük veya eşit olduğu sürece devam eder.</li>
<li>Pivot Kontrolü ve İkili Arama Uygulaması:
Eğer sol taraf sıralıysa (nums[left] &lt;= nums[mid]), target&rsquo;ın bu aralıkta olup olmadığını kontrol edilir. Eğer aralıktaysa, arama bu yarıda devam eder.
Eğer sağ taraf sıralıysa (nums[mid] &lt;= nums[right]), target&rsquo;ın bu aralıkta olup olmadığını kontrol edilir. Eğer aralıktaysa, arama bu yarıda devam eder.</li>
<li>Sonuç: target bulunursa indeksi, bulunamazsa -1 döndürülür.</li>
</ul>
<h2 id="code">Code</h2>
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">search</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">nums</span><span class="p">,</span> <span class="n">target</span><span class="p">):</span>
        <span class="n">left</span><span class="p">,</span> <span class="n">right</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">nums</span><span class="p">)</span> <span class="o">-</span> <span class="mi">1</span>
        
        <span class="k">while</span> <span class="n">left</span> <span class="o">&lt;=</span> <span class="n">right</span><span class="p">:</span>
            <span class="n">mid</span> <span class="o">=</span> <span class="p">(</span><span class="n">left</span> <span class="o">+</span> <span class="n">right</span><span class="p">)</span> <span class="o">//</span> <span class="mi">2</span>
            
            <span class="k">if</span> <span class="n">nums</span><span class="p">[</span><span class="n">mid</span><span class="p">]</span> <span class="o">==</span> <span class="n">target</span><span class="p">:</span>
                <span class="k">return</span> <span class="n">mid</span>
            
            <span class="c1"># Sol yarı sıralı</span>
            <span class="k">if</span> <span class="n">nums</span><span class="p">[</span><span class="n">left</span><span class="p">]</span> <span class="o">&lt;=</span> <span class="n">nums</span><span class="p">[</span><span class="n">mid</span><span class="p">]:</span>
                <span class="k">if</span> <span class="n">nums</span><span class="p">[</span><span class="n">left</span><span class="p">]</span> <span class="o">&lt;=</span> <span class="n">target</span> <span class="o">&lt;</span> <span class="n">nums</span><span class="p">[</span><span class="n">mid</span><span class="p">]:</span>
                    <span class="n">right</span> <span class="o">=</span> <span class="n">mid</span> <span class="o">-</span> <span class="mi">1</span>
                <span class="k">else</span><span class="p">:</span>
                    <span class="n">left</span> <span class="o">=</span> <span class="n">mid</span> <span class="o">+</span> <span class="mi">1</span>
            <span class="c1"># Sağ yarı sıralı</span>
            <span class="k">else</span><span class="p">:</span>
                <span class="k">if</span> <span class="n">nums</span><span class="p">[</span><span class="n">mid</span><span class="p">]</span> <span class="o">&lt;</span> <span class="n">target</span> <span class="o">&lt;=</span> <span class="n">nums</span><span class="p">[</span><span class="n">right</span><span class="p">]:</span>
                    <span class="n">left</span> <span class="o">=</span> <span class="n">mid</span> <span class="o">+</span> <span class="mi">1</span>
                <span class="k">else</span><span class="p">:</span>
                    <span class="n">right</span> <span class="o">=</span> <span class="n">mid</span> <span class="o">-</span> <span class="mi">1</span>
        
        <span class="k">return</span> <span class="o">-</span><span class="mi">1</span>

        
</code></pre></div><h3 id="complexity">Complexity</h3>
<ul>
<li>Time complexity (Zaman Karmaşıklığı) : O(log n), burada n dizinin uzunluğudur. İkili arama, her adımda arama alanını yarıya indirdiği için logaritmik zaman karmaşıklığına sahiptir.</li>
<li>Space complexity (Alan Karmaşıklığı) : O(1), çünkü ekstra bir alan kullanılmaz, tüm işlemler mevcut dizide yapılır.</li>
</ul>
]]></content>
		</item>
		
		<item>
			<title>Leetcode 36 Valid Sudoku</title>
			<link>https://www.dincerbakkal.com/posts/leetcode036/</link>
			<pubDate>Sun, 11 Jul 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode036/</guid>
			<description>Soru Determine if a 9 x 9 Sudoku board is valid. Only the filled cells need to be validated according to the following rules:
Each row must contain the digits 1-9 without repetition. Each column must contain the digits 1-9 without repetition. Each of the nine 3 x 3 sub-boxes of the grid must contain the digits 1-9 without repetition. Note:
A Sudoku board (partially filled) could be valid but is not necessarily solvable.</description>
			<content type="html"><![CDATA[<h3 id="soru">Soru</h3>
<p>Determine if a 9 x 9 Sudoku board is valid. Only the filled cells need to be validated according to the following rules:</p>
<p>Each row must contain the digits 1-9 without repetition.
Each column must contain the digits 1-9 without repetition.
Each of the nine 3 x 3 sub-boxes of the grid must contain the digits 1-9 without repetition.
Note:</p>
<p>A Sudoku board (partially filled) could be valid but is not necessarily solvable.
Only the filled cells need to be validated according to the mentioned rules.</p>
<h3 id="örnek-1">Örnek 1</h3>
<pre><code>Input: board = 
[[&quot;5&quot;,&quot;3&quot;,&quot;.&quot;,&quot;.&quot;,&quot;7&quot;,&quot;.&quot;,&quot;.&quot;,&quot;.&quot;,&quot;.&quot;]
,[&quot;6&quot;,&quot;.&quot;,&quot;.&quot;,&quot;1&quot;,&quot;9&quot;,&quot;5&quot;,&quot;.&quot;,&quot;.&quot;,&quot;.&quot;]
,[&quot;.&quot;,&quot;9&quot;,&quot;8&quot;,&quot;.&quot;,&quot;.&quot;,&quot;.&quot;,&quot;.&quot;,&quot;6&quot;,&quot;.&quot;]
,[&quot;8&quot;,&quot;.&quot;,&quot;.&quot;,&quot;.&quot;,&quot;6&quot;,&quot;.&quot;,&quot;.&quot;,&quot;.&quot;,&quot;3&quot;]
,[&quot;4&quot;,&quot;.&quot;,&quot;.&quot;,&quot;8&quot;,&quot;.&quot;,&quot;3&quot;,&quot;.&quot;,&quot;.&quot;,&quot;1&quot;]
,[&quot;7&quot;,&quot;.&quot;,&quot;.&quot;,&quot;.&quot;,&quot;2&quot;,&quot;.&quot;,&quot;.&quot;,&quot;.&quot;,&quot;6&quot;]
,[&quot;.&quot;,&quot;6&quot;,&quot;.&quot;,&quot;.&quot;,&quot;.&quot;,&quot;.&quot;,&quot;2&quot;,&quot;8&quot;,&quot;.&quot;]
,[&quot;.&quot;,&quot;.&quot;,&quot;.&quot;,&quot;4&quot;,&quot;1&quot;,&quot;9&quot;,&quot;.&quot;,&quot;.&quot;,&quot;5&quot;]
,[&quot;.&quot;,&quot;.&quot;,&quot;.&quot;,&quot;.&quot;,&quot;8&quot;,&quot;.&quot;,&quot;.&quot;,&quot;7&quot;,&quot;9&quot;]]
Output: true
</code></pre><h3 id="örnek-2">Örnek 2</h3>
<pre><code>Input: board = 
[[&quot;8&quot;,&quot;3&quot;,&quot;.&quot;,&quot;.&quot;,&quot;7&quot;,&quot;.&quot;,&quot;.&quot;,&quot;.&quot;,&quot;.&quot;]
,[&quot;6&quot;,&quot;.&quot;,&quot;.&quot;,&quot;1&quot;,&quot;9&quot;,&quot;5&quot;,&quot;.&quot;,&quot;.&quot;,&quot;.&quot;]
,[&quot;.&quot;,&quot;9&quot;,&quot;8&quot;,&quot;.&quot;,&quot;.&quot;,&quot;.&quot;,&quot;.&quot;,&quot;6&quot;,&quot;.&quot;]
,[&quot;8&quot;,&quot;.&quot;,&quot;.&quot;,&quot;.&quot;,&quot;6&quot;,&quot;.&quot;,&quot;.&quot;,&quot;.&quot;,&quot;3&quot;]
,[&quot;4&quot;,&quot;.&quot;,&quot;.&quot;,&quot;8&quot;,&quot;.&quot;,&quot;3&quot;,&quot;.&quot;,&quot;.&quot;,&quot;1&quot;]
,[&quot;7&quot;,&quot;.&quot;,&quot;.&quot;,&quot;.&quot;,&quot;2&quot;,&quot;.&quot;,&quot;.&quot;,&quot;.&quot;,&quot;6&quot;]
,[&quot;.&quot;,&quot;6&quot;,&quot;.&quot;,&quot;.&quot;,&quot;.&quot;,&quot;.&quot;,&quot;2&quot;,&quot;8&quot;,&quot;.&quot;]
,[&quot;.&quot;,&quot;.&quot;,&quot;.&quot;,&quot;4&quot;,&quot;1&quot;,&quot;9&quot;,&quot;.&quot;,&quot;.&quot;,&quot;5&quot;]
,[&quot;.&quot;,&quot;.&quot;,&quot;.&quot;,&quot;.&quot;,&quot;8&quot;,&quot;.&quot;,&quot;.&quot;,&quot;7&quot;,&quot;9&quot;]]
Output: false
Explanation: Same as Example 1, except with the 5 in the top left corner being modified to 8. Since there are two 8's in the top left 3x3 sub-box, it is invalid.
</code></pre><h3 id="çözüm">Çözüm</h3>
<ul>
<li>
<p>Bu problem, 9x9&rsquo;lik bir Sudoku tahtasının geçerli olup olmadığını kontrol etmenizi ister. Geçerli bir Sudoku tahtası, her satırda, her sütunda ve her 3x3&rsquo;lük alt-karede 1&rsquo;den 9&rsquo;a kadar rakamların tekrarlanmadan yer almasını gerektirir.</p>
</li>
<li>
<p>Bu problemi çözmek için, her satır, her sütun ve her 3x3 alt-karedeki sayıların tekrarlanıp tekrarlanmadığını kontrol etmek gerekiyor. Python&rsquo;da bu kontrolü set kullanarak ve her birinin bir defaultdict içinde saklanmasını sağlayarak yapabiliriz.</p>
</li>
<li>
<p>Data Yapıları Hazırlama:cols, rows, squares adında üç defaultdict(set) oluşturulur. Bunlar sırasıyla her sütun, satır ve 3x3 alt-kare için geçerli sayıları saklar.</p>
</li>
<li>
<p>Tahta Üzerinde Dolaşma:9x9 tahtanın her bir hücresi (r, c) koordinatlarıyla dolaşılır.</p>
</li>
<li>
<p>Boş Hücre Kontrolü:board[r][c] == &ldquo;.&rdquo; kontrolü ile boş hücreler atlanır.</p>
</li>
<li>
<p>Geçerlilik Kontrolü:Her hücre için, o hücredeki değerin mevcut satır, sütun veya 3x3 alt-karede olup olmadığı kontrol edilir. Eğer değer zaten mevcutsa, Sudoku tahtası geçerli değildir ve fonksiyon False döndürür.</p>
</li>
<li>
<p>Setlere Değer Ekleme:Çakışma tespit edilmediyse, ilgili değer ilgili satırın, sütunun ve alt-karenin setine eklenir.</p>
</li>
<li>
<p>Sonuç:Eğer tahtada herhangi bir çakışma yoksa, döngüler tamamlandıktan sonra Sudoku geçerli kabul edilir ve True döndürülür.</p>
</li>
<li>
<p>Not : key = (r /3, c /3) Örneğin, hücre (4, 7) için:(4 // 3) = 1 ve (7 // 3) = 2 hesaplanır.Bu yöntem, her bir hücrenin hangi 3x3 alt-kare içinde bulunduğunu kolayca saptamak için etkili bir yol sağlar. Bu da, her 3x3 alt-karedeki sayıların tekrarlanmadığını kontrol etmeyi basit ve hızlı hale getirir. Bu hesaplama, her bir alt-karenin kendine özgü bir set içermesini ve dolayısıyla her birinin içindeki değerlerin benzersiz olmasını sağlar.</p>
</li>
</ul>
<h2 id="codeh2">Code<!-- raw HTML omitted --></h2>
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">isValidSudoku</span><span class="p">(</span><span class="n">board</span><span class="p">):</span>
        <span class="c1"># Satır, sütun ve 3x3 alt-kareleri takip etmek için dictionary&#39;ler</span>
        <span class="n">cols</span> <span class="o">=</span> <span class="n">defaultdict</span><span class="p">(</span><span class="nb">set</span><span class="p">)</span>
        <span class="n">rows</span> <span class="o">=</span> <span class="n">defaultdict</span><span class="p">(</span><span class="nb">set</span><span class="p">)</span>
        <span class="n">squares</span> <span class="o">=</span> <span class="n">defaultdict</span><span class="p">(</span><span class="nb">set</span><span class="p">)</span>  <span class="c1"># key = (r /3, c /3)</span>

        <span class="k">for</span> <span class="n">r</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">9</span><span class="p">):</span>
            <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">9</span><span class="p">):</span>
                <span class="k">if</span> <span class="n">board</span><span class="p">[</span><span class="n">r</span><span class="p">][</span><span class="n">c</span><span class="p">]</span> <span class="o">==</span> <span class="s2">&#34;.&#34;</span><span class="p">:</span>
                    <span class="k">continue</span>  <span class="c1"># Boş hücreler dikkate alınmaz</span>
                <span class="k">if</span> <span class="p">(</span>
                    <span class="n">board</span><span class="p">[</span><span class="n">r</span><span class="p">][</span><span class="n">c</span><span class="p">]</span> <span class="ow">in</span> <span class="n">rows</span><span class="p">[</span><span class="n">r</span><span class="p">]</span>  <span class="c1"># Satırda aynı değerden var mı kontrol et</span>
                    <span class="ow">or</span> <span class="n">board</span><span class="p">[</span><span class="n">r</span><span class="p">][</span><span class="n">c</span><span class="p">]</span> <span class="ow">in</span> <span class="n">cols</span><span class="p">[</span><span class="n">c</span><span class="p">]</span>  <span class="c1"># Sütunda aynı değerden var mı kontrol et</span>
                    <span class="ow">or</span> <span class="n">board</span><span class="p">[</span><span class="n">r</span><span class="p">][</span><span class="n">c</span><span class="p">]</span> <span class="ow">in</span> <span class="n">squares</span><span class="p">[(</span><span class="n">r</span> <span class="o">//</span> <span class="mi">3</span><span class="p">,</span> <span class="n">c</span> <span class="o">//</span> <span class="mi">3</span><span class="p">)]</span>  <span class="c1"># İlgili 3x3 alt-karede kontrol et</span>
                <span class="p">):</span>
                    <span class="k">return</span> <span class="kc">False</span>  <span class="c1"># Eğer tekrar eden bir değer varsa, Sudoku geçersizdir</span>

                <span class="c1"># Çakışma yoksa, değeri ilgili setlere ekle</span>
                <span class="n">cols</span><span class="p">[</span><span class="n">c</span><span class="p">]</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">board</span><span class="p">[</span><span class="n">r</span><span class="p">][</span><span class="n">c</span><span class="p">])</span>
                <span class="n">rows</span><span class="p">[</span><span class="n">r</span><span class="p">]</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">board</span><span class="p">[</span><span class="n">r</span><span class="p">][</span><span class="n">c</span><span class="p">])</span>
                <span class="n">squares</span><span class="p">[(</span><span class="n">r</span> <span class="o">//</span> <span class="mi">3</span><span class="p">,</span> <span class="n">c</span> <span class="o">//</span> <span class="mi">3</span><span class="p">)]</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">board</span><span class="p">[</span><span class="n">r</span><span class="p">][</span><span class="n">c</span><span class="p">])</span>

        <span class="k">return</span> <span class="kc">True</span>  <span class="c1"># Tüm hücreler geçerliyse, Sudoku geçerlidir</span>
        
</code></pre></div><h3 id="complexity">Complexity</h3>
<ul>
<li>Time complexity (Zaman Karmaşıklığı): O(1), çünkü tahta her zaman 9x9&rsquo;dur ve sabit sayıda işlem yapılmaktadır.</li>
<li>Space complexity (Alan Karmaşıklığı): O(1), çünkü yalnızca sabit miktarda ekstra hafıza kullanılmaktadır (27 set için).</li>
</ul>
]]></content>
		</item>
		
		<item>
			<title>Leetcode 4 Median of Two Sorted Arrays</title>
			<link>https://www.dincerbakkal.com/posts/leetcode004/</link>
			<pubDate>Sun, 11 Jul 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode004/</guid>
			<description>Soru Given two sorted arrays nums1 and nums2 of size m and n respectively, return the median of the two sorted arrays.
The overall run time complexity should be O(log (m+n)).
Örnek 1 Input: nums1 = [1,3], nums2 = [2] Output: 2.00000 Explanation: merged array = [1,2,3] and median is 2. Örnek 2 Input: nums1 = [1,2], nums2 = [3,4] Output: 2.50000 Explanation: merged array = [1,2,3,4] and median is (2 + 3) / 2 = 2.</description>
			<content type="html"><![CDATA[<h3 id="soru">Soru</h3>
<p>Given two sorted arrays nums1 and nums2 of size m and n respectively, return the median of the two sorted arrays.</p>
<p>The overall run time complexity should be O(log (m+n)).</p>
<h3 id="örnek-1">Örnek 1</h3>
<pre><code>Input: nums1 = [1,3], nums2 = [2]
Output: 2.00000
Explanation: merged array = [1,2,3] and median is 2.
</code></pre><h3 id="örnek-2">Örnek 2</h3>
<pre><code>Input: nums1 = [1,2], nums2 = [3,4]
Output: 2.50000
Explanation: merged array = [1,2,3,4] and median is (2 + 3) / 2 = 2.5.
</code></pre><h3 id="çözüm">Çözüm</h3>
<ul>
<li>&ldquo;4. Median of Two Sorted Arrays&rdquo; sorusu, iki sıralı diziden oluşan veri kümesinin medyanını bulmanızı ister. Bu problem, genellikle iki sıralı dizi verildiğinde bunların birleşiminden oluşan dizinin medyanını etkili bir şekilde hesaplamak için tasarlanmıştır. Problemde, dizilerin boş olmadığı ve birleşimlerinin en az bir eleman içerdiği belirtilir.</li>
<li>Girdi: İki sıralı tam sayı dizisi nums1 ve nums2.</li>
<li>Çıktı: İki dizinin birleşiminden oluşan dizinin medyanı.</li>
<li>Bu problemi çözmek için kullanılan yaygın bir yöntem, iki sıralı dizide ikili arama (binary search) kullanmaktır. Temel fikir, bir dizi içinde medyanı bulmak için kullanılan ikili arama tekniğini iki diziye uygulamaktır. Bu yaklaşım, özellikle iki dizi birleştirildiğinde medyanın belirlenmesi gerektiğinde etkilidir.</li>
<li>Çalışma Mekanizması:</li>
<li>Dizileri Yeniden Sıralama ve İndeks Ayarlama: Daha kısa diziyi A, diğerini B olarak ayarla. Böylece arama süreci daha hızlı olur.</li>
<li>İkili Arama Uygulama: A üzerinde ikili arama yaparak, her adımda B üzerinde de uygun bir indeks hesapla. Bu indeksler medyanı belirlemek için kullanılacak.</li>
<li>Koşulların Kontrolü: A ve B üzerinde bulunan elemanlar arasında karşılaştırmalar yaparak, medyanın doğru yerde olup olmadığını kontrol et.</li>
<li>Sonucun Hesaplanması: Medyanı hesapla. Eğer toplam uzunluk tek sayı ise, ortadaki değeri döndür. Çift sayı ise, ortadaki iki değerin ortalamasını al.</li>
</ul>
<h2 id="code">Code</h2>
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">def</span> <span class="nf">findMedianSortedArrays</span><span class="p">(</span><span class="n">nums1</span><span class="p">,</span> <span class="n">nums2</span><span class="p">):</span>
    <span class="c1"># Kısa olan diziyi A, diğerini B olarak adlandır</span>
    <span class="n">A</span><span class="p">,</span> <span class="n">B</span> <span class="o">=</span> <span class="p">(</span><span class="n">nums1</span><span class="p">,</span> <span class="n">nums2</span><span class="p">)</span> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">nums1</span><span class="p">)</span> <span class="o">&lt;</span> <span class="nb">len</span><span class="p">(</span><span class="n">nums2</span><span class="p">)</span> <span class="k">else</span> <span class="p">(</span><span class="n">nums2</span><span class="p">,</span> <span class="n">nums1</span><span class="p">)</span>
    <span class="n">total</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">A</span><span class="p">)</span> <span class="o">+</span> <span class="nb">len</span><span class="p">(</span><span class="n">B</span><span class="p">)</span>
    <span class="n">half</span> <span class="o">=</span> <span class="n">total</span> <span class="o">//</span> <span class="mi">2</span>

    <span class="n">l</span><span class="p">,</span> <span class="n">r</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">A</span><span class="p">)</span> <span class="o">-</span> <span class="mi">1</span>
    <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
        <span class="n">i</span> <span class="o">=</span> <span class="p">(</span><span class="n">l</span> <span class="o">+</span> <span class="n">r</span><span class="p">)</span> <span class="o">//</span> <span class="mi">2</span>  <span class="c1"># A&#39;da medyan için orta nokta</span>
        <span class="n">j</span> <span class="o">=</span> <span class="n">half</span> <span class="o">-</span> <span class="n">i</span> <span class="o">-</span> <span class="mi">2</span>  <span class="c1"># B&#39;de medyan için orta nokta</span>

        <span class="n">Aleft</span> <span class="o">=</span> <span class="n">A</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="k">if</span> <span class="n">i</span> <span class="o">&gt;=</span> <span class="mi">0</span> <span class="k">else</span> <span class="nb">float</span><span class="p">(</span><span class="s2">&#34;-infinity&#34;</span><span class="p">)</span>  <span class="c1"># Sınırları kontrol et</span>
        <span class="n">Aright</span> <span class="o">=</span> <span class="n">A</span><span class="p">[</span><span class="n">i</span> <span class="o">+</span> <span class="mi">1</span><span class="p">]</span> <span class="k">if</span> <span class="p">(</span><span class="n">i</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">&lt;</span> <span class="nb">len</span><span class="p">(</span><span class="n">A</span><span class="p">)</span> <span class="k">else</span> <span class="nb">float</span><span class="p">(</span><span class="s2">&#34;infinity&#34;</span><span class="p">)</span>
        <span class="n">Bleft</span> <span class="o">=</span> <span class="n">B</span><span class="p">[</span><span class="n">j</span><span class="p">]</span> <span class="k">if</span> <span class="n">j</span> <span class="o">&gt;=</span> <span class="mi">0</span> <span class="k">else</span> <span class="nb">float</span><span class="p">(</span><span class="s2">&#34;-infinity&#34;</span><span class="p">)</span>
        <span class="n">Bright</span> <span class="o">=</span> <span class="n">B</span><span class="p">[</span><span class="n">j</span> <span class="o">+</span> <span class="mi">1</span><span class="p">]</span> <span class="k">if</span> <span class="p">(</span><span class="n">j</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">&lt;</span> <span class="nb">len</span><span class="p">(</span><span class="n">B</span><span class="p">)</span> <span class="k">else</span> <span class="nb">float</span><span class="p">(</span><span class="s2">&#34;infinity&#34;</span><span class="p">)</span>

        <span class="c1"># Medyanı doğru bölgede bulduk</span>
        <span class="k">if</span> <span class="n">Aleft</span> <span class="o">&lt;=</span> <span class="n">Bright</span> <span class="ow">and</span> <span class="n">Bleft</span> <span class="o">&lt;=</span> <span class="n">Aright</span><span class="p">:</span>
            <span class="k">if</span> <span class="n">total</span> <span class="o">%</span> <span class="mi">2</span><span class="p">:</span>
                <span class="k">return</span> <span class="nb">min</span><span class="p">(</span><span class="n">Aright</span><span class="p">,</span> <span class="n">Bright</span><span class="p">)</span>
            <span class="k">return</span> <span class="p">(</span><span class="nb">max</span><span class="p">(</span><span class="n">Aleft</span><span class="p">,</span> <span class="n">Bleft</span><span class="p">)</span> <span class="o">+</span> <span class="nb">min</span><span class="p">(</span><span class="n">Aright</span><span class="p">,</span> <span class="n">Bright</span><span class="p">))</span> <span class="o">/</span> <span class="mi">2</span>
        <span class="k">elif</span> <span class="n">Aleft</span> <span class="o">&gt;</span> <span class="n">Bright</span><span class="p">:</span>
            <span class="n">r</span> <span class="o">=</span> <span class="n">i</span> <span class="o">-</span> <span class="mi">1</span>
        <span class="k">else</span><span class="p">:</span>
            <span class="n">l</span> <span class="o">=</span> <span class="n">i</span> <span class="o">+</span> <span class="mi">1</span>

</code></pre></div><h3 id="complexity">Complexity</h3>
<ul>
<li>Time complexity (Zaman Karmaşıklığı) : O(log(min(m, n))), burada m ve n iki dizinin uzunluklarıdır. Daha kısa dizi üzerinde ikili arama yapılır.</li>
<li>Space complexity (Alan Karmaşıklığı) : O(1), çünkü ekstra alan kullanılmaz.</li>
</ul>
]]></content>
		</item>
		
		<item>
			<title>Leetcode 981 Time Based Key-Value Store</title>
			<link>https://www.dincerbakkal.com/posts/leetcode981/</link>
			<pubDate>Sun, 11 Jul 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode981/</guid>
			<description>Soru Design a time-based key-value data structure that can store multiple values for the same key at different time stamps and retrieve the key&amp;rsquo;s value at a certain timestamp.
Implement the TimeMap class:
TimeMap() Initializes the object of the data structure.
void set(String key, String value, int timestamp) Stores the key key with the value value at the given time timestamp.
String get(String key, int timestamp) Returns a value such that set was called previously, with timestamp_prev &amp;lt;= timestamp.</description>
			<content type="html"><![CDATA[<h3 id="soru">Soru</h3>
<p>Design a time-based key-value data structure that can store multiple values for the same key at different time stamps and retrieve the key&rsquo;s value at a certain timestamp.</p>
<p>Implement the TimeMap class:</p>
<p>TimeMap() Initializes the object of the data structure.</p>
<p>void set(String key, String value, int timestamp) Stores the key key with the value value at the given time timestamp.</p>
<p>String get(String key, int timestamp) Returns a value such that set was called previously, with timestamp_prev &lt;= timestamp. If there are multiple such values, it returns the value associated with the largest timestamp_prev. If there are no values, it returns &ldquo;&rdquo;.</p>
<h3 id="örnek-1">Örnek 1</h3>
<pre><code>Input
[&quot;TimeMap&quot;, &quot;set&quot;, &quot;get&quot;, &quot;get&quot;, &quot;set&quot;, &quot;get&quot;, &quot;get&quot;]
[[], [&quot;foo&quot;, &quot;bar&quot;, 1], [&quot;foo&quot;, 1], [&quot;foo&quot;, 3], [&quot;foo&quot;, &quot;bar2&quot;, 4], [&quot;foo&quot;, 4], [&quot;foo&quot;, 5]]
Output
[null, null, &quot;bar&quot;, &quot;bar&quot;, null, &quot;bar2&quot;, &quot;bar2&quot;]

Explanation
TimeMap timeMap = new TimeMap();
timeMap.set(&quot;foo&quot;, &quot;bar&quot;, 1);  // store the key &quot;foo&quot; and value &quot;bar&quot; along with timestamp = 1.
timeMap.get(&quot;foo&quot;, 1);         // return &quot;bar&quot;
timeMap.get(&quot;foo&quot;, 3);         // return &quot;bar&quot;, since there is no value corresponding to foo at timestamp 3 and timestamp 2, then the only value is at timestamp 1 is &quot;bar&quot;.
timeMap.set(&quot;foo&quot;, &quot;bar2&quot;, 4); // store the key &quot;foo&quot; and value &quot;bar2&quot; along with timestamp = 4.
timeMap.get(&quot;foo&quot;, 4);         // return &quot;bar2&quot;
timeMap.get(&quot;foo&quot;, 5);         // return &quot;bar2&quot;
</code></pre><h3 id="çözüm">Çözüm</h3>
<ul>
<li>&ldquo;981. Time Based Key-Value Store&rdquo; sorusu, zaman damgasıyla birlikte değerlerin saklanabileceği ve sorgulanabileceği bir veri yapısı tasarlamayı gerektirir. Bu veri yapısında, bir anahtar (key) ve değer (value) çifti belirli bir zaman damgası (timestamp) ile saklanır. Ayrıca, belirli bir anahtar için belirli bir zaman damgasına kadar olan en son değeri alabilecek bir yöntem sağlanmalıdır.</li>
<li>Sorunun Detayları:</li>
<li>Veri yapısı, set(key, value, timestamp) ve get(key, timestamp) olmak üzere iki fonksiyonu desteklemelidir.
set işlevi, verilen anahtar için verilen değeri belirtilen zaman damgası ile saklar.
get işlevi, belirtilen anahtara ve zaman damgasına (veya daha öncesine) göre en son değeri döndürür. Eğer o anahtar için o zaman damgasından önce bir değer yoksa, boş bir string (&quot;&quot;) döndürülür.</li>
<li>Bu veri yapısını Python&rsquo;da defaultdict ve bisect modüllerini kullanarak etkili bir şekilde uygulayabilirsiniz. Her anahtar için bir liste saklarsınız ve bu liste zaman damgası ve değer çiftlerini içerir. Zaman damgaları sıralı olarak tutulduğu için, bisect modülü ile belirli bir zaman damgasına göre arama yapabilirsiniz.</li>
<li>Çalışma Mekanizması:</li>
<li>Yapıcı (Constructor): defaultdict kullanarak her anahtar için bir liste oluşturur. Bu liste, (zaman damgası, değer) çiftlerini saklar.</li>
<li>Set İşlemi: Belirli bir anahtar için, değeri ve zaman damgasını liste olarak saklar.</li>
<li>Get İşlemi: bisect_right kullanarak, belirtilen zaman damgası veya ondan önceki en yakın zaman damgasını bulur. Eğer bir eşleşme bulunursa, o zaman damgasının değeri döndürülür. Bulunamazsa boş bir string döndürülür.</li>
</ul>
<h2 id="code">Code</h2>
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="kn">from</span> <span class="nn">collections</span> <span class="kn">import</span> <span class="n">defaultdict</span>
<span class="kn">import</span> <span class="nn">bisect</span>

<span class="k">class</span> <span class="nc">TimeMap</span><span class="p">:</span>
    <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">store</span> <span class="o">=</span> <span class="n">defaultdict</span><span class="p">(</span><span class="nb">list</span><span class="p">)</span>

    <span class="k">def</span> <span class="nf">set</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">key</span><span class="p">,</span> <span class="n">value</span><span class="p">,</span> <span class="n">timestamp</span><span class="p">):</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">store</span><span class="p">[</span><span class="n">key</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">timestamp</span><span class="p">,</span> <span class="n">value</span><span class="p">))</span>

    <span class="k">def</span> <span class="nf">get</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">key</span><span class="p">,</span> <span class="n">timestamp</span><span class="p">):</span>
        <span class="n">A</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">store</span><span class="p">[</span><span class="n">key</span><span class="p">]</span>
        <span class="n">i</span> <span class="o">=</span> <span class="n">bisect</span><span class="o">.</span><span class="n">bisect_right</span><span class="p">(</span><span class="n">A</span><span class="p">,</span> <span class="p">(</span><span class="n">timestamp</span><span class="p">,</span> <span class="nb">chr</span><span class="p">(</span><span class="mi">255</span><span class="p">)))</span>
        <span class="k">return</span> <span class="n">A</span><span class="p">[</span><span class="n">i</span><span class="o">-</span><span class="mi">1</span><span class="p">][</span><span class="mi">1</span><span class="p">]</span> <span class="k">if</span> <span class="n">i</span> <span class="k">else</span> <span class="s2">&#34;&#34;</span>

<span class="c1"># Usage</span>
<span class="n">obj</span> <span class="o">=</span> <span class="n">TimeMap</span><span class="p">()</span>
<span class="n">obj</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&#34;key1&#34;</span><span class="p">,</span> <span class="s2">&#34;value1&#34;</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="n">obj</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&#34;key1&#34;</span><span class="p">,</span> <span class="mi">1</span><span class="p">))</span>  <span class="c1"># Outputs &#34;value1&#34;</span>
<span class="nb">print</span><span class="p">(</span><span class="n">obj</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&#34;key1&#34;</span><span class="p">,</span> <span class="mi">2</span><span class="p">))</span>  <span class="c1"># Outputs &#34;value1&#34; since it&#39;s the most recent before time 2</span>

        
</code></pre></div><h3 id="complexity">Complexity</h3>
<ul>
<li>Time complexity (Zaman Karmaşıklığı) :
set işlemi O(1) zamanda gerçekleşir.
get işlemi, bisect_right kullanılarak logaritmik zaman karmaşıklığında, yani O(log n), burada n belirli bir anahtar için saklanan zaman damgası sayısıdır.</li>
<li>Space complexity (Alan Karmaşıklığı) : O(N), burada N toplam (zaman damgası, değer) çiftlerinin sayısıdır.</li>
</ul>
]]></content>
		</item>
		
		<item>
			<title>Leetcode 153 Find Minimum in Rotated Sorted Array</title>
			<link>https://www.dincerbakkal.com/posts/leetcode153/</link>
			<pubDate>Sat, 10 Jul 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode153/</guid>
			<description>Soru Suppose an array of length n sorted in ascending order is rotated between 1 and n times. For example, the array nums = [0,1,2,4,5,6,7] might become:
[4,5,6,7,0,1,2] if it was rotated 4 times. [0,1,2,4,5,6,7] if it was rotated 7 times. Notice that rotating an array [a[0], a[1], a[2], &amp;hellip;, a[n-1]] 1 time results in the array [a[n-1], a[0], a[1], a[2], &amp;hellip;, a[n-2]].
Given the sorted rotated array nums of unique elements, return the minimum element of this array.</description>
			<content type="html"><![CDATA[<h3 id="soru">Soru</h3>
<p>Suppose an array of length n sorted in ascending order is rotated between 1 and n times. For example, the array nums = [0,1,2,4,5,6,7] might become:</p>
<p>[4,5,6,7,0,1,2] if it was rotated 4 times.
[0,1,2,4,5,6,7] if it was rotated 7 times.
Notice that rotating an array [a[0], a[1], a[2], &hellip;, a[n-1]] 1 time results in the array [a[n-1], a[0], a[1], a[2], &hellip;, a[n-2]].</p>
<p>Given the sorted rotated array nums of unique elements, return the minimum element of this array.</p>
<p>You must write an algorithm that runs in O(log n) time.</p>
<h3 id="örnek-1">Örnek 1</h3>
<pre><code>Input: nums = [3,4,5,1,2]
Output: 1
Explanation: The original array was [1,2,3,4,5] rotated 3 times.
</code></pre><h3 id="örnek-2">Örnek 2</h3>
<pre><code>Input: nums = [4,5,6,7,0,1,2]
Output: 0
Explanation: The original array was [0,1,2,4,5,6,7] and it was rotated 4 times.
</code></pre><h3 id="çözüm">Çözüm</h3>
<ul>
<li>&ldquo;153. Find Minimum in Rotated Sorted Array&rdquo; sorusu, döndürülmüş bir sıralı dizide minimum değeri bulmanızı ister. Bu dizideki elemanlar önceden sıralanmışken, belirli bir pivot noktasında döndürülmüş; örneğin, [0,1,2,4,5,6,7] dizisi [4,5,6,7,0,1,2] şeklinde döndürülmüş olabilir. Soru, bu dizi içindeki en küçük elemanı bulmanızı istemektedir.</li>
<li>Girdi: Döndürülmüş bir sıralı tam sayı dizisi nums.</li>
<li>Çıktı: Dizideki minimum değer.</li>
<li>Bu problem genellikle ikili arama (binary search) yöntemi kullanılarak çözülür. İkili arama yöntemi, döndürülmüş bir sıralı dizide minimum değeri bulmak için uygundur çünkü dizinin bir kısmı sıralı olacak şekilde döndürülmüştür. İkili arama kullanarak, her adımda dizinin bir yarısını diğerine göre daha az sıralı olup olmadığını kontrol ederek atlayabiliriz.</li>
<li>Çalışma Mekanizması:</li>
<li>Başlangıç ve Bitiş İşaretçileri: İkili arama için left ve right işaretçileri dizinin başlangıç ve bitişinde başlar.</li>
<li>İkili Arama: left ve right işaretçileri birbirine eşit olana kadar ikili arama devam eder.</li>
<li>Arama Koşulu: Her adımda, mid noktasının değeri ile right noktasının değeri karşılaştırılır:
Eğer mid noktasının değeri, right noktasının değerinden büyükse, bu durum minimum değerin mid&rsquo;in sağ tarafında olduğunu gösterir ve arama alanı mid + 1 ile right arasına daraltılır.
Eğer mid noktasının değeri, right noktasının değerinden küçük veya eşitse, minimum değer mid noktasında veya onun sol tarafında olabilir; böylece arama alanı left ile mid arasına daraltılır.</li>
<li>Sonuç: Döngü tamamlandığında, left işaretçisi minimum değere işaret eder.</li>
</ul>
<h2 id="code">Code</h2>
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">findMin</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">nums</span><span class="p">):</span>
        <span class="n">left</span><span class="p">,</span> <span class="n">right</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">nums</span><span class="p">)</span> <span class="o">-</span> <span class="mi">1</span>

        <span class="k">while</span> <span class="n">left</span> <span class="o">&lt;</span> <span class="n">right</span><span class="p">:</span>
            <span class="n">mid</span> <span class="o">=</span> <span class="p">(</span><span class="n">left</span> <span class="o">+</span> <span class="n">right</span><span class="p">)</span> <span class="o">//</span> <span class="mi">2</span>
            <span class="k">if</span> <span class="n">nums</span><span class="p">[</span><span class="n">mid</span><span class="p">]</span> <span class="o">&gt;</span> <span class="n">nums</span><span class="p">[</span><span class="n">right</span><span class="p">]:</span>  <span class="c1"># Minimum değer sağ tarafta olmalı</span>
                <span class="n">left</span> <span class="o">=</span> <span class="n">mid</span> <span class="o">+</span> <span class="mi">1</span>
            <span class="k">else</span><span class="p">:</span>
                <span class="n">right</span> <span class="o">=</span> <span class="n">mid</span>  <span class="c1"># Minimum değer burada veya sol tarafta olabilir</span>

        <span class="k">return</span> <span class="n">nums</span><span class="p">[</span><span class="n">left</span><span class="p">]</span>
      
    
</code></pre></div><h3 id="complexity">Complexity</h3>
<ul>
<li>Time complexity (Zaman Karmaşıklığı) : O(log n), burada n dizinin uzunluğudur. İkili arama her adımda arama alanını yarıya indirger.</li>
<li>Space complexity (Alan Karmaşıklığı) : O(1), çünkü ekstra alan kullanılmaz.</li>
</ul>
]]></content>
		</item>
		
		<item>
			<title>Leetcode 57 Insert Interval</title>
			<link>https://www.dincerbakkal.com/posts/leetcode057/</link>
			<pubDate>Fri, 09 Jul 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode057/</guid>
			<description>You are given an array of non-overlapping intervals intervals where intervals[i] = [starti, endi] represent the start and the end of the ith interval and intervals is sorted in ascending order by starti. You are also given an interval newInterval = [start, end] that represents the start and end of another interval.
Insert newInterval into intervals such that intervals is still sorted in ascending order by starti and intervals still does not have any overlapping intervals (merge overlapping intervals if necessary).</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>You are given an array of non-overlapping intervals intervals where intervals[i] = [starti, endi] represent the start and the end of the ith interval and intervals is sorted in ascending order by starti. You are also given an interval newInterval = [start, end] that represents the start and end of another interval.</p>
<p>Insert newInterval into intervals such that intervals is still sorted in ascending order by starti and intervals still does not have any overlapping intervals (merge overlapping intervals if necessary).</p>
<p>Return intervals after the insertion.</p>
<!-- raw HTML omitted -->
<pre><code>Input: intervals = [[1,3],[6,9]], newInterval = [2,5]
Output: [[1,5],[6,9]]
</code></pre><!-- raw HTML omitted -->
<pre><code>Input: intervals = [[1,2],[3,5],[6,7],[8,10],[12,16]], newInterval = [4,8]
Output: [[1,2],[3,10],[12,16]]
Explanation: Because the new interval [4,8] overlaps with [3,5],[6,7],[8,10].
</code></pre><!-- raw HTML omitted -->
<ul>
<li>Soruda bize küçükten büyüğe sıralı bir interval listesi ve tek bir interval veriliyor.Tek verilen intervali bu listeye eklememiz isteniyor.Eğer kesişim olan bir durum var ise intervali düzenlememiz isteniyor.</li>
<li>Yeni intervali eklerken bazı özel durumlar ile karşılaşabiliriz.</li>
<li>Eğer yeni intervalin bitiş değeri listemizdeki intervalin başlangıcından küçük ise bu durumda yeni intervali listenin başına ekler ve sonucu döneriz.</li>
<li>Eğer yeni intervalin başlangıç değeri listemizdeki intervalin bitiş değerinden büyük ise sonuç listemize listedeki intervali ekleriz.</li>
<li>Bunların harici durumlarda yeni interval ve listedeki intervallerin başlangıç ve bitiş değerlerini karşılaştırarak yeni intervali güncelleriz.</li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">insert</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">intervals</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">]],</span> <span class="n">newInterval</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">List</span><span class="p">[</span><span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">]]:</span>
        <span class="n">res</span> <span class="o">=</span> <span class="p">[]</span>
        
        <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">intervals</span><span class="p">)):</span>
            <span class="k">if</span> <span class="n">newInterval</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">&lt;</span> <span class="n">intervals</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="mi">0</span><span class="p">]:</span>
                <span class="n">res</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">newInterval</span><span class="p">)</span>
                <span class="k">return</span> <span class="n">res</span> <span class="o">+</span> <span class="n">intervals</span><span class="p">[</span><span class="n">i</span><span class="p">:]</span>
            <span class="k">elif</span> <span class="n">newInterval</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">&gt;</span><span class="n">intervals</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="mi">1</span><span class="p">]:</span>
                <span class="n">res</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">intervals</span><span class="p">[</span><span class="n">i</span><span class="p">])</span>
            <span class="k">else</span><span class="p">:</span>
                <span class="n">newInterval</span> <span class="o">=</span> <span class="p">[</span><span class="nb">min</span><span class="p">(</span><span class="n">newInterval</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span><span class="n">intervals</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="mi">0</span><span class="p">]),</span><span class="nb">max</span><span class="p">(</span><span class="n">newInterval</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span><span class="n">intervals</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="mi">1</span><span class="p">])]</span>
        <span class="n">res</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">newInterval</span><span class="p">)</span>
        <span class="k">return</span> <span class="n">res</span>
        
    
</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 452 Minimum Number of Arrows to Burst Balloons</title>
			<link>https://www.dincerbakkal.com/posts/leetcode452/</link>
			<pubDate>Thu, 08 Jul 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode452/</guid>
			<description>There are some spherical balloons taped onto a flat wall that represents the XY-plane. The balloons are represented as a 2D integer array points where points[i] = [xstart, xend] denotes a balloon whose horizontal diameter stretches between xstart and xend. You do not know the exact y-coordinates of the balloons.
Arrows can be shot up directly vertically (in the positive y-direction) from different points along the x-axis. A balloon with xstart and xend is burst by an arrow shot at x if xstart &amp;lt;= x &amp;lt;= xend.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>There are some spherical balloons taped onto a flat wall that represents the XY-plane. The balloons are represented as a 2D integer array points where points[i] = [xstart, xend] denotes a balloon whose horizontal diameter stretches between xstart and xend. You do not know the exact y-coordinates of the balloons.</p>
<p>Arrows can be shot up directly vertically (in the positive y-direction) from different points along the x-axis. A balloon with xstart and xend is burst by an arrow shot at x if xstart &lt;= x &lt;= xend. There is no limit to the number of arrows that can be shot. A shot arrow keeps traveling up infinitely, bursting any balloons in its path.</p>
<p>Given the array points, return the minimum number of arrows that must be shot to burst all balloons.</p>
<!-- raw HTML omitted -->
<pre><code>Input: points = [[10,16],[2,8],[1,6],[7,12]]
Output: 2
Explanation: The balloons can be burst by 2 arrows:
- Shoot an arrow at x = 6, bursting the balloons [2,8] and [1,6].
- Shoot an arrow at x = 11, bursting the balloons [10,16] and [7,12].
</code></pre><!-- raw HTML omitted -->
<pre><code>Input: points = [[1,2],[3,4],[5,6],[7,8]]
Output: 4
Explanation: One arrow needs to be shot for each balloon for a total of 4 arrows.
</code></pre><!-- raw HTML omitted -->
<ul>
<li>We use greedy to solve this question. We sort the given input list by end time. We set a left boundary and Now we only need to compare the current start time and previous end time. If the current start time is greater than previous end time. Then we now we need one more arrow and we have to update the previous end time to current end time. Otherwise the current and previous ballons can be bursted by one arrow.</li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">findMinArrowShots</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">points</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">]])</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
        <span class="k">if</span> <span class="ow">not</span> <span class="n">points</span><span class="p">:</span> <span class="k">return</span> <span class="mi">0</span>
        <span class="n">points</span><span class="o">.</span><span class="n">sort</span><span class="p">(</span><span class="n">key</span><span class="o">=</span><span class="k">lambda</span> <span class="n">x</span><span class="p">:</span> <span class="n">x</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>
        <span class="n">first_end</span> <span class="o">=</span> <span class="n">points</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">1</span><span class="p">]</span>
        <span class="n">arrow</span> <span class="o">=</span> <span class="mi">1</span>
        <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="nb">len</span><span class="p">(</span><span class="n">points</span><span class="p">)):</span>
            <span class="n">start</span><span class="p">,</span> <span class="n">end</span> <span class="o">=</span> <span class="n">points</span><span class="p">[</span><span class="n">i</span><span class="p">]</span>
            <span class="k">if</span> <span class="n">start</span> <span class="o">&gt;</span> <span class="n">first_end</span><span class="p">:</span>
                <span class="n">arrow</span><span class="o">+=</span><span class="mi">1</span>
                <span class="n">first_end</span> <span class="o">=</span> <span class="n">end</span>
        <span class="k">return</span> <span class="n">arrow</span>
        
    
</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 621 Task Scheduler</title>
			<link>https://www.dincerbakkal.com/posts/leetcode621/</link>
			<pubDate>Wed, 07 Jul 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode621/</guid>
			<description>Given a characters array tasks, representing the tasks a CPU needs to do, where each letter represents a different task. Tasks could be done in any order. Each task is done in one unit of time. For each unit of time, the CPU could complete either one task or just be idle.
However, there is a non-negative integer n that represents the cooldown period between two same tasks (the same letter in the array), that is that there must be at least n units of time between any two same tasks.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>Given a characters array tasks, representing the tasks a CPU needs to do, where each letter represents a different task. Tasks could be done in any order. Each task is done in one unit of time. For each unit of time, the CPU could complete either one task or just be idle.</p>
<p>However, there is a non-negative integer n that represents the cooldown period between two same tasks (the same letter in the array), that is that there must be at least n units of time between any two same tasks.</p>
<p>Return the least number of units of times that the CPU will take to finish all the given tasks.</p>
<!-- raw HTML omitted -->
<pre><code>Input: tasks = [&quot;A&quot;,&quot;A&quot;,&quot;A&quot;,&quot;B&quot;,&quot;B&quot;,&quot;B&quot;], n = 2
Output: 8
Explanation: 
A -&gt; B -&gt; idle -&gt; A -&gt; B -&gt; idle -&gt; A -&gt; B
There is at least 2 units of time between any two same tasks.
</code></pre><!-- raw HTML omitted -->
<pre><code>Input: tasks = [&quot;A&quot;,&quot;A&quot;,&quot;A&quot;,&quot;B&quot;,&quot;B&quot;,&quot;B&quot;], n = 0
Output: 6
Explanation: On this case any permutation of size 6 would work since n = 0.
[&quot;A&quot;,&quot;A&quot;,&quot;A&quot;,&quot;B&quot;,&quot;B&quot;,&quot;B&quot;]
[&quot;A&quot;,&quot;B&quot;,&quot;A&quot;,&quot;B&quot;,&quot;A&quot;,&quot;B&quot;]
[&quot;B&quot;,&quot;B&quot;,&quot;B&quot;,&quot;A&quot;,&quot;A&quot;,&quot;A&quot;]
...
And so on.
</code></pre><!-- raw HTML omitted -->
<ul>
<li>The total unit time is length of list + idld time. Count the frequence of each letter. Select the most frequent letter as boundary.The the number of room that between two boundaries is boundary - 1 and the idle time unit will be at least room * n. Split other letters into rooms and each room has no same letters. If all the idle time unit all use out, we are free to expand each room so we do not need more idle time unit. This will give the result as the lenght of the given list. Otherwise if the after fill all tasks into idle time unit and there are still idle time unit not been used then we add length of given list and the available idle time units to get the result.</li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">def</span> <span class="nf">leastInterval</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">tasks</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">],</span> <span class="n">n</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
        <span class="n">count</span><span class="o">=</span><span class="p">[</span><span class="n">value</span> <span class="k">for</span> <span class="n">value</span> <span class="ow">in</span> <span class="n">Counter</span><span class="p">(</span><span class="n">tasks</span><span class="p">)</span><span class="o">.</span><span class="n">values</span><span class="p">()]</span>
        <span class="n">count</span><span class="o">.</span><span class="n">sort</span><span class="p">()</span>
        <span class="n">max_freq</span><span class="o">=</span><span class="n">count</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
        <span class="n">room</span><span class="o">=</span><span class="n">max_freq</span><span class="o">-</span><span class="mi">1</span>
        <span class="n">idle</span><span class="o">=</span><span class="p">(</span><span class="n">room</span><span class="p">)</span><span class="o">*</span><span class="n">n</span>
        <span class="k">while</span> <span class="n">count</span> <span class="ow">and</span> <span class="n">idle</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
            <span class="n">idle</span> <span class="o">-=</span> <span class="nb">min</span><span class="p">(</span><span class="n">room</span><span class="p">,</span> <span class="n">count</span><span class="o">.</span><span class="n">pop</span><span class="p">())</span>
        <span class="k">return</span> <span class="nb">max</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="n">idle</span><span class="p">)</span><span class="o">+</span><span class="nb">len</span><span class="p">(</span><span class="n">tasks</span><span class="p">)</span>
        
    
</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 253 Meeting Rooms II</title>
			<link>https://www.dincerbakkal.com/posts/leetcode253/</link>
			<pubDate>Tue, 06 Jul 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode253/</guid>
			<description>Given an array of meeting time intervals consisting of start and end times [[s1,e1],[s2,e2],&amp;hellip;] (si &amp;lt; ei), find the minimum number of conference rooms required.
Input: [[0, 30],[5, 10],[15, 20]] Output: 2 Input: [[7,10],[2,4]] Output: 1  Soruda bize bir interval listesi veriliyor.Bu listedeki intervaller toplantıların başlangıç ve bitiş zamanlarını temsil ediyor.Verilen listeye göre en az kaç toplantı odasına ihtiyacımız olduğunu bulmamız isteniyor. Toplantı odasını arttıran etmen aynı anda kaç tane toplantının yapıldığıdır.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>Given an array of meeting time intervals consisting of start and end times [[s1,e1],[s2,e2],&hellip;] (si &lt; ei), find the minimum number of conference rooms required.</p>
<!-- raw HTML omitted -->
<pre><code>Input: [[0, 30],[5, 10],[15, 20]]
Output: 2
</code></pre><!-- raw HTML omitted -->
<pre><code>Input: [[7,10],[2,4]]
Output: 1
</code></pre><!-- raw HTML omitted -->
<ul>
<li>Soruda bize bir interval listesi veriliyor.Bu listedeki intervaller toplantıların başlangıç ve bitiş zamanlarını temsil ediyor.Verilen listeye göre en az kaç toplantı odasına ihtiyacımız olduğunu bulmamız isteniyor.</li>
<li>Toplantı odasını arttıran etmen aynı anda kaç tane toplantının yapıldığıdır. Bunu hesaplamak için ilk olarak toplandı başlangıç saatlerini bir listeye(start) toplantı bitiş saatlerini başka bir listeye(end) atar ve bu listeleri küçükten büyüğe sıralarız.</li>
<li>start = [0,5,15] ve end = [10,20,30]</li>
<li>Bundan sonra yapacağımız başlangıç ve bitiş saatlerini karşılaştırmak.</li>
<li>0 &lt; 10 toplantı başlamış bu durumda bir sonraki başlangıca geç ve odayı arttır oda = 1</li>
<li>5 &lt; 10 toplantı başlamış bu durumda bir sonraki başlangıca geç ve odayı arttır oda = 2</li>
<li>15 &gt; 10 toplantı bitmiş  bu durumda bir sonraki bitişe geç ve odayı azalt oda = 1</li>
<li>Döngü biter oda sayısı bulunur.</li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="s2">&#34;&#34;&#34;
</span><span class="s2">Definition of Interval.
</span><span class="s2">class Interval(object):
</span><span class="s2">    def __init__(self, start, end):
</span><span class="s2">        self.start = start
</span><span class="s2">        self.end = end
</span><span class="s2">&#34;&#34;&#34;</span>

<span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="s2">&#34;&#34;&#34;
</span><span class="s2">    @param intervals: an array of meeting time intervals
</span><span class="s2">    @return: the minimum number of conference rooms required
</span><span class="s2">    &#34;&#34;&#34;</span>
    <span class="k">def</span> <span class="nf">minMeetingRooms</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">intervals</span><span class="p">):</span>
        <span class="n">start</span> <span class="o">=</span> <span class="nb">sorted</span><span class="p">([</span><span class="n">i</span><span class="o">.</span><span class="n">start</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">intervals</span><span class="p">])</span>
        <span class="n">end</span> <span class="o">=</span> <span class="nb">sorted</span><span class="p">([</span><span class="n">i</span><span class="o">.</span><span class="n">end</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">intervals</span><span class="p">])</span>

        <span class="n">res</span><span class="p">,</span> <span class="n">count</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span><span class="mi">0</span>
        <span class="n">s</span><span class="p">,</span><span class="n">e</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span>
        <span class="k">while</span> <span class="n">s</span> <span class="o">&lt;</span> <span class="nb">len</span><span class="p">(</span><span class="n">intervals</span><span class="p">):</span>
            <span class="k">if</span> <span class="n">start</span><span class="p">[</span><span class="n">s</span><span class="p">]</span><span class="o">&lt;</span><span class="n">end</span><span class="p">[</span><span class="n">e</span><span class="p">]:</span>
                <span class="n">s</span><span class="o">+=</span><span class="mi">1</span>
                <span class="n">count</span> <span class="o">+=</span> <span class="mi">1</span>
            <span class="k">else</span><span class="p">:</span>
                <span class="n">e</span> <span class="o">+=</span><span class="mi">1</span>
                <span class="n">count</span> <span class="o">-=</span> <span class="mi">1</span>
            <span class="n">res</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="n">res</span><span class="p">,</span><span class="n">count</span><span class="p">)</span>
        <span class="k">return</span> <span class="n">res</span>
        
    
</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 435 Non-overlapping Intervals</title>
			<link>https://www.dincerbakkal.com/posts/leetcode435/</link>
			<pubDate>Mon, 05 Jul 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode435/</guid>
			<description>Given an array of intervals intervals where intervals[i] = [starti, endi], return the minimum number of intervals you need to remove to make the rest of the intervals non-overlapping.
Input: intervals = [[1,2],[2,3],[3,4],[1,3]] Output: 1 Explanation: [1,3] can be removed and the rest of the intervals are non-overlapping. Input: intervals = [[1,2],[1,2],[1,2]] Output: 2 Explanation: You need to remove two [1,2] to make the rest of the intervals non-overlapping. Input: intervals = [[1,2],[2,3]] Output: 0 Explanation: You don&#39;t need to remove any of the intervals since they&#39;re already non-overlapping.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>Given an array of intervals intervals where intervals[i] = [starti, endi], return the minimum number of intervals you need to remove to make the rest of the intervals non-overlapping.</p>
<!-- raw HTML omitted -->
<pre><code>Input: intervals = [[1,2],[2,3],[3,4],[1,3]]
Output: 1
Explanation: [1,3] can be removed and the rest of the intervals are non-overlapping.
</code></pre><!-- raw HTML omitted -->
<pre><code>Input: intervals = [[1,2],[1,2],[1,2]]
Output: 2
Explanation: You need to remove two [1,2] to make the rest of the intervals non-overlapping.
</code></pre><!-- raw HTML omitted -->
<pre><code>Input: intervals = [[1,2],[2,3]]
Output: 0
Explanation: You don't need to remove any of the intervals since they're already non-overlapping.
</code></pre><!-- raw HTML omitted -->
<ul>
<li>Soruda bize bir interval listesi veriliyor.Bize sorulan bu listedeki intervallerden en az kaç tanesini silersek kalan intervaller birbirleri ile kesişmezler(overlapping).</li>
<li>İntervalleri başlangıç değerlerine göre sıralarız.</li>
<li>Daha sonra bir for döngüsü içerisinde önceki intervalin bitişi ile elimizdeki intervalin başlangıcını karşılaştırırız.Eğer başlangıç(start) önceki bitişten(prevEnd) büyük yada eşitse önceki bitişe(prevEnd) elimizdeki intervalin bitişini atarız.</li>
<li>Aksi durumda silinecek (res) sayısını 1 arttırırız ve önceki bitişe(prevEnd) elimizdeki interval bitişi ve önceki bitişten hangisi küçükse onu atarız.</li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">eraseOverlapIntervals</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">intervals</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">]])</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
        <span class="n">intervals</span><span class="o">.</span><span class="n">sort</span><span class="p">()</span>
        
        <span class="n">res</span> <span class="o">=</span> <span class="mi">0</span>
        <span class="n">prevEnd</span> <span class="o">=</span> <span class="n">intervals</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">1</span><span class="p">]</span>
        <span class="k">for</span> <span class="n">start</span><span class="p">,</span> <span class="n">end</span> <span class="ow">in</span> <span class="n">intervals</span><span class="p">[</span><span class="mi">1</span><span class="p">:]:</span>
            <span class="k">if</span> <span class="n">start</span> <span class="o">&gt;=</span> <span class="n">prevEnd</span><span class="p">:</span>
                <span class="n">prevEnd</span> <span class="o">=</span> <span class="n">end</span>
            <span class="k">else</span><span class="p">:</span>
                <span class="n">res</span> <span class="o">+=</span> <span class="mi">1</span>
                <span class="n">prevEnd</span> <span class="o">=</span> <span class="nb">min</span><span class="p">(</span><span class="n">end</span><span class="p">,</span> <span class="n">prevEnd</span><span class="p">)</span>
        <span class="k">return</span> <span class="n">res</span>
        
    
</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 986 Interval List Intersections</title>
			<link>https://www.dincerbakkal.com/posts/leetcode986/</link>
			<pubDate>Sun, 04 Jul 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode986/</guid>
			<description>You are given two lists of closed intervals, firstList and secondList, where firstList[i] = [starti, endi] and secondList[j] = [startj, endj]. Each list of intervals is pairwise disjoint and in sorted order.
Return the intersection of these two interval lists.
A closed interval [a, b] (with a &amp;lt;= b) denotes the set of real numbers x with a &amp;lt;= x &amp;lt;= b.
The intersection of two closed intervals is a set of real numbers that are either empty or represented as a closed interval.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>You are given two lists of closed intervals, firstList and secondList, where firstList[i] = [starti, endi] and secondList[j] = [startj, endj]. Each list of intervals is pairwise disjoint and in sorted order.</p>
<p>Return the intersection of these two interval lists.</p>
<p>A closed interval [a, b] (with a &lt;= b) denotes the set of real numbers x with a &lt;= x &lt;= b.</p>
<p>The intersection of two closed intervals is a set of real numbers that are either empty or represented as a closed interval. For example, the intersection of [1, 3] and [2, 4] is [2, 3].</p>
<!-- raw HTML omitted -->
<pre><code><figure><img src="/image/986ex1.png"
         alt="image"/>
</figure>


Input: firstList = [[0,2],[5,10],[13,23],[24,25]], secondList = [[1,5],[8,12],[15,24],[25,26]]
Output: [[1,2],[5,5],[8,10],[15,23],[24,24],[25,25]]
</code></pre><!-- raw HTML omitted -->
<pre><code>Input: firstList = [[1,3],[5,9]], secondList = []
Output: []
</code></pre><!-- raw HTML omitted -->
<ul>
<li>Soruda bize iki interval listesi veriliyor.İntervalleri doğru parçaları olarak düşünebiliriz. Bu iki interval listesindeki kesişimlerden yeni bir interval listesi oluşturmamız isteniyor.</li>
<li>Soru da yapacağımız listedeki intervalleri karşılaştırarak başlangıç değerlerinin maksimumunu bitiş değerlerinin ise minimumu alarak kesişim intervali oluşturmak.[0,2] ve [1,5] için [1,2] oluşur.</li>
<li>Burada dikkat etmemiz gereken iki listeyi karşılaştırırken sadece aynı indeksteki intervalleri karşılaştırmamak bunu yaparsak aradaki bazı kesişimleri kaçırabiliriz.</li>
<li>Sıfırıncı indeksteki intervalleri karşılaştırmayı bitirince karşılaştırdığımız intervallerin hangisinin bitiş(end) değeri düşükse o listedeki bir sonraki intervale geçeriz.Bu sayede çapraz kontroller yaparak aradaki kesişimleri de bulabiliriz.</li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">intervalIntersection</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">A</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">]],</span> <span class="n">B</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">]])</span> <span class="o">-&gt;</span> <span class="n">List</span><span class="p">[</span><span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">]]:</span>
        <span class="n">a</span> <span class="o">=</span> <span class="mi">0</span>
        <span class="n">b</span> <span class="o">=</span> <span class="mi">0</span>
        <span class="n">intervals</span> <span class="o">=</span> <span class="p">[]</span>
        
        <span class="k">while</span> <span class="n">a</span> <span class="o">&lt;</span> <span class="nb">len</span><span class="p">(</span><span class="n">A</span><span class="p">)</span> <span class="ow">and</span> <span class="n">b</span> <span class="o">&lt;</span> <span class="nb">len</span><span class="p">(</span><span class="n">B</span><span class="p">):</span>
            <span class="n">intervalStart</span><span class="p">,</span><span class="n">intervalEnd</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="n">A</span><span class="p">[</span><span class="n">a</span><span class="p">][</span><span class="mi">0</span><span class="p">],</span><span class="n">B</span><span class="p">[</span><span class="n">b</span><span class="p">][</span><span class="mi">0</span><span class="p">]),</span> <span class="nb">min</span><span class="p">(</span><span class="n">A</span><span class="p">[</span><span class="n">a</span><span class="p">][</span><span class="mi">1</span><span class="p">],</span><span class="n">B</span><span class="p">[</span><span class="n">b</span><span class="p">][</span><span class="mi">1</span><span class="p">])</span>
            
            <span class="k">if</span> <span class="n">intervalStart</span> <span class="o">&lt;=</span> <span class="n">intervalEnd</span><span class="p">:</span>
                <span class="n">intervals</span><span class="o">.</span><span class="n">append</span><span class="p">([</span><span class="n">intervalStart</span><span class="p">,</span><span class="n">intervalEnd</span><span class="p">])</span>
            
            <span class="k">if</span> <span class="n">A</span><span class="p">[</span><span class="n">a</span><span class="p">][</span><span class="mi">1</span><span class="p">]</span> <span class="o">&lt;</span> <span class="n">B</span><span class="p">[</span><span class="n">b</span><span class="p">][</span><span class="mi">1</span><span class="p">]:</span>
                <span class="n">a</span> <span class="o">+=</span> <span class="mi">1</span>
            <span class="k">else</span><span class="p">:</span>
                <span class="n">b</span> <span class="o">+=</span><span class="mi">1</span>
        <span class="k">return</span> <span class="n">intervals</span>
        
    
</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 56 Merge Intervals</title>
			<link>https://www.dincerbakkal.com/posts/leetcode056/</link>
			<pubDate>Sat, 03 Jul 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode056/</guid>
			<description>Given an array of intervals where intervals[i] = [starti, endi], merge all overlapping intervals, and return an array of the non-overlapping intervals that cover all the intervals in the input.
Input: intervals = [[1,3],[2,6],[8,10],[15,18]] Output: [[1,6],[8,10],[15,18]] Explanation: Since intervals [1,3] and [2,6] overlaps, merge them into [1,6]. Input: intervals = [[1,4],[4,5]] Output: [[1,5]] Explanation: Intervals [1,4] and [4,5] are considered overlapping.  Soruda bize bir interval listesi veriliyor.İntervalleri doğru parçaları olarak düşünebiliriz.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>Given an array of intervals where intervals[i] = [starti, endi], merge all overlapping intervals, and return an array of the non-overlapping intervals that cover all the intervals in the input.</p>
<!-- raw HTML omitted -->
<pre><code>Input: intervals = [[1,3],[2,6],[8,10],[15,18]]
Output: [[1,6],[8,10],[15,18]]
Explanation: Since intervals [1,3] and [2,6] overlaps, merge them into [1,6].
</code></pre><!-- raw HTML omitted -->
<pre><code>Input: intervals = [[1,4],[4,5]]
Output: [[1,5]]
Explanation: Intervals [1,4] and [4,5] are considered overlapping.
</code></pre><!-- raw HTML omitted -->
<ul>
<li>Soruda bize bir interval listesi veriliyor.İntervalleri doğru parçaları olarak düşünebiliriz. Bu intervallerden kesişenleri birleştirip kesişmeyenleri de olduğu gibi bırakarak yeni bir liste oluşturup dönmemiz isteniyor.</li>
<li>Kesişen intervallerin birleşmesine örnek olarak [1,3] ve [2,6] listemizde varsa bunlar 2 ve 3 için kesişmektedir bu durumda döneceğimiz değer [1,6] olacaktır.</li>
<li>İlk yapacağımız işlem intervallerin başlangıç değerlerine göre listemizi küçükten büyüğe sıralamak olacaktır.</li>
<li>Daha sonra sıralanmış listedeki ilk intervali sonuç listemize ekleriz.</li>
<li>İlk interval eklendiği için 2. intervalden başlayarak bir for döngüsü kurarız.</li>
<li>Burada listedeki son elemanın bitiş değeri(lastEnd) ile intervaldeki elimizdeki elemanın başlangıç değerini(start) karşılaştırırız.</li>
<li>lastEnd değeri start değerinden büyük ise sonuç listemizdeki intervalin end değerini güncelleriz.</li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python">    <span class="k">def</span> <span class="nf">merge</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">intervals</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">]])</span> <span class="o">-&gt;</span> <span class="n">List</span><span class="p">[</span><span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">]]:</span>
        <span class="c1"># O(nLogn)</span>
        
        <span class="n">intervals</span><span class="o">.</span><span class="n">sort</span><span class="p">(</span><span class="n">key</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">i</span> <span class="p">:</span> <span class="n">i</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> <span class="c1">#intervalleri başlangıç değerlerine göre sırala</span>
        <span class="n">output</span> <span class="o">=</span> <span class="p">[</span><span class="n">intervals</span><span class="p">[</span><span class="mi">0</span><span class="p">]]</span> <span class="c1">#sıralanmış listedeki ilk intervali sonuç listesine ekle</span>
        
        <span class="k">for</span> <span class="n">start</span><span class="p">,</span><span class="n">end</span> <span class="ow">in</span> <span class="n">intervals</span><span class="p">[</span><span class="mi">1</span><span class="p">:]:</span> <span class="c1">#ilk interval eklendiği için 2. intervalden başla</span>
            <span class="n">lastEnd</span> <span class="o">=</span> <span class="n">output</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">][</span><span class="mi">1</span><span class="p">]</span> <span class="c1">#sonuç listemize eklediğimiz ilk intervalin bitiş değerini atarız</span>
                
            <span class="k">if</span> <span class="n">start</span> <span class="o">&lt;=</span> <span class="n">lastEnd</span><span class="p">:</span>
                <span class="n">output</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">][</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="n">lastEnd</span><span class="p">,</span> <span class="n">end</span><span class="p">)</span>
            <span class="k">else</span><span class="p">:</span>
                <span class="n">output</span><span class="o">.</span><span class="n">append</span><span class="p">([</span><span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">])</span>
        <span class="k">return</span> <span class="n">output</span>
        
    
</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 706 Design HashMap</title>
			<link>https://www.dincerbakkal.com/posts/leetcode706/</link>
			<pubDate>Sat, 03 Jul 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode706/</guid>
			<description>Design a HashMap without using any built-in hash table libraries.
Implement the MyHashMap class:
MyHashMap() initializes the object with an empty map. void put(int key, int value) inserts a (key, value) pair into the HashMap. If the key already exists in the map, update the corresponding value. int get(int key) returns the value to which the specified key is mapped, or -1 if this map contains no mapping for the key.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>Design a HashMap without using any built-in hash table libraries.</p>
<p>Implement the MyHashMap class:</p>
<p>MyHashMap() initializes the object with an empty map.
void put(int key, int value) inserts a (key, value) pair into the HashMap. If the key already exists in the map, update the corresponding value.
int get(int key) returns the value to which the specified key is mapped, or -1 if this map contains no mapping for the key.
void remove(key) removes the key and its corresponding value if the map contains the mapping for the key.</p>
<!-- raw HTML omitted -->
<pre><code>Input
[&quot;MyHashMap&quot;, &quot;put&quot;, &quot;put&quot;, &quot;get&quot;, &quot;get&quot;, &quot;put&quot;, &quot;get&quot;, &quot;remove&quot;, &quot;get&quot;]
[[], [1, 1], [2, 2], [1], [3], [2, 1], [2], [2], [2]]
Output
[null, null, null, 1, -1, null, 1, null, -1]

Explanation
MyHashMap myHashMap = new MyHashMap();
myHashMap.put(1, 1); // The map is now [[1,1]]
myHashMap.put(2, 2); // The map is now [[1,1], [2,2]]
myHashMap.get(1);    // return 1, The map is now [[1,1], [2,2]]
myHashMap.get(3);    // return -1 (i.e., not found), The map is now [[1,1], [2,2]]
myHashMap.put(2, 1); // The map is now [[1,1], [2,1]] (i.e., update the existing value)
myHashMap.get(2);    // return 1, The map is now [[1,1], [2,1]]
myHashMap.remove(2); // remove the mapping for 2, The map is now [[1,1]]
myHashMap.get(2);    // return -1 (i.e., not found), The map is now [[1,1]]
</code></pre><!-- raw HTML omitted -->
<ul>
<li></li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">class</span> <span class="nc">MyHashMap</span><span class="p">:</span>

    <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="s2">&#34;&#34;&#34;
</span><span class="s2">        Initialize your data structure here.
</span><span class="s2">        &#34;&#34;&#34;</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">data</span> <span class="o">=</span> <span class="p">[</span><span class="n">Node</span><span class="p">()</span> <span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">1000</span><span class="p">)]</span>
        
    <span class="k">def</span> <span class="nf">hashcode</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">key</span><span class="p">):</span>
        <span class="n">size</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">data</span><span class="p">)</span>
        <span class="k">return</span> <span class="n">key</span> <span class="o">%</span> <span class="n">size</span>

    <span class="k">def</span> <span class="nf">put</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">key</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span> <span class="n">value</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
        <span class="s2">&#34;&#34;&#34;
</span><span class="s2">        value will always be non-negative.
</span><span class="s2">        &#34;&#34;&#34;</span>
        <span class="n">hashcode</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">hashcode</span><span class="p">(</span><span class="n">key</span><span class="p">)</span>
        <span class="n">head</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">data</span><span class="p">[</span><span class="n">hashcode</span><span class="p">]</span>
        <span class="k">while</span> <span class="n">head</span><span class="o">.</span><span class="n">next</span><span class="p">:</span>
            <span class="k">if</span> <span class="n">head</span><span class="o">.</span><span class="n">next</span><span class="o">.</span><span class="n">key</span> <span class="o">==</span> <span class="n">key</span><span class="p">:</span>
                <span class="n">head</span><span class="o">.</span><span class="n">next</span><span class="o">.</span><span class="n">val</span> <span class="o">=</span> <span class="n">value</span>
                <span class="k">return</span>
            <span class="n">head</span> <span class="o">=</span> <span class="n">head</span><span class="o">.</span><span class="n">next</span>
        <span class="n">head</span><span class="o">.</span><span class="n">next</span> <span class="o">=</span> <span class="n">Node</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
            
        

    <span class="k">def</span> <span class="nf">get</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">key</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
        <span class="s2">&#34;&#34;&#34;
</span><span class="s2">        Returns the value to which the specified key is mapped, or -1 if this map contains no mapping for the key
</span><span class="s2">        &#34;&#34;&#34;</span>
        <span class="n">hashcode</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">hashcode</span><span class="p">(</span><span class="n">key</span><span class="p">)</span>
        <span class="n">head</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">data</span><span class="p">[</span><span class="n">hashcode</span><span class="p">]</span>
        <span class="k">while</span> <span class="n">head</span><span class="o">.</span><span class="n">next</span><span class="p">:</span>
            <span class="k">if</span> <span class="n">head</span><span class="o">.</span><span class="n">next</span><span class="o">.</span><span class="n">key</span> <span class="o">==</span> <span class="n">key</span><span class="p">:</span>
                <span class="k">return</span> <span class="n">head</span><span class="o">.</span><span class="n">next</span><span class="o">.</span><span class="n">val</span>
            <span class="n">head</span> <span class="o">=</span> <span class="n">head</span><span class="o">.</span><span class="n">next</span>
        <span class="k">return</span> <span class="o">-</span><span class="mi">1</span>

    <span class="k">def</span> <span class="nf">remove</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">key</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
        <span class="s2">&#34;&#34;&#34;
</span><span class="s2">        Removes the mapping of the specified value key if this map contains a mapping for the key
</span><span class="s2">        &#34;&#34;&#34;</span>
        <span class="n">hashcode</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">hashcode</span><span class="p">(</span><span class="n">key</span><span class="p">)</span>
        <span class="n">head</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">data</span><span class="p">[</span><span class="n">hashcode</span><span class="p">]</span>
        
        <span class="k">while</span> <span class="n">head</span><span class="o">.</span><span class="n">next</span><span class="p">:</span>
            <span class="k">if</span> <span class="n">head</span><span class="o">.</span><span class="n">next</span><span class="o">.</span><span class="n">key</span> <span class="o">==</span> <span class="n">key</span><span class="p">:</span>
                <span class="n">toremove</span> <span class="o">=</span> <span class="n">head</span><span class="o">.</span><span class="n">next</span>
                <span class="n">head</span><span class="o">.</span><span class="n">next</span> <span class="o">=</span> <span class="n">toremove</span><span class="o">.</span><span class="n">next</span>
                <span class="n">toremove</span><span class="o">.</span><span class="n">next</span> <span class="o">=</span> <span class="kc">None</span>
                <span class="k">return</span>
            <span class="n">head</span> <span class="o">=</span> <span class="n">head</span><span class="o">.</span><span class="n">next</span>


<span class="k">class</span> <span class="nc">Node</span><span class="p">:</span>
    <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">key</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="n">val</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="nb">next</span> <span class="o">=</span> <span class="kc">None</span><span class="p">):</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">key</span> <span class="o">=</span> <span class="n">key</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">val</span> <span class="o">=</span> <span class="n">val</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">next</span> <span class="o">=</span> <span class="nb">next</span>
        
        
    
</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 373 Find K Pairs with Smallest Sums</title>
			<link>https://www.dincerbakkal.com/posts/leetcode373/</link>
			<pubDate>Fri, 02 Jul 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode373/</guid>
			<description>You are given two integer arrays nums1 and nums2 sorted in ascending order and an integer k.
Define a pair (u, v) which consists of one element from the first array and one element from the second array.
Return the k pairs (u1, v1), (u2, v2), &amp;hellip;, (uk, vk) with the smallest sums.
Input: nums1 = [1,7,11], nums2 = [2,4,6], k = 3 Output: [[1,2],[1,4],[1,6]] Explanation: The first 3 pairs are returned from the sequence: [1,2],[1,4],[1,6],[7,2],[7,4],[11,2],[7,6],[11,4],[11,6] Input: nums1 = [1,1,2], nums2 = [1,2,3], k = 2 Output: [[1,1],[1,1]] Explanation: The first 2 pairs are returned from the sequence: [1,1],[1,1],[1,2],[2,1],[1,2],[2,2],[1,3],[1,3],[2,3] and let&amp;rsquo;s say k=3</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>You are given two integer arrays nums1 and nums2 sorted in ascending order and an integer k.</p>
<p>Define a pair (u, v) which consists of one element from the first array and one element from the second array.</p>
<p>Return the k pairs (u1, v1), (u2, v2), &hellip;, (uk, vk) with the smallest sums.</p>
<!-- raw HTML omitted -->
<pre><code>Input: nums1 = [1,7,11], nums2 = [2,4,6], k = 3
Output: [[1,2],[1,4],[1,6]]
Explanation: The first 3 pairs are returned from the sequence: [1,2],[1,4],[1,6],[7,2],[7,4],[11,2],[7,6],[11,4],[11,6]
</code></pre><!-- raw HTML omitted -->
<pre><code>Input: nums1 = [1,1,2], nums2 = [1,2,3], k = 2
Output: [[1,1],[1,1]]
Explanation: The first 2 pairs are returned from the sequence: [1,1],[1,1],[1,2],[2,1],[1,2],[2,2],[1,3],[1,3],[2,3]
</code></pre><!-- raw HTML omitted -->
<p>and let&rsquo;s say k=3</p>
<p>We know the brutal force way to do it is to calc (a1, b1), (a1, b2), (a1,b3)&hellip;.(a3,b3)&rsquo;s sum respectively and sort the sums, and pick the top 3 of them. This algorithm is O(n2). And we need an algorithm better than that.</p>
<p>So, the overall idea of the algorithm:
Maintain a min-heap to keep only part of the whole set of combinations of all elements from nums1 and nums2. That way, we can avoid the brutal force way which is O(n2). We only push necessary pairs into the heap, until we find all of the k pairs.</p>
<p>How we achieve that (for the sake of explanation, ignore the corner cases for now):
1, create a heap, then push (S0, N1, N2) into the heap, where N1 is the position of first element in nums1, N2 is the position of first element in nums2, S0 is the sum of N1 and N2. Mark (N1,N2) as visited.
2, Pop the root element (S0, N1,N2) out of the heap, add (N1,N2) to the result to be returned. and immediately push (S1, N1+1,N2) and (S2, N1, N2+1) into the heap, where S1 = nums1[N1+1]+nums2[N2], S2 = nums1[N1] + nums2[N2+1]. Here, if a pair (Nx, Ny) has already been visited, we&rsquo;ll ignore it and not push it to the heap.
3, repeat this, until all k pairs have been added into the return list. Return the list.</p>
<p>The complexity of this algorithm is O(klgk) if k &lt; n , because we repeat k times, and each time we do a O(lgk) heappush.</p>
<p>Why this algorithm works? The real question is, in this algorithm, how do we know that the sum of the pair that got heappopped earlier is always smaller than the sum of any pair that got heappushed later. Why we so sure about that?</p>
<p>Because, look at the process:
We heappop the minimal pair (S0, N1, N2), then immediately heappush two larger pairs (S1, N1+1,N2) and (S2, N1, N2+1). (why S1 and S2 always larger than S0? Because the two arrays are sorted.) And right after the heappush, the heap gets re-heaped, and of course the root at this point is larger (at least equal) than (S0, N1, N2). Remember though, the root now maybe (S1, N1+1,N2) or (S2, N1, N2+1) or any other pair that already exists in the heap after that heappop operation. This process gets repeated over and over again until finished.</p>
<p>From this, we can conclude that, the pairs that get heappushed is always larger than the pairs that get heappopped earlier. It might be smaller than other pairs that are currently in the heap, but we don’t care about that. We only care about pairs that got pushed or popped.</p>
<p>The beauty of this algorithm is, it works perfectly under the fact: two array are sorted. If the arrays were to be unsorted, we would not be able to guarentee that the two pairs get heappushed are always larger than the pair that gets heappopped, thus it would be possible that a pair that gets heappopped later is larger than one gets heappopped ealier, which would fail to produce the correct answer.</p>
<pre><code>
&lt;h2&gt;Code&lt;/h2&gt;

```python
from heapq import *
class Solution:

    def kSmallestPairs(self, nums1, nums2, k):

        if not nums1 or not nums2:
            return []

        visited = []
        heap = []
        output = []

        heappush(heap, (nums1[0] + nums2[0], 0, 0))
        visited.append((0, 0))

        while len(output) &lt; k and heap:

            val = heappop(heap)
            output.append((nums1[val[1]], nums2[val[2]]))

            if val[1] + 1 &lt; len(nums1) and (val[1] + 1, val[2]) not in visited:
                heappush(heap, (nums1[val[1] + 1] + nums2[val[2]], val[1] + 1, val[2]))
                visited.append((val[1] + 1, val[2]))

            if val[2] + 1 &lt; len(nums2) and (val[1], val[2] + 1) not in visited:
                heappush(heap, (nums1[val[1]] + nums2[val[2] + 1], val[1], val[2] + 1))
                visited.append((val[1], val[2] + 1))

        return output
        
    
</code></pre><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 819 Most Common Word</title>
			<link>https://www.dincerbakkal.com/posts/leetcode819/</link>
			<pubDate>Fri, 02 Jul 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode819/</guid>
			<description>Given a string paragraph and a string array of the banned words banned, return the most frequent word that is not banned. It is guaranteed there is at least one word that is not banned, and that the answer is unique.
The words in paragraph are case-insensitive and the answer should be returned in lowercase.
Input: paragraph = &amp;quot;Bob hit a ball, the hit BALL flew far after it was hit.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>Given a string paragraph and a string array of the banned words banned, return the most frequent word that is not banned. It is guaranteed there is at least one word that is not banned, and that the answer is unique.</p>
<p>The words in paragraph are case-insensitive and the answer should be returned in lowercase.</p>
<!-- raw HTML omitted -->
<pre><code>Input: paragraph = &quot;Bob hit a ball, the hit BALL flew far after it was hit.&quot;, banned = [&quot;hit&quot;]
Output: &quot;ball&quot;
Explanation: 
&quot;hit&quot; occurs 3 times, but it is a banned word.
&quot;ball&quot; occurs twice (and no other word does), so it is the most frequent non-banned word in the paragraph. 
Note that words in the paragraph are not case sensitive,
that punctuation is ignored (even if adjacent to words, such as &quot;ball,&quot;), 
and that &quot;hit&quot; isn't the answer even though it occurs more because it is banned.
</code></pre><!-- raw HTML omitted -->
<pre><code>Input: paragraph = &quot;a.&quot;, banned = []
Output: &quot;a&quot;
</code></pre><!-- raw HTML omitted -->
<ul>
<li></li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">class</span> <span class="nc">Solution</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">mostCommonWord</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">paragraph</span><span class="p">,</span> <span class="n">banned</span><span class="p">):</span>
        <span class="s2">&#34;&#34;&#34;
</span><span class="s2">        :type paragraph: str
</span><span class="s2">        :type banned: List[str]
</span><span class="s2">        :rtype: str
</span><span class="s2">        &#34;&#34;&#34;</span>
        <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="s2">&#34;!?&#39;,;.&#34;</span><span class="p">:</span> <span class="n">paragraph</span> <span class="o">=</span> <span class="n">paragraph</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">c</span><span class="p">,</span> <span class="s2">&#34; &#34;</span><span class="p">)</span>
        <span class="n">d</span><span class="p">,</span> <span class="n">res</span><span class="p">,</span> <span class="n">count</span> <span class="o">=</span> <span class="p">{},</span><span class="s2">&#34;&#34;</span><span class="p">,</span><span class="mi">0</span>
        <span class="k">for</span> <span class="n">word</span> <span class="ow">in</span> <span class="n">paragraph</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span><span class="o">.</span><span class="n">split</span><span class="p">():</span>
            <span class="k">if</span> <span class="n">word</span> <span class="ow">in</span> <span class="n">banned</span><span class="p">:</span>
                <span class="k">continue</span><span class="p">;</span>
            <span class="k">elif</span> <span class="n">word</span> <span class="ow">in</span> <span class="n">d</span><span class="p">:</span>
                <span class="n">d</span><span class="p">[</span><span class="n">word</span><span class="p">]</span> <span class="o">+=</span> <span class="mi">1</span>
            <span class="k">else</span><span class="p">:</span>
                <span class="n">d</span><span class="p">[</span><span class="n">word</span><span class="p">]</span> <span class="o">=</span> <span class="mi">1</span>
            <span class="k">if</span> <span class="n">d</span><span class="p">[</span><span class="n">word</span><span class="p">]</span> <span class="o">&gt;</span> <span class="n">count</span><span class="p">:</span>
                <span class="n">count</span> <span class="o">=</span> <span class="n">d</span><span class="p">[</span><span class="n">word</span><span class="p">]</span>
                <span class="n">res</span> <span class="o">=</span> <span class="n">word</span>
        <span class="k">return</span> <span class="n">res</span>
        
        
    
</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 509 Fibonacci Number</title>
			<link>https://www.dincerbakkal.com/posts/leetcode509/</link>
			<pubDate>Thu, 01 Jul 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode509/</guid>
			<description>The Fibonacci numbers, commonly denoted F(n) form a sequence, called the Fibonacci sequence, such that each number is the sum of the two preceding ones, starting from 0 and 1. That is,
F(0) = 0, F(1) = 1 F(n) = F(n - 1) + F(n - 2), for n &amp;gt; 1. Given n, calculate F(n).
Input: n = 2 Output: 1 Explanation: F(2) = F(1) + F(0) = 1 + 0 = 1.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>The Fibonacci numbers, commonly denoted F(n) form a sequence, called the Fibonacci sequence, such that each number is the sum of the two preceding ones, starting from 0 and 1. That is,</p>
<p>F(0) = 0, F(1) = 1
F(n) = F(n - 1) + F(n - 2), for n &gt; 1.
Given n, calculate F(n).</p>
<!-- raw HTML omitted -->
<pre><code>Input: n = 2
Output: 1
Explanation: F(2) = F(1) + F(0) = 1 + 0 = 1.
</code></pre><!-- raw HTML omitted -->
<pre><code>Input: n = 3
Output: 2
Explanation: F(3) = F(2) + F(1) = 1 + 1 = 2.
</code></pre><!-- raw HTML omitted -->
<ul>
<li>Fibonacci sorusunun çözümü isteniyor.</li>
<li>Dinamik programlama ile çözebiliriz.</li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">class</span> <span class="nc">Solution</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
    <span class="k">def</span> <span class="nf">fib</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">n</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
        <span class="k">if</span> <span class="n">n</span><span class="o">&lt;</span><span class="mi">2</span><span class="p">:</span> <span class="k">return</span> <span class="n">n</span>
        <span class="n">dp</span> <span class="o">=</span> <span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="p">(</span><span class="n">n</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span>
        <span class="n">dp</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="mi">1</span>        
        <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span><span class="n">n</span><span class="o">+</span><span class="mi">1</span><span class="p">):</span>
            <span class="n">dp</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="n">dp</span><span class="p">[</span><span class="n">i</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">+</span><span class="n">dp</span><span class="p">[</span><span class="n">i</span><span class="o">-</span><span class="mi">2</span><span class="p">]</span>
        <span class="k">return</span> <span class="n">dp</span><span class="p">[</span><span class="n">n</span><span class="p">]</span>
        
    
</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 929. Unique Email Addresses</title>
			<link>https://www.dincerbakkal.com/posts/leetcode929/</link>
			<pubDate>Wed, 30 Jun 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode929/</guid>
			<description>Every valid email consists of a local name and a domain name, separated by the &amp;lsquo;@&amp;rsquo; sign. Besides lowercase letters, the email may contain one or more &amp;lsquo;.&amp;rsquo; or &amp;lsquo;+&amp;rsquo;.
  For example, in &amp;ldquo;alice@leetcode.com&amp;rdquo;, &amp;ldquo;alice&amp;rdquo; is the local name, and &amp;ldquo;leetcode.com&amp;rdquo; is the domain name. If you add periods &amp;lsquo;.&amp;rsquo; between some characters in the local name part of an email address, mail sent there will be forwarded to the same address without dots in the local name.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>Every valid email consists of a local name and a domain name, separated by the &lsquo;@&rsquo; sign. Besides lowercase letters, the email may contain one or more &lsquo;.&rsquo; or &lsquo;+&rsquo;.</p>
<ul>
<li>
<p>For example, in &ldquo;<a href="mailto:alice@leetcode.com">alice@leetcode.com</a>&rdquo;, &ldquo;alice&rdquo; is the local name, and &ldquo;leetcode.com&rdquo; is the domain name.
If you add periods &lsquo;.&rsquo; between some characters in the local name part of an email address, mail sent there will be forwarded to the same address without dots in the local name. Note that this rule does not apply to domain names.</p>
</li>
<li>
<p>For example, &ldquo;<a href="mailto:alice.z@leetcode.com">alice.z@leetcode.com</a>&rdquo; and &ldquo;<a href="mailto:alicez@leetcode.com">alicez@leetcode.com</a>&rdquo; forward to the same email address.
If you add a plus &lsquo;+&rsquo; in the local name, everything after the first plus sign will be ignored. This allows certain emails to be filtered. Note that this rule does not apply to domain names.</p>
</li>
<li>
<p>For example, &ldquo;<a href="mailto:m.y+name@email.com">m.y+name@email.com</a>&rdquo; will be forwarded to &ldquo;<a href="mailto:my@email.com">my@email.com</a>&rdquo;.
It is possible to use both of these rules at the same time.</p>
</li>
</ul>
<p>Given an array of strings emails where we send one email to each email[i], return the number of different addresses that actually receive mails.</p>
<!-- raw HTML omitted -->
<pre><code>Input: emails = [&quot;test.email+alex@leetcode.com&quot;,&quot;test.e.mail+bob.cathy@leetcode.com&quot;,&quot;testemail+david@lee.tcode.com&quot;]
Output: 2
Explanation: &quot;testemail@leetcode.com&quot; and &quot;testemail@lee.tcode.com&quot; actually receive mails.
</code></pre><!-- raw HTML omitted -->
<pre><code>Input: emails = [&quot;a@leetcode.com&quot;,&quot;b@leetcode.com&quot;,&quot;c@leetcode.com&quot;]
Output: 3
</code></pre><!-- raw HTML omitted -->
<ul>
<li></li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">class</span> <span class="nc">Solution</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
    <span class="k">def</span> <span class="nf">numUniqueEmails</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">emails</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
        <span class="n">unique</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
        
        <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">emails</span><span class="p">:</span>
            <span class="n">local</span><span class="p">,</span><span class="n">domain</span> <span class="o">=</span> <span class="n">e</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&#34;@&#34;</span><span class="p">)</span>
            <span class="n">local</span> <span class="o">=</span> <span class="n">local</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&#34;+&#34;</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
            <span class="n">local</span> <span class="o">=</span> <span class="n">local</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">&#34;.&#34;</span><span class="p">,</span><span class="s2">&#34;&#34;</span><span class="p">)</span>
            <span class="n">unique</span><span class="o">.</span><span class="n">add</span><span class="p">((</span><span class="n">local</span><span class="p">,</span><span class="n">domain</span><span class="p">))</span>
        <span class="k">return</span> <span class="nb">len</span><span class="p">(</span><span class="n">unique</span><span class="p">)</span>
        
    
</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 917 Reverse Only Letters</title>
			<link>https://www.dincerbakkal.com/posts/leetcode917/</link>
			<pubDate>Tue, 29 Jun 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode917/</guid>
			<description>Given a string s, reverse the string according to the following rules:
 All the characters that are not English letters remain in the same position. All the English letters (lowercase or uppercase) should be reversed. Return s after reversing it.  Input: s = &amp;quot;ab-cd&amp;quot; Output: &amp;quot;dc-ba&amp;quot; Input: s = &amp;quot;a-bC-dEf-ghIj&amp;quot; Output: &amp;quot;j-Ih-gfE-dCba&amp;quot;   Collect the letters of S separately into a stack, so that popping the stack reverses the letters.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>Given a string s, reverse the string according to the following rules:</p>
<ul>
<li>All the characters that are not English letters remain in the same position.</li>
<li>All the English letters (lowercase or uppercase) should be reversed.
Return s after reversing it.</li>
</ul>
<!-- raw HTML omitted -->
<pre><code>Input: s = &quot;ab-cd&quot;
Output: &quot;dc-ba&quot;
</code></pre><!-- raw HTML omitted -->
<pre><code>Input: s = &quot;a-bC-dEf-ghIj&quot;
Output: &quot;j-Ih-gfE-dCba&quot;
</code></pre><!-- raw HTML omitted -->
<ul>
<li>
<p>Collect the letters of S separately into a stack, so that popping the stack reverses the letters. (Alternatively, we could have collected the letters into an array and reversed the array.)</p>
</li>
<li>
<p>Then, when writing the characters of S, any time we need a letter, we use the one we have prepared instead.</p>
</li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">class</span> <span class="nc">Solution</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
    <span class="k">def</span> <span class="nf">reverseOnlyLetters</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">s</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
        <span class="n">letters</span> <span class="o">=</span> <span class="p">[</span><span class="n">c</span> <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="n">s</span> <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">isalpha</span><span class="p">()]</span>
        <span class="n">ans</span> <span class="o">=</span> <span class="p">[]</span>
        <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="n">s</span><span class="p">:</span>
            <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">isalpha</span><span class="p">():</span>
                <span class="n">ans</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">letters</span><span class="o">.</span><span class="n">pop</span><span class="p">())</span>
            <span class="k">else</span><span class="p">:</span>
                <span class="n">ans</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">c</span><span class="p">)</span>
        <span class="k">return</span> <span class="s2">&#34;&#34;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">ans</span><span class="p">)</span>
        
    
</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 905 Sort Array By Parity</title>
			<link>https://www.dincerbakkal.com/posts/leetcode905/</link>
			<pubDate>Mon, 28 Jun 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode905/</guid>
			<description>Given an integer array nums, move all the even integers at the beginning of the array followed by all the odd integers.
Return any array that satisfies this condition.
Input: nums = [3,1,2,4] Output: [2,4,3,1] Explanation: The outputs [4,2,3,1], [2,4,1,3], and [4,2,1,3] would also be accepted. Input: nums = [0] Output: [0]  Soruda bize tek ve çift sayılardan oluşan karışık bir liste veriliyor.Ve çift sayıları listenin önüne taşımamız isteniyor. İki işaretçi kullanarak bu soruyu çözebiliriz.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>Given an integer array nums, move all the even integers at the beginning of the array followed by all the odd integers.</p>
<p>Return any array that satisfies this condition.</p>
<!-- raw HTML omitted -->
<pre><code>Input: nums = [3,1,2,4]
Output: [2,4,3,1]
Explanation: The outputs [4,2,3,1], [2,4,1,3], and [4,2,1,3] would also be accepted.
</code></pre><!-- raw HTML omitted -->
<pre><code>Input: nums = [0]
Output: [0]
</code></pre><!-- raw HTML omitted -->
<ul>
<li>Soruda bize tek ve çift sayılardan oluşan karışık bir liste veriliyor.Ve çift sayıları listenin önüne taşımamız isteniyor.</li>
<li>İki işaretçi kullanarak bu soruyu çözebiliriz.</li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">class</span> <span class="nc">Solution</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
    <span class="k">def</span> <span class="nf">sortArrayByParity</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">nums</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">]:</span>
        <span class="n">position</span> <span class="o">=</span> <span class="mi">0</span>
        
        <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span> <span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="nb">len</span><span class="p">(</span><span class="n">nums</span><span class="p">)):</span>
            <span class="k">if</span> <span class="n">nums</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">%</span><span class="mi">2</span><span class="o">==</span><span class="mi">0</span><span class="p">:</span>
                <span class="n">temp</span><span class="o">=</span><span class="n">nums</span><span class="p">[</span><span class="n">position</span><span class="p">]</span>
                <span class="n">nums</span><span class="p">[</span><span class="n">position</span><span class="p">]</span> <span class="o">=</span><span class="n">nums</span><span class="p">[</span><span class="n">i</span><span class="p">]</span>
                <span class="n">nums</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="n">temp</span>
                <span class="n">position</span><span class="o">+=</span><span class="mi">1</span>
        
        <span class="k">return</span> <span class="n">nums</span>
        
    
</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 796 Rotate String</title>
			<link>https://www.dincerbakkal.com/posts/leetcode796/</link>
			<pubDate>Sun, 27 Jun 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode796/</guid>
			<description>Given two strings s and goal, return true if and only if s can become goal after some number of shifts on s.
A shift on s consists of moving the leftmost character of s to the rightmost position.
 For example, if s = &amp;ldquo;abcde&amp;rdquo;, then it will be &amp;ldquo;bcdea&amp;rdquo; after one shift.  Input: s = &amp;quot;abcde&amp;quot;, goal = &amp;quot;cdeab&amp;quot; Output: true Input: s = &amp;quot;abcde&amp;quot;, goal = &amp;quot;abced&amp;quot; Output: false  All rotations of A are contained in A+A.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>Given two strings s and goal, return true if and only if s can become goal after some number of shifts on s.</p>
<p>A shift on s consists of moving the leftmost character of s to the rightmost position.</p>
<ul>
<li>For example, if s = &ldquo;abcde&rdquo;, then it will be &ldquo;bcdea&rdquo; after one shift.</li>
</ul>
<!-- raw HTML omitted -->
<pre><code>Input: s = &quot;abcde&quot;, goal = &quot;cdeab&quot;
Output: true
</code></pre><!-- raw HTML omitted -->
<pre><code>Input: s = &quot;abcde&quot;, goal = &quot;abced&quot;
Output: false
</code></pre><!-- raw HTML omitted -->
<ul>
<li>All rotations of A are contained in A+A. Thus, we can simply check whether B is a substring of A+A. We also need to check A.length == B.length, otherwise we will fail cases like A = &ldquo;a&rdquo;, B = &ldquo;aa&rdquo;.</li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">class</span> <span class="nc">Solution</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
    <span class="k">def</span> <span class="nf">rotateString</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">A</span><span class="p">,</span> <span class="n">B</span><span class="p">):</span>
        <span class="k">return</span> <span class="nb">len</span><span class="p">(</span><span class="n">A</span><span class="p">)</span> <span class="o">==</span> <span class="nb">len</span><span class="p">(</span><span class="n">B</span><span class="p">)</span> <span class="ow">and</span> <span class="n">B</span> <span class="ow">in</span> <span class="n">A</span><span class="o">+</span><span class="n">A</span>
        
    
</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 724 Find Pivot Index</title>
			<link>https://www.dincerbakkal.com/posts/leetcode724/</link>
			<pubDate>Sat, 26 Jun 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode724/</guid>
			<description>Given an array of integers nums, calculate the pivot index of this array.
The pivot index is the index where the sum of all the numbers strictly to the left of the index is equal to the sum of all the numbers strictly to the index&amp;rsquo;s right.
If the index is on the left edge of the array, then the left sum is 0 because there are no elements to the left.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>Given an array of integers nums, calculate the pivot index of this array.</p>
<p>The pivot index is the index where the sum of all the numbers strictly to the left of the index is equal to the sum of all the numbers strictly to the index&rsquo;s right.</p>
<p>If the index is on the left edge of the array, then the left sum is 0 because there are no elements to the left. This also applies to the right edge of the array.</p>
<p>Return the leftmost pivot index. If no such index exists, return -1.</p>
<!-- raw HTML omitted -->
<pre><code>Input: nums = [1,7,3,6,5,6]
Output: 3
Explanation:
The pivot index is 3.
Left sum = nums[0] + nums[1] + nums[2] = 1 + 7 + 3 = 11
Right sum = nums[4] + nums[5] = 5 + 6 = 11
</code></pre><!-- raw HTML omitted -->
<pre><code>Input: nums = [1,2,3]
Output: -1
Explanation:
There is no index that satisfies the conditions in the problem statement.
</code></pre><!-- raw HTML omitted -->
<ul>
<li>
<p>We need to quickly compute the sum of values to the left and the right of every index.</p>
</li>
<li>
<p>Let&rsquo;s say we knew S as the sum of the numbers, and we are at index i. If we knew the sum of numbers leftsum that are to the left of index i, then the other sum to the right of the index would just be S - nums[i] - leftsum.</p>
</li>
<li>
<p>As such, we only need to know about leftsum to check whether an index is a pivot index in constant time. Let&rsquo;s do that: as we iterate through candidate indexes i, we will maintain the correct value of leftsum.</p>
</li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">findSecondMinimumValue</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">root</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">TreeNode</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
        <span class="k">def</span> <span class="nf">dfs</span><span class="p">(</span><span class="n">node</span><span class="p">):</span>
            <span class="k">if</span> <span class="n">node</span><span class="p">:</span>
                <span class="n">uniques</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">node</span><span class="o">.</span><span class="n">val</span><span class="p">)</span>
                <span class="n">dfs</span><span class="p">(</span><span class="n">node</span><span class="o">.</span><span class="n">left</span><span class="p">)</span>
                <span class="n">dfs</span><span class="p">(</span><span class="n">node</span><span class="o">.</span><span class="n">right</span><span class="p">)</span>

        <span class="n">uniques</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
        <span class="n">dfs</span><span class="p">(</span><span class="n">root</span><span class="p">)</span>

        <span class="n">min1</span><span class="p">,</span> <span class="n">ans</span> <span class="o">=</span> <span class="n">root</span><span class="o">.</span><span class="n">val</span><span class="p">,</span> <span class="nb">float</span><span class="p">(</span><span class="s1">&#39;inf&#39;</span><span class="p">)</span>
        <span class="k">for</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">uniques</span><span class="p">:</span>
            <span class="k">if</span> <span class="n">min1</span> <span class="o">&lt;</span> <span class="n">v</span> <span class="o">&lt;</span> <span class="n">ans</span><span class="p">:</span>
                <span class="n">ans</span> <span class="o">=</span> <span class="n">v</span>

        <span class="k">return</span> <span class="n">ans</span> <span class="k">if</span> <span class="n">ans</span> <span class="o">&lt;</span> <span class="nb">float</span><span class="p">(</span><span class="s1">&#39;inf&#39;</span><span class="p">)</span> <span class="k">else</span> <span class="o">-</span><span class="mi">1</span>
        
    
</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 671 Second Minimum Node In a Binary Tree</title>
			<link>https://www.dincerbakkal.com/posts/leetcode671/</link>
			<pubDate>Fri, 25 Jun 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode671/</guid>
			<description>Given a non-empty special binary tree consisting of nodes with the non-negative value, where each node in this tree has exactly two or zero sub-node. If the node has two sub-nodes, then this node&amp;rsquo;s value is the smaller value among its two sub-nodes. More formally, the property root.val = min(root.left.val, root.right.val) always holds.
Given such a binary tree, you need to output the second minimum value in the set made of all the nodes&#39; value in the whole tree.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>Given a non-empty special binary tree consisting of nodes with the non-negative value, where each node in this tree has exactly two or zero sub-node. If the node has two sub-nodes, then this node&rsquo;s value is the smaller value among its two sub-nodes. More formally, the property root.val = min(root.left.val, root.right.val) always holds.</p>
<p>Given such a binary tree, you need to output the second minimum value in the set made of all the nodes' value in the whole tree.</p>
<p>If no such second minimum value exists, output -1 instead.</p>
<!-- raw HTML omitted -->
<pre><code><figure><img src="/image/671EX1.jpg"
         alt="image"/>
</figure>


Input: root = [2,2,5,null,null,5,7]
Output: 5
Explanation: The smallest value is 2, the second smallest value is 5.
</code></pre><!-- raw HTML omitted -->
<pre><code><figure><img src="/image/671EX2.jpg"
         alt="image"/>
</figure>


Input: root = [2,2,2]
Output: -1
Explanation: The smallest value is 2, but there isn't any second smallest value.
</code></pre><!-- raw HTML omitted -->
<ul>
<li>
<p>Traverse the tree with a depth-first search, and record every unique value in the tree using a Set structure uniques.</p>
</li>
<li>
<p>Then, we&rsquo;ll look through the recorded values for the second minimum. The first minimum must be \text{root.val}root.val.</p>
</li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">findSecondMinimumValue</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">root</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">TreeNode</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
        <span class="k">def</span> <span class="nf">dfs</span><span class="p">(</span><span class="n">node</span><span class="p">):</span>
            <span class="k">if</span> <span class="n">node</span><span class="p">:</span>
                <span class="n">uniques</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">node</span><span class="o">.</span><span class="n">val</span><span class="p">)</span>
                <span class="n">dfs</span><span class="p">(</span><span class="n">node</span><span class="o">.</span><span class="n">left</span><span class="p">)</span>
                <span class="n">dfs</span><span class="p">(</span><span class="n">node</span><span class="o">.</span><span class="n">right</span><span class="p">)</span>

        <span class="n">uniques</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
        <span class="n">dfs</span><span class="p">(</span><span class="n">root</span><span class="p">)</span>

        <span class="n">min1</span><span class="p">,</span> <span class="n">ans</span> <span class="o">=</span> <span class="n">root</span><span class="o">.</span><span class="n">val</span><span class="p">,</span> <span class="nb">float</span><span class="p">(</span><span class="s1">&#39;inf&#39;</span><span class="p">)</span>
        <span class="k">for</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">uniques</span><span class="p">:</span>
            <span class="k">if</span> <span class="n">min1</span> <span class="o">&lt;</span> <span class="n">v</span> <span class="o">&lt;</span> <span class="n">ans</span><span class="p">:</span>
                <span class="n">ans</span> <span class="o">=</span> <span class="n">v</span>

        <span class="k">return</span> <span class="n">ans</span> <span class="k">if</span> <span class="n">ans</span> <span class="o">&lt;</span> <span class="nb">float</span><span class="p">(</span><span class="s1">&#39;inf&#39;</span><span class="p">)</span> <span class="k">else</span> <span class="o">-</span><span class="mi">1</span>
        
    
</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 557 Reverse Words in a String III</title>
			<link>https://www.dincerbakkal.com/posts/leetcode557/</link>
			<pubDate>Thu, 24 Jun 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode557/</guid>
			<description>Given a string s, reverse the order of characters in each word within a sentence while still preserving whitespace and initial word order.
Input: s = &amp;quot;Let&#39;s take LeetCode contest&amp;quot; Output: &amp;quot;s&#39;teL ekat edoCteeL tsetnoc&amp;quot; Input: s = &amp;quot;God Ding&amp;quot; Output: &amp;quot;doG gniD&amp;quot;  Soruda bize bir string veriliyor ve bu stringin boşluklarla ayrılan kelimelerini ters çevirmemiz isteniyor.  class Solution: def reverseWords(self, s: str) -&amp;gt; str: a = s.split(&amp;#34; &amp;#34;) for i in range(len(a)): a[i] = a[i][::-1] return &amp;#34; &amp;#34;.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>Given a string s, reverse the order of characters in each word within a sentence while still preserving whitespace and initial word order.</p>
<!-- raw HTML omitted -->
<pre><code>Input: s = &quot;Let's take LeetCode contest&quot;
Output: &quot;s'teL ekat edoCteeL tsetnoc&quot;
</code></pre><!-- raw HTML omitted -->
<pre><code>Input: s = &quot;God Ding&quot;
Output: &quot;doG gniD&quot;
</code></pre><!-- raw HTML omitted -->
<ul>
<li>Soruda bize bir string veriliyor ve bu stringin boşluklarla ayrılan kelimelerini ters çevirmemiz isteniyor.</li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">reverseWords</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">s</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
        <span class="n">a</span> <span class="o">=</span> <span class="n">s</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&#34; &#34;</span><span class="p">)</span>
        <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">a</span><span class="p">)):</span>
            <span class="n">a</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="n">a</span><span class="p">[</span><span class="n">i</span><span class="p">][::</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
        <span class="k">return</span> <span class="s2">&#34; &#34;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">a</span><span class="p">)</span>
        
    
</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 541 Reverse String II</title>
			<link>https://www.dincerbakkal.com/posts/leetcode541/</link>
			<pubDate>Wed, 23 Jun 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode541/</guid>
			<description>Given a string s and an integer k, reverse the first k characters for every 2k characters counting from the start of the string.
If there are fewer than k characters left, reverse all of them. If there are less than 2k but greater than or equal to k characters, then reverse the first k characters and left the other as original.
Input: s = &amp;quot;abcdefg&amp;quot;, k = 2 Output: &amp;quot;bacdfeg&amp;quot; Input: s = &amp;quot;abcd&amp;quot;, k = 2 Output: &amp;quot;bacd&amp;quot;  Soruda bize bir string ve bir sayı veriliyor ve bu stringin bu sayıx2 kadar olan bölümlerinde sayı kadar olan ilk harflerini ters çevirmemiz isteniyor.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>Given a string s and an integer k, reverse the first k characters for every 2k characters counting from the start of the string.</p>
<p>If there are fewer than k characters left, reverse all of them. If there are less than 2k but greater than or equal to k characters, then reverse the first k characters and left the other as original.</p>
<!-- raw HTML omitted -->
<pre><code>Input: s = &quot;abcdefg&quot;, k = 2
Output: &quot;bacdfeg&quot;
</code></pre><!-- raw HTML omitted -->
<pre><code>Input: s = &quot;abcd&quot;, k = 2
Output: &quot;bacd&quot;
</code></pre><!-- raw HTML omitted -->
<ul>
<li>Soruda bize bir string ve bir sayı veriliyor ve bu stringin bu sayıx2  kadar olan bölümlerinde  sayı kadar olan ilk harflerini ters çevirmemiz isteniyor.</li>
<li>Soru biraz karışık ama örneklersek.</li>
<li>&ldquo;abcdefghsdsdf&rdquo;  ve 2 için &ldquo;bacdfeghdssdf&rdquo; oluşuyor.Her 4 karakterlik alanın ilk 2 karakteri ters çevriliyor.</li>
<li>abcd  efgh sdsdf    bacd fegh dssdf</li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">reverseStr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">s</span><span class="p">,</span> <span class="n">k</span><span class="p">):</span>
        <span class="n">s</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">s</span><span class="p">)</span>
        <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">s</span><span class="p">),</span> <span class="mi">2</span><span class="o">*</span><span class="n">k</span><span class="p">):</span>
            <span class="n">s</span><span class="p">[</span><span class="n">i</span><span class="p">:</span><span class="n">i</span><span class="o">+</span><span class="n">k</span><span class="p">]</span> <span class="o">=</span> <span class="nb">reversed</span><span class="p">(</span><span class="n">s</span><span class="p">[</span><span class="n">i</span><span class="p">:</span><span class="n">i</span><span class="o">+</span><span class="n">k</span><span class="p">])</span>
        <span class="k">return</span> <span class="s2">&#34;&#34;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">s</span><span class="p">)</span>
        
    
</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 415 Add Strings</title>
			<link>https://www.dincerbakkal.com/posts/leetcode415/</link>
			<pubDate>Tue, 22 Jun 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode415/</guid>
			<description>Given two non-negative integers, num1 and num2 represented as string, return the sum of num1 and num2 as a string.
You must solve the problem without using any built-in library for handling large integers (such as BigInteger). You must also not convert the inputs to integers directly.
Input: num1 = &amp;quot;11&amp;quot;, num2 = &amp;quot;123&amp;quot; Output: &amp;quot;134&amp;quot; Input: num1 = &amp;quot;456&amp;quot;, num2 = &amp;quot;77&amp;quot; Output: &amp;quot;533&amp;quot; Input: num1 = &amp;quot;0&amp;quot;, num2 = &amp;quot;0&amp;quot; Output: &amp;quot;0&amp;quot;  Soruda bize 2 string şeklinde sayı veriliyor ve bunları kütüphanedeki hazır fonksiyonları kullanmadan toplamamız isteniyor.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>Given two non-negative integers, num1 and num2 represented as string, return the sum of num1 and num2 as a string.</p>
<p>You must solve the problem without using any built-in library for handling large integers (such as BigInteger). You must also not convert the inputs to integers directly.</p>
<!-- raw HTML omitted -->
<pre><code>Input: num1 = &quot;11&quot;, num2 = &quot;123&quot;
Output: &quot;134&quot;
</code></pre><!-- raw HTML omitted -->
<pre><code>Input: num1 = &quot;456&quot;, num2 = &quot;77&quot;
Output: &quot;533&quot;
</code></pre><!-- raw HTML omitted -->
<pre><code>Input: num1 = &quot;0&quot;, num2 = &quot;0&quot;
Output: &quot;0&quot;
</code></pre><!-- raw HTML omitted -->
<ul>
<li>Soruda bize 2 string şeklinde sayı veriliyor ve bunları kütüphanedeki hazır fonksiyonları kullanmadan toplamamız isteniyor.</li>
<li>İlk olarak stringleri bir listeye atarız. num1 = &ldquo;456&rdquo;  - &gt; num1 = [&lsquo;1&rsquo;,&lsquo;2&rsquo;,&lsquo;3&rsquo;]</li>
<li>Daha sonra bir while döngüsü içerisinde listenin sonuncu elemanlarıının sayısal değerleriini buluruz.</li>
<li>n1 = ord(num1.pop())-ord(&lsquo;0&rsquo;) if len(num1) &gt; 0 else 0</li>
<li>Toplamı yaparız eldeyi hesaplarız.</li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">addStrings</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">num1</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">num2</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
        <span class="s2">&#34;&#34;&#34;
</span><span class="s2">        :type num1: str
</span><span class="s2">        :type num2: str
</span><span class="s2">        :rtype: str
</span><span class="s2">        &#34;&#34;&#34;</span>
        <span class="n">num1</span><span class="p">,</span> <span class="n">num2</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">num1</span><span class="p">),</span> <span class="nb">list</span><span class="p">(</span><span class="n">num2</span><span class="p">)</span>
        <span class="n">carry</span><span class="p">,</span> <span class="n">res</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span> <span class="p">[]</span>
        <span class="k">while</span> <span class="nb">len</span><span class="p">(</span><span class="n">num2</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span> <span class="ow">or</span> <span class="nb">len</span><span class="p">(</span><span class="n">num1</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
            <span class="n">n1</span> <span class="o">=</span> <span class="nb">ord</span><span class="p">(</span><span class="n">num1</span><span class="o">.</span><span class="n">pop</span><span class="p">())</span><span class="o">-</span><span class="nb">ord</span><span class="p">(</span><span class="s1">&#39;0&#39;</span><span class="p">)</span> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">num1</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span> <span class="k">else</span> <span class="mi">0</span>
            <span class="n">n2</span> <span class="o">=</span> <span class="nb">ord</span><span class="p">(</span><span class="n">num2</span><span class="o">.</span><span class="n">pop</span><span class="p">())</span><span class="o">-</span><span class="nb">ord</span><span class="p">(</span><span class="s1">&#39;0&#39;</span><span class="p">)</span> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">num2</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span> <span class="k">else</span> <span class="mi">0</span>
            
            <span class="n">temp</span> <span class="o">=</span> <span class="n">n1</span> <span class="o">+</span> <span class="n">n2</span> <span class="o">+</span> <span class="n">carry</span> 
            <span class="n">res</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">temp</span> <span class="o">%</span> <span class="mi">10</span><span class="p">)</span>
            <span class="n">carry</span> <span class="o">=</span> <span class="n">temp</span> <span class="o">//</span> <span class="mi">10</span>
        <span class="k">if</span> <span class="n">carry</span><span class="p">:</span> <span class="n">res</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">carry</span><span class="p">)</span>
        <span class="k">return</span> <span class="s1">&#39;&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="nb">str</span><span class="p">(</span><span class="n">i</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">res</span><span class="p">])[::</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
        
    
</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 414 Third Maximum Number</title>
			<link>https://www.dincerbakkal.com/posts/leetcode414/</link>
			<pubDate>Mon, 21 Jun 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode414/</guid>
			<description>Given an integer array nums, return the third distinct maximum number in this array. If the third maximum does not exist, return the maximum number.
Input: nums = [3,2,1] Output: 1 Explanation: The first distinct maximum is 3. The second distinct maximum is 2. The third distinct maximum is 1. Input: nums = [1,2] Output: 2 Explanation: The first distinct maximum is 2. The second distinct maximum is 1. The third distinct maximum does not exist, so the maximum (2) is returned instead.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>Given an integer array nums, return the third distinct maximum number in this array. If the third maximum does not exist, return the maximum number.</p>
<!-- raw HTML omitted -->
<pre><code>Input: nums = [3,2,1]
Output: 1
Explanation:
The first distinct maximum is 3.
The second distinct maximum is 2.
The third distinct maximum is 1.
</code></pre><!-- raw HTML omitted -->
<pre><code>Input: nums = [1,2]
Output: 2
Explanation:
The first distinct maximum is 2.
The second distinct maximum is 1.
The third distinct maximum does not exist, so the maximum (2) is returned instead.
</code></pre><!-- raw HTML omitted -->
<pre><code>Input: nums = [2,2,3,1]
Output: 1
Explanation:
The first distinct maximum is 3.
The second distinct maximum is 2 (both 2's are counted together since they have the same value).
The third distinct maximum is 1.
</code></pre><!-- raw HTML omitted -->
<ul>
<li>Soruda bize verilen listedeki en büyük üçüncü sayıyı dönmemiz isteniyor ve bunu O(n) sürede yapmamız isteniyor.</li>
<li>Bir dolaşımda en büyük, ikinci en büyük ve üçüncü en büyük sayıyı bularak O(n) süreyi yakalayabiliriz.</li>
<li>Bunun için 3 değişken oluşturur ve bunları en küçük int olan float('-inf') eşitleriz.</li>
<li>Daha sonra liste içinde dolaşarak uygun sayıları yerleştirmeye başlarız.</li>
<li>Burada dikkat etmemiz gereken en büyük sayıdan büyük bir sayı bulursak gerekli kaydırmaları yapmamız gerekir.</li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">thirdMax</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">nums</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
        <span class="n">first</span> <span class="o">=</span> <span class="n">second</span> <span class="o">=</span> <span class="n">third</span> <span class="o">=</span> <span class="nb">float</span><span class="p">(</span><span class="s1">&#39;-inf&#39;</span><span class="p">)</span>
        <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">nums</span><span class="p">:</span>
            <span class="k">if</span> <span class="n">first</span> <span class="o">==</span> <span class="n">i</span> <span class="ow">or</span> <span class="n">second</span> <span class="o">==</span><span class="n">i</span> <span class="ow">or</span> <span class="n">third</span> <span class="o">==</span><span class="n">i</span><span class="p">:</span>
                <span class="k">continue</span>
            
            <span class="k">if</span> <span class="p">(</span><span class="n">i</span> <span class="o">&gt;</span> <span class="n">first</span><span class="p">):</span>
                <span class="n">third</span> <span class="o">=</span> <span class="n">second</span>
                <span class="n">second</span> <span class="o">=</span> <span class="n">first</span>
                <span class="n">first</span> <span class="o">=</span> <span class="n">i</span>
            <span class="k">elif</span> <span class="p">(</span> <span class="n">i</span> <span class="o">&gt;</span> <span class="n">second</span><span class="p">):</span>
                <span class="n">third</span> <span class="o">=</span> <span class="n">second</span>
                <span class="n">second</span><span class="o">=</span><span class="n">i</span>
            <span class="k">elif</span> <span class="p">(</span> <span class="n">i</span> <span class="o">&gt;</span><span class="n">third</span><span class="p">):</span>
                <span class="n">third</span> <span class="o">=</span> <span class="n">i</span>
        <span class="k">return</span> <span class="n">third</span> <span class="k">if</span> <span class="n">third</span> <span class="o">&gt;</span> <span class="o">-</span><span class="nb">float</span><span class="p">(</span><span class="s2">&#34;inf&#34;</span><span class="p">)</span> <span class="k">else</span> <span class="n">first</span>
        
    
</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 412 Fizz Buzz</title>
			<link>https://www.dincerbakkal.com/posts/leetcode412/</link>
			<pubDate>Sun, 20 Jun 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode412/</guid>
			<description>Given an integer n, return a string array answer (1-indexed) where:
 answer[i] == &amp;ldquo;FizzBuzz&amp;rdquo; if i is divisible by 3 and 5. answer[i] == &amp;ldquo;Fizz&amp;rdquo; if i is divisible by 3. answer[i] == &amp;ldquo;Buzz&amp;rdquo; if i is divisible by 5. answer[i] == i if non of the above conditions are true.  Input: n = 3 Output: [&amp;quot;1&amp;quot;,&amp;quot;2&amp;quot;,&amp;quot;Fizz&amp;quot;] Input: n = 5 Output: [&amp;quot;1&amp;quot;,&amp;quot;2&amp;quot;,&amp;quot;Fizz&amp;quot;,&amp;quot;4&amp;quot;,&amp;quot;Buzz&amp;quot;]  Soruda en çok sorulan sorulardan olan FizzBuzz sorusu.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>Given an integer n, return a string array answer (1-indexed) where:</p>
<ul>
<li>answer[i] == &ldquo;FizzBuzz&rdquo; if i is divisible by 3 and 5.</li>
<li>answer[i] == &ldquo;Fizz&rdquo; if i is divisible by 3.</li>
<li>answer[i] == &ldquo;Buzz&rdquo; if i is divisible by 5.</li>
<li>answer[i] == i if non of the above conditions are true.</li>
</ul>
<!-- raw HTML omitted -->
<pre><code>Input: n = 3
Output: [&quot;1&quot;,&quot;2&quot;,&quot;Fizz&quot;]
</code></pre><!-- raw HTML omitted -->
<pre><code>Input: n = 5
Output: [&quot;1&quot;,&quot;2&quot;,&quot;Fizz&quot;,&quot;4&quot;,&quot;Buzz&quot;]
</code></pre><!-- raw HTML omitted -->
<ul>
<li>Soruda en çok sorulan sorulardan olan FizzBuzz sorusu.</li>
<li>Burada dikkat edilmesi gereken ilk olarak hem 3 e hem 5 e bölüneni kontrol etmek.</li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">fizzBuzz</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">n</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
        
        <span class="n">res</span> <span class="o">=</span> <span class="p">[]</span>
        
        <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="n">n</span><span class="o">+</span><span class="mi">1</span><span class="p">):</span>
            
            <span class="k">if</span> <span class="n">i</span> <span class="o">%</span> <span class="mi">3</span> <span class="o">==</span> <span class="mi">0</span> <span class="ow">and</span> <span class="n">i</span> <span class="o">%</span> <span class="mi">5</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
                <span class="c1"># i is multiple of both 3 and 5</span>
                <span class="n">res</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s1">&#39;FizzBuzz&#39;</span><span class="p">)</span>
            
            <span class="k">elif</span> <span class="n">i</span> <span class="o">%</span> <span class="mi">3</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
                <span class="c1"># i is multiple of 3 only</span>
                <span class="n">res</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s1">&#39;Fizz&#39;</span><span class="p">)</span>
            
            <span class="k">elif</span> <span class="n">i</span> <span class="o">%</span> <span class="mi">5</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
                <span class="c1"># i is mupltiple of 5 only</span>
                <span class="n">res</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s1">&#39;Buzz&#39;</span><span class="p">)</span>
            
            <span class="k">else</span><span class="p">:</span>
                <span class="c1"># i is neither multiple of 3 nor multiple of 5.</span>
                <span class="n">res</span><span class="o">.</span><span class="n">append</span><span class="p">(</span> <span class="nb">str</span><span class="p">(</span><span class="n">i</span><span class="p">)</span> <span class="p">)</span>
                
        
        <span class="k">return</span> <span class="n">res</span>
        
    
</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 387 First Unique Character in a String</title>
			<link>https://www.dincerbakkal.com/posts/leetcode387/</link>
			<pubDate>Sat, 19 Jun 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode387/</guid>
			<description>Given a string s, find the first non-repeating character in it and return its index. If it does not exist, return -1.
Input: s = &amp;quot;leetcode&amp;quot; Output: 0 Input: s = &amp;quot;loveleetcode&amp;quot; Output: 2  Soruda bize bir string veriliyor ve bu string içerisinde sadece 1 tane bulunan ilk harfi dönmemiz isteniyor. Burada dictionarie kullanabiliriz.Bu sayede harfleri ve kaç kere tekrar ettiğini buluruz. Daha sonra verilen kelimenin harflerini kontrol ederek dict içerisinde 1 tane olanı bulur ve döneriz.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>Given a string s, find the first non-repeating character in it and return its index. If it does not exist, return -1.</p>
<!-- raw HTML omitted -->
<pre><code>Input: s = &quot;leetcode&quot;
Output: 0
</code></pre><!-- raw HTML omitted -->
<pre><code>Input: s = &quot;loveleetcode&quot;
Output: 2
</code></pre><!-- raw HTML omitted -->
<ul>
<li>Soruda bize bir string veriliyor ve bu string içerisinde sadece 1 tane bulunan ilk harfi dönmemiz isteniyor.</li>
<li>Burada dictionarie kullanabiliriz.Bu sayede harfleri ve kaç kere tekrar ettiğini buluruz.</li>
<li>Daha sonra verilen kelimenin harflerini kontrol ederek dict içerisinde 1 tane olanı bulur ve döneriz.</li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">firstUniqChar</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">s</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
        <span class="n">d</span> <span class="o">=</span> <span class="p">{}</span>
        <span class="k">for</span> <span class="n">l</span> <span class="ow">in</span> <span class="n">s</span><span class="p">:</span>
            <span class="k">if</span> <span class="n">l</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">d</span><span class="p">:</span> <span class="n">d</span><span class="p">[</span><span class="n">l</span><span class="p">]</span> <span class="o">=</span> <span class="mi">1</span>
            <span class="k">else</span><span class="p">:</span> <span class="n">d</span><span class="p">[</span><span class="n">l</span><span class="p">]</span> <span class="o">+=</span> <span class="mi">1</span>
        
        <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">s</span><span class="p">)):</span>
            <span class="k">if</span> <span class="n">d</span><span class="p">[</span><span class="n">s</span><span class="p">[</span><span class="n">i</span><span class="p">]]</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
                <span class="k">return</span> <span class="n">i</span> 
        <span class="k">return</span> <span class="o">-</span><span class="mi">1</span> 
    
</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 349 Intersection of Two Arrays</title>
			<link>https://www.dincerbakkal.com/posts/leetcode349/</link>
			<pubDate>Fri, 18 Jun 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode349/</guid>
			<description>Given two integer arrays nums1 and nums2, return an array of their intersection. Each element in the result must be unique and you may return the result in any order.
Input: nums1 = [1,2,2,1], nums2 = [2,2] Output: [2] Input: nums1 = [4,9,5], nums2 = [9,4,9,8,4] Output: [9,4] Explanation: [4,9] is also accepted.  Soruda bize iki liste veriliyor ve bu listelerdeki ortak sayıları bulmamız isteniyor. Döndüğümüz sonuç içerisinde aynı sayıdan sadece 1 tane olmalı.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>Given two integer arrays nums1 and nums2, return an array of their intersection. Each element in the result must be unique and you may return the result in any order.</p>
<!-- raw HTML omitted -->
<pre><code>Input: nums1 = [1,2,2,1], nums2 = [2,2]
Output: [2]
</code></pre><!-- raw HTML omitted -->
<pre><code>Input: nums1 = [4,9,5], nums2 = [9,4,9,8,4]
Output: [9,4]
Explanation: [4,9] is also accepted.
</code></pre><!-- raw HTML omitted -->
<ul>
<li>Soruda bize iki liste veriliyor ve bu listelerdeki ortak sayıları bulmamız isteniyor.</li>
<li>Döndüğümüz sonuç içerisinde aynı sayıdan sadece 1 tane olmalı.</li>
<li>Bunun için elimizdeki küçük listeyi bir set listesine atarız.Bu sayede tekrar eden sayılardan kurtulmuş oluruz.</li>
<li>Daha sonra uzun listede dolaşarak içindeki sayıları ararız.Bulduğumuz sayıyı sonuca atar set içerisinden çıkarırız.</li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">intersection</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">nums1</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">],</span> <span class="n">nums2</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">]:</span>
        <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">nums1</span><span class="p">)</span> <span class="o">&gt;</span> <span class="nb">len</span><span class="p">(</span><span class="n">nums2</span><span class="p">):</span>
            <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">intersection</span><span class="p">(</span><span class="n">nums2</span><span class="p">,</span><span class="n">nums1</span><span class="p">)</span>
        
        <span class="n">lookup</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
        <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">nums1</span><span class="p">:</span>
            <span class="n">lookup</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">i</span><span class="p">)</span>
        
        <span class="n">result</span> <span class="o">=</span> <span class="p">[]</span>
        <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">nums2</span><span class="p">:</span>
            <span class="k">if</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">lookup</span><span class="p">:</span>
                <span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">i</span><span class="p">)</span>
                <span class="n">lookup</span><span class="o">.</span><span class="n">discard</span><span class="p">(</span><span class="n">i</span><span class="p">)</span>
        <span class="k">return</span> <span class="n">result</span>
    
</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 344 Reverse String</title>
			<link>https://www.dincerbakkal.com/posts/leetcode344/</link>
			<pubDate>Thu, 17 Jun 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode344/</guid>
			<description>Write a function that reverses a string. The input string is given as an array of characters s.
You must do this by modifying the input array in-place with O(1) extra memory.
Input: s = [&amp;quot;h&amp;quot;,&amp;quot;e&amp;quot;,&amp;quot;l&amp;quot;,&amp;quot;l&amp;quot;,&amp;quot;o&amp;quot;] Output: [&amp;quot;o&amp;quot;,&amp;quot;l&amp;quot;,&amp;quot;l&amp;quot;,&amp;quot;e&amp;quot;,&amp;quot;h&amp;quot;] Input: s = [&amp;quot;H&amp;quot;,&amp;quot;a&amp;quot;,&amp;quot;n&amp;quot;,&amp;quot;n&amp;quot;,&amp;quot;a&amp;quot;,&amp;quot;h&amp;quot;] Output: [&amp;quot;h&amp;quot;,&amp;quot;a&amp;quot;,&amp;quot;n&amp;quot;,&amp;quot;n&amp;quot;,&amp;quot;a&amp;quot;,&amp;quot;H&amp;quot;]  Soruda bize verilen listeyi terse çevirmemiz isteniyor. Bu soruda iki işaretçi yöntemini kullanabiliriz. Sol ve sağ işaretçiler en baştan ve sondan başlayarak ilerler. Değişimi yaptıkça solu 1 arttırır ve sağı 1 azaltırız.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>Write a function that reverses a string. The input string is given as an array of characters s.</p>
<p>You must do this by modifying the input array in-place with O(1) extra memory.</p>
<!-- raw HTML omitted -->
<pre><code>Input: s = [&quot;h&quot;,&quot;e&quot;,&quot;l&quot;,&quot;l&quot;,&quot;o&quot;]
Output: [&quot;o&quot;,&quot;l&quot;,&quot;l&quot;,&quot;e&quot;,&quot;h&quot;]
</code></pre><!-- raw HTML omitted -->
<pre><code>Input: s = [&quot;H&quot;,&quot;a&quot;,&quot;n&quot;,&quot;n&quot;,&quot;a&quot;,&quot;h&quot;]
Output: [&quot;h&quot;,&quot;a&quot;,&quot;n&quot;,&quot;n&quot;,&quot;a&quot;,&quot;H&quot;]
</code></pre><!-- raw HTML omitted -->
<ul>
<li>Soruda bize verilen listeyi terse çevirmemiz isteniyor.</li>
<li>Bu soruda iki işaretçi yöntemini kullanabiliriz.</li>
<li>Sol ve sağ işaretçiler en baştan ve sondan başlayarak ilerler.</li>
<li>Değişimi yaptıkça solu 1 arttırır ve sağı 1 azaltırız.</li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">reverseString</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">s</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
        <span class="s2">&#34;&#34;&#34;
</span><span class="s2">        Do not return anything, modify s in-place instead.
</span><span class="s2">        &#34;&#34;&#34;</span>
        <span class="n">left</span><span class="p">,</span><span class="n">right</span> <span class="o">=</span> <span class="mi">0</span> <span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">s</span><span class="p">)</span> <span class="o">-</span><span class="mi">1</span>
        
        <span class="k">while</span> <span class="n">left</span><span class="o">&lt;</span><span class="n">right</span><span class="p">:</span>
            <span class="n">temp</span> <span class="o">=</span> <span class="n">s</span><span class="p">[</span><span class="n">left</span><span class="p">]</span>
            <span class="n">s</span><span class="p">[</span><span class="n">left</span><span class="p">]</span><span class="o">=</span><span class="n">s</span><span class="p">[</span><span class="n">right</span><span class="p">]</span>
            <span class="n">s</span><span class="p">[</span><span class="n">right</span><span class="p">]</span><span class="o">=</span><span class="n">temp</span>
            <span class="n">left</span><span class="o">+=</span><span class="mi">1</span>
            <span class="n">right</span><span class="o">-=</span><span class="mi">1</span>
    
</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 283 Move Zeroes</title>
			<link>https://www.dincerbakkal.com/posts/leetcode283/</link>
			<pubDate>Wed, 16 Jun 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode283/</guid>
			<description>Given an integer array nums, move all 0&amp;rsquo;s to the end of it while maintaining the relative order of the non-zero elements.
Note that you must do this in-place without making a copy of the array.
Input: nums = [0,1,0,3,12] Output: [1,3,12,0,0] Input: nums = [0] Output: [0]  Soruda bize içinde sıfırlar olan bir liste veriliyor ve bu sıfırları listenin sonuna taşımamız isteniyor. Bu soruyu iki işaretçi kullanarak çözebiliriz. İki işaretçideki sayıları karşılaştırarak ilerleriz ve 0 ile sayının yerini değiştiririz.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>Given an integer array nums, move all 0&rsquo;s to the end of it while maintaining the relative order of the non-zero elements.</p>
<p>Note that you must do this in-place without making a copy of the array.</p>
<!-- raw HTML omitted -->
<pre><code>Input: nums = [0,1,0,3,12]
Output: [1,3,12,0,0]
</code></pre><!-- raw HTML omitted -->
<pre><code>Input: nums = [0]
Output: [0]
</code></pre><!-- raw HTML omitted -->
<ul>
<li>Soruda bize içinde sıfırlar olan bir liste veriliyor ve bu sıfırları listenin sonuna taşımamız isteniyor.</li>
<li>Bu soruyu iki işaretçi kullanarak çözebiliriz.</li>
<li>İki işaretçideki sayıları karşılaştırarak ilerleriz ve 0 ile sayının yerini değiştiririz.</li>
<li>Sıfır ile yer değiştirdiğimizde 0 da olan indeksi 1 arttırırız.</li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">moveZeroes</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">nums</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
        <span class="s2">&#34;&#34;&#34;
</span><span class="s2">        Do not return anything, modify nums in-place instead.
</span><span class="s2">        &#34;&#34;&#34;</span>
        <span class="n">slow</span> <span class="o">=</span> <span class="mi">0</span>
        <span class="k">for</span> <span class="n">fast</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">nums</span><span class="p">)):</span>
            <span class="k">if</span> <span class="n">nums</span><span class="p">[</span><span class="n">fast</span><span class="p">]</span> <span class="o">!=</span> <span class="mi">0</span> <span class="ow">and</span> <span class="n">nums</span><span class="p">[</span><span class="n">slow</span><span class="p">]</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
                <span class="n">nums</span><span class="p">[</span><span class="n">slow</span><span class="p">],</span> <span class="n">nums</span><span class="p">[</span><span class="n">fast</span><span class="p">]</span> <span class="o">=</span> <span class="n">nums</span><span class="p">[</span><span class="n">fast</span><span class="p">],</span> <span class="n">nums</span><span class="p">[</span><span class="n">slow</span><span class="p">]</span>

            <span class="c1"># wait while we find a non-zero element to</span>
            <span class="c1"># swap with you</span>
            <span class="k">if</span> <span class="n">nums</span><span class="p">[</span><span class="n">slow</span><span class="p">]</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">:</span>
                <span class="n">slow</span> <span class="o">+=</span> <span class="mi">1</span>
    
</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 257 Binary Tree Paths</title>
			<link>https://www.dincerbakkal.com/posts/leetcode257/</link>
			<pubDate>Tue, 15 Jun 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode257/</guid>
			<description>Given the root of a binary tree, return all root-to-leaf paths in any order.
A leaf is a node with no children.
 Input: root = [1,2,3,null,5] Output: [&amp;quot;1-&amp;gt;2-&amp;gt;5&amp;quot;,&amp;quot;1-&amp;gt;3&amp;quot;] Input: root = [1] Output: [&amp;quot;1&amp;quot;]  Soruda bize bir binary tree veriliyor ve bizden bu ağacın sağ ve sol kollarındaki dalları yazmamız isteniyor. DFS kullanarak bu soruyu çözebiliriz.  # Definition for a binary tree node. # class TreeNode: # def __init__(self, val=0, left=None, right=None): # self.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>Given the root of a binary tree, return all root-to-leaf paths in any order.</p>
<p>A leaf is a node with no children.</p>
<!-- raw HTML omitted -->
<figure><img src="/image/257EX1.jpg"
         alt="image"/>
</figure>

<pre><code>Input: root = [1,2,3,null,5]
Output: [&quot;1-&gt;2-&gt;5&quot;,&quot;1-&gt;3&quot;]
</code></pre><!-- raw HTML omitted -->
<pre><code>Input: root = [1]
Output: [&quot;1&quot;]
</code></pre><!-- raw HTML omitted -->
<ul>
<li>Soruda bize bir binary tree veriliyor ve bizden bu ağacın sağ ve sol kollarındaki dalları yazmamız isteniyor.</li>
<li>DFS kullanarak bu soruyu çözebiliriz.</li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="c1"># Definition for a binary tree node.</span>
<span class="c1"># class TreeNode:</span>
<span class="c1">#     def __init__(self, val=0, left=None, right=None):</span>
<span class="c1">#         self.val = val</span>
<span class="c1">#         self.left = left</span>
<span class="c1">#         self.right = right</span>
<span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">binaryTreePaths</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">root</span><span class="p">:</span> <span class="n">TreeNode</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
        <span class="n">output</span> <span class="o">=</span> <span class="p">[]</span>
        <span class="k">def</span> <span class="nf">recursive</span><span class="p">(</span><span class="n">cur</span><span class="p">,</span> <span class="n">res</span><span class="p">):</span>
            <span class="k">if</span> <span class="n">cur</span><span class="o">.</span><span class="n">left</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">and</span> <span class="n">cur</span><span class="o">.</span><span class="n">right</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
                <span class="n">output</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s1">&#39;-&gt;&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">res</span> <span class="o">+</span> <span class="p">[</span><span class="nb">str</span><span class="p">(</span><span class="n">cur</span><span class="o">.</span><span class="n">val</span><span class="p">)]))</span>
            <span class="k">if</span> <span class="n">cur</span><span class="o">.</span><span class="n">left</span><span class="p">:</span>
                <span class="n">recursive</span><span class="p">(</span><span class="n">cur</span><span class="o">.</span><span class="n">left</span><span class="p">,</span> <span class="n">res</span> <span class="o">+</span> <span class="p">[</span><span class="nb">str</span><span class="p">(</span><span class="n">cur</span><span class="o">.</span><span class="n">val</span><span class="p">)])</span>
            <span class="k">if</span> <span class="n">cur</span><span class="o">.</span><span class="n">right</span><span class="p">:</span>
                <span class="n">recursive</span><span class="p">(</span><span class="n">cur</span><span class="o">.</span><span class="n">right</span><span class="p">,</span> <span class="n">res</span> <span class="o">+</span> <span class="p">[</span><span class="nb">str</span><span class="p">(</span><span class="n">cur</span><span class="o">.</span><span class="n">val</span><span class="p">)])</span>
        <span class="n">recursive</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="p">[])</span>
        <span class="k">return</span> <span class="n">output</span>
    
</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 242 Valid Anagram</title>
			<link>https://www.dincerbakkal.com/posts/leetcode242/</link>
			<pubDate>Mon, 14 Jun 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode242/</guid>
			<description>Given two strings s and t, return true if t is an anagram of s, and false otherwise.
Input: s = &amp;quot;anagram&amp;quot;, t = &amp;quot;nagaram&amp;quot; Output: true Input: s = &amp;quot;rat&amp;quot;, t = &amp;quot;car&amp;quot; Output: false Bu fonksiyon nasıl çalışır:
Uzunluk Kontrolü: Öncelikle, iki stringin uzunluklarını kontrol eder. Eğer uzunluklar farklıysa, stringler anagram olamaz, çünkü anagramlar aynı harf frekanslarına sahip olmalıdır.
Sözlük Oluşturma: Her iki string için ayrı ayrı harf frekansları birer sözlük (dict) içinde saklanır.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>Given two strings s and t, return true if t is an anagram of s, and false otherwise.</p>
<!-- raw HTML omitted -->
<pre><code>Input: s = &quot;anagram&quot;, t = &quot;nagaram&quot;
Output: true
</code></pre><!-- raw HTML omitted -->
<pre><code>Input: s = &quot;rat&quot;, t = &quot;car&quot;
Output: false
</code></pre><!-- raw HTML omitted -->
<p>Bu fonksiyon nasıl çalışır:</p>
<p>Uzunluk Kontrolü: Öncelikle, iki stringin uzunluklarını kontrol eder. Eğer uzunluklar farklıysa, stringler anagram olamaz, çünkü anagramlar aynı harf frekanslarına sahip olmalıdır.</p>
<p>Sözlük Oluşturma: Her iki string için ayrı ayrı harf frekansları birer sözlük (dict) içinde saklanır. Python&rsquo;daki dict.get metodu, eğer bir anahtar mevcut değilse belirtilen varsayılan değeri döndürür, bu örnekte 0.</p>
<p>Karşılaştırma: İki sözlük, Python&rsquo;da == operatörü ile doğrudan karşılaştırılabilir. Eğer iki sözlük birbirine eşitse, bu iki stringin anagram olduğu anlamına gelir.</p>
<p>Bu çözüm, zaman karmaşıklığı açısından O(n) performans gösterir, çünkü her bir string sadece bir kez taranır ve işlem tamamlandığında her karakterin sayısını içeren sözlükler karşılaştırılır. Alan karmaşıklığı da O(n)&lsquo;dir, çünkü en kötü durumda tüm karakterler farklı olabilir ve bu karakterler için hafızada yer ayırılır. Ancak pratikte, sınırlı sayıda karakter (örneğin ASCII veya Unicode) olduğundan, bu değer sabit bir faktöre (örneğin 26 harf için O(1)) indirgenebilir.</p>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python">    <span class="k">def</span> <span class="nf">isAnagram</span><span class="p">(</span><span class="n">s</span><span class="p">,</span> <span class="n">t</span><span class="p">):</span>
    <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">s</span><span class="p">)</span> <span class="o">!=</span> <span class="nb">len</span><span class="p">(</span><span class="n">t</span><span class="p">):</span>
        <span class="k">return</span> <span class="kc">False</span>
    
    <span class="c1"># Her bir karakterin sayısını tutacak sözlükler</span>
    <span class="n">countS</span><span class="p">,</span> <span class="n">countT</span> <span class="o">=</span> <span class="p">{},</span> <span class="p">{}</span>
    
    <span class="c1"># İki stringi aynı anda döngü ile geçip karakter sayılarını hesapla</span>
    <span class="k">for</span> <span class="n">charS</span><span class="p">,</span> <span class="n">charT</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">s</span><span class="p">,</span> <span class="n">t</span><span class="p">):</span>
        <span class="n">countS</span><span class="p">[</span><span class="n">charS</span><span class="p">]</span> <span class="o">=</span> <span class="n">countS</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">charS</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1</span>
        <span class="n">countT</span><span class="p">[</span><span class="n">charT</span><span class="p">]</span> <span class="o">=</span> <span class="n">countT</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">charT</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1</span>
    
    <span class="c1"># Sözlükleri karşılaştır</span>
    <span class="k">return</span> <span class="n">countS</span> <span class="o">==</span> <span class="n">countT</span>
    
</code></pre></div><!-- raw HTML omitted -->
<ul>
<li>
<p>Zaman Karmaşıklığı (Time Complexity): Bu çözümde her iki string de tam olarak bir kez döngüye girer. Her karakter için hashtable&rsquo;a erişim ve güncelleme işlemi ortalama O(1) zamanda gerçekleşir. Bu nedenle, bu yaklaşımın toplam zaman karmaşıklığı, iki stringin her biri için yapılan işlemlerin toplamı olan O(n) olur, burada n her iki stringin uzunluğudur. Eğer stringler eşit uzunlukta değilse, işlem daha erken sonlanabilir, ancak en kötü senaryoda bu karmaşıklık geçerlidir.</p>
</li>
<li>
<p>Alan Karmaşıklığı (Space Complexity): Hash table&rsquo;da saklanacak en fazla eleman sayısı, kullanılan karakter setinin boyutuna bağlıdır. Eğer ASCII karakter seti kullanılıyorsa, en fazla 128 veya 256 farklı karakter olabilir (genişletilmiş ASCII seti için). Ancak, pratik uygulamalarda genellikle sadece harfler kullanıldığında bu sayı 26 olabilir (büyük ve küçük harfler ayrı tutulursa 52). Bu durumda, alan karmaşıklığı, kullanılan karakter setine göre O(1) olarak kabul edilebilir, çünkü bu bir sabit boyuttadır ve girdinin uzunluğuna bağlı olarak değişmez. Ancak, girdi boyutuna bağlı olarak düşündüğümüzde, en kötü senaryoda tüm karakterlerin birer kez göründüğü durumda, her bir karakter için bir alan ayırmamız gerektiğinden O(n) olarak ifade edilebilir.</p>
</li>
</ul>
]]></content>
		</item>
		
		<item>
			<title>Leetcode 237 Delete Node in a Linked List</title>
			<link>https://www.dincerbakkal.com/posts/leetcode237/</link>
			<pubDate>Sun, 13 Jun 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode237/</guid>
			<description>Write a function to delete a node in a singly-linked list. You will not be given access to the head of the list, instead you will be given access to the node to be deleted directly.
It is guaranteed that the node to be deleted is not a tail node in the list.
Input: head = [4,5,1,9], node = 5 Output: [4,1,9] Explanation: You are given the second node with value 5, the linked list should become 4 -&amp;gt; 1 -&amp;gt; 9 after calling your function.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>Write a function to delete a node in a singly-linked list. You will not be given access to the head of the list, instead you will be given access to the node to be deleted directly.</p>
<p>It is guaranteed that the node to be deleted is not a tail node in the list.</p>
<!-- raw HTML omitted -->
<pre><code>Input: head = [4,5,1,9], node = 5
Output: [4,1,9]
Explanation: You are given the second node with value 5, the linked list should become 4 -&gt; 1 -&gt; 9 after calling your function.
</code></pre><!-- raw HTML omitted -->
<pre><code>Input: head = [4,5,1,9], node = 1
Output: [4,5,9]
Explanation: You are given the third node with value 1, the linked list should become 4 -&gt; 5 -&gt; 9 after calling your function.
</code></pre><!-- raw HTML omitted -->
<ul>
<li>Bizden bir linked listteki verilen node u silmemiz isteniyor.</li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="c1"># Definition for singly-linked list.</span>
<span class="c1"># class ListNode:</span>
<span class="c1">#     def __init__(self, x):</span>
<span class="c1">#         self.val = x</span>
<span class="c1">#         self.next = None</span>

<span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">deleteNode</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">node</span><span class="p">):</span>
        <span class="s2">&#34;&#34;&#34;
</span><span class="s2">        :type node: ListNode
</span><span class="s2">        :rtype: void Do not return anything, modify node in-place instead.
</span><span class="s2">        &#34;&#34;&#34;</span>
        <span class="n">node</span><span class="o">.</span><span class="n">val</span> <span class="o">=</span> <span class="n">node</span><span class="o">.</span><span class="n">next</span><span class="o">.</span><span class="n">val</span>
        <span class="n">node</span><span class="o">.</span><span class="n">next</span> <span class="o">=</span> <span class="n">node</span><span class="o">.</span><span class="n">next</span><span class="o">.</span><span class="n">next</span>
    
</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 232 Implement Queue using Stacks</title>
			<link>https://www.dincerbakkal.com/posts/leetcode232/</link>
			<pubDate>Sat, 12 Jun 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode232/</guid>
			<description>Implement a first in first out (FIFO) queue using only two stacks. The implemented queue should support all the functions of a normal queue (push, peek, pop, and empty).
Implement the MyQueue class:
  void push(int x) Pushes element x to the back of the queue.
  int pop() Removes the element from the front of the queue and returns it.
  int peek() Returns the element at the front of the queue.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>Implement a first in first out (FIFO) queue using only two stacks. The implemented queue should support all the functions of a normal queue (push, peek, pop, and empty).</p>
<p>Implement the MyQueue class:</p>
<ul>
<li>
<p>void push(int x) Pushes element x to the back of the queue.</p>
</li>
<li>
<p>int pop() Removes the element from the front of the queue and returns it.</p>
</li>
<li>
<p>int peek() Returns the element at the front of the queue.</p>
</li>
<li>
<p>boolean empty() Returns true if the queue is empty, false otherwise.
Notes:</p>
</li>
<li>
<p>You must use only standard operations of a stack, which means only push to top, peek/pop from top, size, and is empty operations are valid.</p>
</li>
<li>
<p>Depending on your language, the stack may not be supported natively. You may simulate a stack using a list or deque (double-ended queue) as long as you use only a stack&rsquo;s standard operations.</p>
</li>
</ul>
<!-- raw HTML omitted -->
<pre><code>Input
[&quot;MyQueue&quot;, &quot;push&quot;, &quot;push&quot;, &quot;peek&quot;, &quot;pop&quot;, &quot;empty&quot;]
[[], [1], [2], [], [], []]
Output
[null, null, null, 1, 1, false]

Explanation
MyQueue myQueue = new MyQueue();
myQueue.push(1); // queue is: [1]
myQueue.push(2); // queue is: [1, 2] (leftmost is front of the queue)
myQueue.peek(); // return 1
myQueue.pop(); // return 1, queue is [2]
myQueue.empty(); // return false
</code></pre><!-- raw HTML omitted -->
<ul>
<li>To implement queue by using stack, the push and empty will be exactly same as stack. For pop and top operations, we need to reorder the number in stack. However, since the operations are dynamic changing, to save the cost, the best way is to create extra space called pop_stack to append number that pop out from original stack, this will reverse order will minimum cost.</li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">class</span> <span class="nc">MyQueue</span><span class="p">:</span>

    <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="s2">&#34;&#34;&#34;
</span><span class="s2">        Initialize your data structure here.
</span><span class="s2">        &#34;&#34;&#34;</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">push_stack</span> <span class="o">=</span> <span class="p">[]</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">pop_stack</span> <span class="o">=</span> <span class="p">[]</span>

    <span class="k">def</span> <span class="nf">push</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">x</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
        <span class="s2">&#34;&#34;&#34;
</span><span class="s2">        Push element x to the back of queue.
</span><span class="s2">        &#34;&#34;&#34;</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">push_stack</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>

    <span class="k">def</span> <span class="nf">pop</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
        <span class="s2">&#34;&#34;&#34;
</span><span class="s2">        Removes the element from in front of queue and returns that element.
</span><span class="s2">        &#34;&#34;&#34;</span>
        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">empty</span><span class="p">():</span> <span class="k">return</span>
        <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">pop_stack</span><span class="p">):</span>
            <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">pop_stack</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
        <span class="k">else</span><span class="p">:</span>
            <span class="k">while</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">push_stack</span><span class="p">):</span>
                <span class="bp">self</span><span class="o">.</span><span class="n">pop_stack</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">push_stack</span><span class="o">.</span><span class="n">pop</span><span class="p">())</span>
        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">pop_stack</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>

    <span class="k">def</span> <span class="nf">peek</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
        <span class="s2">&#34;&#34;&#34;
</span><span class="s2">        Get the front element.
</span><span class="s2">        &#34;&#34;&#34;</span>
        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">empty</span><span class="p">():</span> <span class="k">return</span>
        <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">pop_stack</span><span class="p">):</span>
            <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">pop_stack</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
        <span class="k">else</span><span class="p">:</span>
            <span class="k">while</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">push_stack</span><span class="p">):</span>
                <span class="bp">self</span><span class="o">.</span><span class="n">pop_stack</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">push_stack</span><span class="o">.</span><span class="n">pop</span><span class="p">())</span>
        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">pop_stack</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>

    <span class="k">def</span> <span class="nf">empty</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
        <span class="s2">&#34;&#34;&#34;
</span><span class="s2">        Returns whether the queue is empty.
</span><span class="s2">        &#34;&#34;&#34;</span>
        <span class="k">return</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">push_stack</span><span class="p">)</span><span class="o">==</span><span class="kc">False</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">pop_stack</span><span class="p">)</span> <span class="o">==</span> <span class="kc">False</span>
    
</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 225 Implement Stack using Queues</title>
			<link>https://www.dincerbakkal.com/posts/leetcode225/</link>
			<pubDate>Fri, 11 Jun 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode225/</guid>
			<description>Implement a last-in-first-out (LIFO) stack using only two queues. The implemented stack should support all the functions of a normal stack (push, top, pop, and empty).
Implement the MyStack class:
  void push(int x) Pushes element x to the top of the stack.
  int pop() Removes the element on the top of the stack and returns it.
  int top() Returns the element on the top of the stack.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>Implement a last-in-first-out (LIFO) stack using only two queues. The implemented stack should support all the functions of a normal stack (push, top, pop, and empty).</p>
<p>Implement the MyStack class:</p>
<ul>
<li>
<p>void push(int x) Pushes element x to the top of the stack.</p>
</li>
<li>
<p>int pop() Removes the element on the top of the stack and returns it.</p>
</li>
<li>
<p>int top() Returns the element on the top of the stack.</p>
</li>
<li>
<p>boolean empty() Returns true if the stack is empty, false otherwise.
Notes:</p>
</li>
<li>
<p>You must use only standard operations of a queue, which means that only push to back, peek/pop from front, size and is empty operations are valid.</p>
</li>
<li>
<p>Depending on your language, the queue may not be supported natively. You may simulate a queue using a list or deque (double-ended queue) as long as you use only a queue&rsquo;s standard operations.</p>
</li>
</ul>
<!-- raw HTML omitted -->
<pre><code>Input
[&quot;MyStack&quot;, &quot;push&quot;, &quot;push&quot;, &quot;top&quot;, &quot;pop&quot;, &quot;empty&quot;]
[[], [1], [2], [], [], []]
Output
[null, null, null, 2, 2, false]

Explanation
MyStack myStack = new MyStack();
myStack.push(1);
myStack.push(2);
myStack.top(); // return 2
myStack.pop(); // return 2
myStack.empty(); // return False
</code></pre><!-- raw HTML omitted -->
<ul>
<li>Queue is FIFO. We can use python deque to act as queue. The key point is when you append new element to the deque. we need to move all x’s previous elements to x’s next. So we use for loop to control the moving length and popleft each element one by one and append to the original queue.</li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">class</span> <span class="nc">MyStack</span><span class="p">:</span>
    
    <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="s2">&#34;&#34;&#34;
</span><span class="s2">        Initialize your data structure here.
</span><span class="s2">        &#34;&#34;&#34;</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_queue</span> <span class="o">=</span> <span class="n">collections</span><span class="o">.</span><span class="n">deque</span><span class="p">()</span>

    <span class="k">def</span> <span class="nf">push</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">x</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
        <span class="s2">&#34;&#34;&#34;
</span><span class="s2">        Push element x onto stack.
</span><span class="s2">        &#34;&#34;&#34;</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_queue</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
        <span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_queue</span><span class="p">)</span><span class="o">-</span><span class="mi">1</span><span class="p">):</span>
            <span class="bp">self</span><span class="o">.</span><span class="n">_queue</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_queue</span><span class="o">.</span><span class="n">popleft</span><span class="p">())</span>
        

    <span class="k">def</span> <span class="nf">pop</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
        <span class="s2">&#34;&#34;&#34;
</span><span class="s2">        Removes the element on top of the stack and returns that element.
</span><span class="s2">        &#34;&#34;&#34;</span>
        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_queue</span><span class="o">.</span><span class="n">popleft</span><span class="p">()</span>
        

    <span class="k">def</span> <span class="nf">top</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
        <span class="s2">&#34;&#34;&#34;
</span><span class="s2">        Get the top element.
</span><span class="s2">        &#34;&#34;&#34;</span>
        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_queue</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
        

    <span class="k">def</span> <span class="nf">empty</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
        <span class="s2">&#34;&#34;&#34;
</span><span class="s2">        Returns whether the stack is empty.
</span><span class="s2">        &#34;&#34;&#34;</span>
        <span class="k">return</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_queue</span><span class="p">)</span><span class="o">==</span><span class="mi">0</span>
    
</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 191 Number of 1 Bits</title>
			<link>https://www.dincerbakkal.com/posts/leetcode191/</link>
			<pubDate>Thu, 10 Jun 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode191/</guid>
			<description>Write a function that takes an unsigned integer and returns the number of &amp;lsquo;1&amp;rsquo; bits it has (also known as the Hamming weight).
Note:
  Note that in some languages, such as Java, there is no unsigned integer type. In this case, the input will be given as a signed integer type. It should not affect your implementation, as the integer&amp;rsquo;s internal binary representation is the same, whether it is signed or unsigned.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>Write a function that takes an unsigned integer and returns the number of &lsquo;1&rsquo; bits it has (also known as the Hamming weight).</p>
<p>Note:</p>
<ul>
<li>
<p>Note that in some languages, such as Java, there is no unsigned integer type. In this case, the input will be given as a signed integer type. It should not affect your implementation, as the integer&rsquo;s internal binary representation is the same, whether it is signed or unsigned.</p>
</li>
<li>
<p>In Java, the compiler represents the signed integers using 2&rsquo;s complement notation. Therefore, in Example 3, the input represents the signed integer. -3.</p>
</li>
</ul>
<p>Constraints:</p>
<p>The input must be a binary string of length 32.</p>
<!-- raw HTML omitted -->
<pre><code>Input: n = 00000000000000000000000000001011
Output: 3
Explanation: The input binary string 00000000000000000000000000001011 has a total of three '1' bits.
</code></pre><!-- raw HTML omitted -->
<pre><code>Input: n = 00000000000000000000000010000000
Output: 1
Explanation: The input binary string 00000000000000000000000010000000 has a total of one '1' bit.
</code></pre><!-- raw HTML omitted -->
<pre><code>Input: n = 11111111111111111111111111111101
Output: 31
Explanation: The input binary string 11111111111111111111111111111101 has a total of thirty one '1' bits.
</code></pre><!-- raw HTML omitted -->
<ul>
<li>Soruda bize içinde sadece 0 ve 1 lerin olduğu 32 karakterden oluşan bir int veriliyor.Bizden bu int içinde kaç tane 1 olduğunu bulmamız isteniyor.</li>
<li>Bu soru Bit Manipulation ile ilgili bir soru.</li>
<li>Bir sayının 0 yada 1 olduğunu bulmak için onun 2 modunu %2 alırız.Kalan bize sonucu verecektir.</li>
<li>Daha sonra n = n &raquo; 1 ile int bir sağa kaydırırız ve işleme devam ederiz.</li>
<li>Bu int 32 karakter olacağı için 32 kez işlem yapacağız.</li>
<li>Yani O(32) -&gt; O(1).Sabit zaman.</li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python">    <span class="k">def</span> <span class="nf">hammingWeight</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">n</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
        <span class="n">res</span> <span class="o">=</span> <span class="mi">0</span>
        
        <span class="k">while</span> <span class="n">n</span><span class="p">:</span>
            <span class="n">res</span> <span class="o">+=</span> <span class="n">n</span> <span class="o">%</span> <span class="mi">2</span>
            <span class="n">n</span> <span class="o">=</span> <span class="n">n</span> <span class="o">&gt;&gt;</span> <span class="mi">1</span>
        <span class="k">return</span> <span class="n">res</span>
</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 171 Excel Sheet Column Number</title>
			<link>https://www.dincerbakkal.com/posts/leetcode171/</link>
			<pubDate>Wed, 09 Jun 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode171/</guid>
			<description>Given a string columnTitle that represents the column title as appear in an Excel sheet, return its corresponding column number.
For example:
A -&amp;gt; 1 B -&amp;gt; 2 C -&amp;gt; 3 &amp;hellip; Z -&amp;gt; 26 AA -&amp;gt; 27 AB -&amp;gt; 28 &amp;hellip;
Input: columnTitle = &amp;quot;A&amp;quot; Output: 1 Input: columnTitle = &amp;quot;ZY&amp;quot; Output: 701 Input: columnTitle = &amp;quot;FXSHRXW&amp;quot; Output: 2147483647  Soruda bize verilen excelde kullanılan harflerin sayısal karşılıklarını bulmamız isteniyor.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>Given a string columnTitle that represents the column title as appear in an Excel sheet, return its corresponding column number.</p>
<p>For example:</p>
<p>A -&gt; 1
B -&gt; 2
C -&gt; 3
&hellip;
Z -&gt; 26
AA -&gt; 27
AB -&gt; 28
&hellip;</p>
<!-- raw HTML omitted -->
<pre><code>Input: columnTitle = &quot;A&quot;
Output: 1
</code></pre><!-- raw HTML omitted -->
<pre><code>Input: columnTitle = &quot;ZY&quot;
Output: 701
</code></pre><!-- raw HTML omitted -->
<pre><code>Input: columnTitle = &quot;FXSHRXW&quot;
Output: 2147483647
</code></pre><!-- raw HTML omitted -->
<ul>
<li>Soruda bize verilen excelde kullanılan harflerin sayısal karşılıklarını bulmamız isteniyor.</li>
<li>ZA verildiğini düşünelim.</li>
<li>İlk olarak Z nin sayısal karşılığını bulmamız lazım bunu ord(Z) - ord(A) + 1 şeklinde bulabiliriz.</li>
<li>Daha sonra basamağına göre çarpılarak toplam elde edilir.</li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python">    <span class="k">def</span> <span class="nf">titleToNumber</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">columnTitle</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
        <span class="n">total</span> <span class="o">=</span> <span class="mi">0</span>
        
        <span class="k">for</span> <span class="n">ch</span> <span class="ow">in</span> <span class="n">columnTitle</span><span class="p">:</span> <span class="c1">#ZY verilen harfler olsun.</span>
            <span class="n">current</span> <span class="o">=</span> <span class="nb">ord</span><span class="p">(</span><span class="n">ch</span><span class="p">)</span> <span class="o">-</span> <span class="mi">65</span> <span class="o">+</span> <span class="mi">1</span>   <span class="c1">#Z nin sayısal karşılığı bulunur. Z=26    </span>
            <span class="n">total</span> <span class="o">=</span> <span class="n">total</span> <span class="o">*</span> <span class="mi">26</span> <span class="o">+</span> <span class="n">current</span> <span class="c1"># Burada da basamağına göre Z karşılığı çarpılarak eklenir.</span>
        
        <span class="k">return</span> <span class="n">total</span>
</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 128 Longest Consecutive Sequence</title>
			<link>https://www.dincerbakkal.com/posts/leetcode128/</link>
			<pubDate>Tue, 08 Jun 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode128/</guid>
			<description>Soru Given an unsorted array of integers nums, return the length of the longest consecutive elements sequence.
You must write an algorithm that runs in O(n) time.
Örnek 1 Input: nums = [100,4,200,1,3,2] Output: 4 Explanation: The longest consecutive elements sequence is [1, 2, 3, 4]. Therefore its length is 4. Örnek 2 Input: nums = [0,3,7,2,5,8,4,6,0,1] Output: 9 Çözüm  Verilen bir tam sayı dizisindeki en uzun ardışık eleman dizisini bulmanızı gerektiren bir problem.</description>
			<content type="html"><![CDATA[<h3 id="soru">Soru</h3>
<p>Given an unsorted array of integers nums, return the length of the longest consecutive elements sequence.</p>
<p>You must write an algorithm that runs in O(n) time.</p>
<h3 id="örnek-1">Örnek 1</h3>
<pre><code>Input: nums = [100,4,200,1,3,2]
Output: 4
Explanation: The longest consecutive elements sequence is [1, 2, 3, 4]. Therefore its length is 4.
</code></pre><h3 id="örnek-2">Örnek 2</h3>
<pre><code>Input: nums = [0,3,7,2,5,8,4,6,0,1]
Output: 9
</code></pre><h3 id="çözüm">Çözüm</h3>
<ul>
<li>Verilen bir tam sayı dizisindeki en uzun ardışık eleman dizisini bulmanızı gerektiren bir problem. Bu sorun, elemanların dizide sıralı olarak verilmediği durumlarda da ardışık sayı dizisini etkin bir şekilde tespit etmeyi amaçlar.</li>
<li>Bu problemi çözmek için en etkili yöntem, bir set kullanmaktır. Set yapısı, herhangi bir elemanın mevcut olup olmadığını O(1) zaman karmaşıklığında kontrol etmenize olanak tanır.</li>
<li>Algoritma Adımları:</li>
<li>Tüm elemanları bir set içine yerleştirin.</li>
<li>Dizi üzerinde döngü yaparak, her eleman için, bu elemanın ardışık dizinin başlangıcı olup olmadığını kontrol edin. Bir elemanın ardışık dizinin başlangıcı olması için, ondan bir eksik olan elemanın sette olmaması gerekir.</li>
<li>Eğer eleman ardışık dizinin başlangıcıysa, bu elemandan itibaren ardışık olarak kaç eleman olduğunu sayın.</li>
<li>En yüksek sayımı kaydedin.</li>
</ul>
<h2 id="code">Code</h2>
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python">    <span class="k">def</span> <span class="nf">longestConsecutive</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">nums</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
            <span class="n">num_set</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="n">nums</span><span class="p">)</span>
            <span class="n">longest_streak</span> <span class="o">=</span> <span class="mi">0</span>
            <span class="k">for</span> <span class="n">num</span> <span class="ow">in</span> <span class="n">num_set</span><span class="p">:</span>
                <span class="c1"># Sadece ardışık dizinin başlangıç elemanı için işlem yap</span>
                <span class="k">if</span> <span class="n">num</span> <span class="o">-</span> <span class="mi">1</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">num_set</span><span class="p">:</span>
                    <span class="n">current_num</span> <span class="o">=</span> <span class="n">num</span>
                    <span class="n">current_streak</span> <span class="o">=</span> <span class="mi">1</span>
                    <span class="k">while</span> <span class="n">current_num</span> <span class="o">+</span> <span class="mi">1</span> <span class="ow">in</span> <span class="n">num_set</span><span class="p">:</span>
                        <span class="n">current_num</span> <span class="o">+=</span> <span class="mi">1</span>
                        <span class="n">current_streak</span> <span class="o">+=</span> <span class="mi">1</span>
                    <span class="n">longest_streak</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="n">longest_streak</span><span class="p">,</span> <span class="n">current_streak</span><span class="p">)</span>
            <span class="k">return</span> <span class="n">longest_streak</span>
</code></pre></div><h3 id="complexity">Complexity</h3>
<ul>
<li>Time complexity (Zaman Karmaşıklığı): Her bir eleman için, ondan büyük ardışık elemanları aramak için set içinde kontrol yapılır. Ancak her eleman, ardışık dizi içinde sadece bir kez ziyaret edilir. Bu nedenle, toplam zaman karmaşıklığı ortalama O(n)&lsquo;dir.</li>
<li>Space complexity (Alan Karmaşıklığı): Tüm elemanları saklamak için bir set kullanıldığı için alan karmaşıklığı O(n) olur.</li>
</ul>
]]></content>
		</item>
		
		<item>
			<title>Leetcode 168 Excel Sheet Column Title</title>
			<link>https://www.dincerbakkal.com/posts/leetcode168/</link>
			<pubDate>Tue, 08 Jun 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode168/</guid>
			<description>Given an integer columnNumber, return its corresponding column title as it appears in an Excel sheet.
For example:
A -&amp;gt; 1 B -&amp;gt; 2 C -&amp;gt; 3 &amp;hellip; Z -&amp;gt; 26 AA -&amp;gt; 27 AB -&amp;gt; 28 &amp;hellip;
Input: columnNumber = 1 Output: &amp;quot;A&amp;quot; Input: columnNumber = 28 Output: &amp;quot;AB&amp;quot; Input: columnNumber = 701 Output: &amp;quot;ZY&amp;quot;  Soruda bize verilen sayının harf olarak karşılığı isteniyor. Harflerin sayısal karşılıkları A-1 B-2 C-3 &amp;hellip; gidiyor.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>Given an integer columnNumber, return its corresponding column title as it appears in an Excel sheet.</p>
<p>For example:</p>
<p>A -&gt; 1
B -&gt; 2
C -&gt; 3
&hellip;
Z -&gt; 26
AA -&gt; 27
AB -&gt; 28
&hellip;</p>
<!-- raw HTML omitted -->
<pre><code>Input: columnNumber = 1
Output: &quot;A&quot;
</code></pre><!-- raw HTML omitted -->
<pre><code>Input: columnNumber = 28
Output: &quot;AB&quot;
</code></pre><!-- raw HTML omitted -->
<pre><code>Input: columnNumber = 701
Output: &quot;ZY&quot;
</code></pre><!-- raw HTML omitted -->
<ul>
<li>Soruda bize verilen sayının harf olarak karşılığı isteniyor.</li>
<li>Harflerin sayısal karşılıkları A-1 B-2 C-3 &hellip; gidiyor.</li>
</ul>
<p>The problem originates from here:
It is a 26-nary system, but without the &lsquo;0&rsquo;.
A typical 26-nary system would be:</p>
<p>0 -&gt; A
25 -&gt; Z
26 -&gt; BA
However, the excel system actually behaves differently:</p>
<p>1 -&gt; A
26 -&gt; Z
27 -&gt; AA
You could think it for a while and then get the idea why this excel system is actually behaving quite strangly. It is like in a number system in which after 9 it is 00 instead of 10; or like a system without zero: starting with 1, 2.. and after 9 it is 11.
Although the code is quite short and simple, I DO think it is hard to fully understand how this system behaves.</p>
<p>Now, how to solve it:</p>
<p>Equation relationships will help us through the process, and It it not very difficult to derive them. With equations we can understand how to get the n-1 at first of the loop.
The relationship between the string and number is:</p>
<p>for String ABZ and its corresponding number n:
n = (A+1) * 26^2 + (B+1) * 26^1 + (Z+1) * 26^0
Why (A+1)? Because in char system &lsquo;A&rsquo; is 0, but in excel system &lsquo;A&rsquo; is one. Every char get an extra one.</p>
<p>Inorder to get Z, or whatever char is at Z, we will first do a minus 1 on both sides:</p>
<p>both sides -1
n-1 = (A+1) * 26^2 + (B+1) * 26^1 + Z
Then do a %26 we will get Z.</p>
<p>(n-1)%26 =  Z                                                  (1)
(n-1)/26 = (A+1) * 26^1 + (B+1) * 26^0                         (2)
With the above equations, we can understand why we need the n&ndash; at first of every loop:
For each loop, we use (1) to obtain what the current char is.
And we divide n-1 by 26 to get (2), in preparation for the next loop.</p>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python">    <span class="k">def</span> <span class="nf">convertToTitle</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">n</span><span class="p">):</span>
        <span class="s2">&#34;&#34;&#34;
</span><span class="s2">        :type n: int
</span><span class="s2">        :rtype: str
</span><span class="s2">        &#34;&#34;&#34;</span>
        <span class="n">result</span> <span class="o">=</span> <span class="s1">&#39;&#39;</span> <span class="c1">#sonuç</span>
        <span class="n">distance</span> <span class="o">=</span> <span class="nb">ord</span><span class="p">(</span><span class="s1">&#39;A&#39;</span><span class="p">)</span> <span class="c1">#A&#39;nın ACII cinsinden değeri yani 1 dir.</span>

        <span class="k">while</span> <span class="n">n</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>  <span class="c1">#sayımız 28 olsun</span>
            <span class="n">y</span> <span class="o">=</span> <span class="p">(</span><span class="n">n</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span> <span class="o">%</span> <span class="mi">26</span> <span class="c1">#28-1 </span>
            <span class="n">n</span> <span class="o">=</span> <span class="p">(</span><span class="n">n</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span> <span class="o">//</span> <span class="mi">26</span>
            <span class="n">s</span> <span class="o">=</span> <span class="nb">chr</span><span class="p">(</span><span class="n">y</span><span class="o">+</span><span class="n">distance</span><span class="p">)</span>
            <span class="n">result</span> <span class="o">=</span> <span class="s1">&#39;&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">((</span><span class="n">s</span><span class="p">,</span> <span class="n">result</span><span class="p">))</span>

        <span class="k">return</span> <span class="n">result</span>
</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 167 Two Sum II - Input Array Is Sorted</title>
			<link>https://www.dincerbakkal.com/posts/leetcode167/</link>
			<pubDate>Mon, 07 Jun 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode167/</guid>
			<description>Soru Given a 1-indexed array of integers numbers that is already sorted in non-decreasing order, find two numbers such that they add up to a specific target number. Let these two numbers be numbers[index1] and numbers[index2] where 1 &amp;lt;= index1 &amp;lt; index2 &amp;lt;= numbers.length.
Return the indices of the two numbers, index1 and index2, added by one as an integer array [index1, index2] of length 2.
The tests are generated such that there is exactly one solution.</description>
			<content type="html"><![CDATA[<h3 id="soru">Soru</h3>
<p>Given a 1-indexed array of integers numbers that is already sorted in non-decreasing order, find two numbers such that they add up to a specific target number. Let these two numbers be numbers[index1] and numbers[index2] where 1 &lt;= index1 &lt; index2 &lt;= numbers.length.</p>
<p>Return the indices of the two numbers, index1 and index2, added by one as an integer array [index1, index2] of length 2.</p>
<p>The tests are generated such that there is exactly one solution. You may not use the same element twice.</p>
<h3 id="örnek-1">Örnek 1</h3>
<pre><code>Input: numbers = [2,7,11,15], target = 9
Output: [1,2]
Explanation: The sum of 2 and 7 is 9. Therefore, index1 = 1, index2 = 2. We return [1, 2].
</code></pre><h3 id="örnek-2">Örnek 2</h3>
<pre><code>Input: numbers = [2,3,4], target = 6
Output: [1,3]
Explanation: The sum of 2 and 4 is 6. Therefore index1 = 1, index2 = 3. We return [1, 3].
</code></pre><h3 id="örnek-3">Örnek 3</h3>
<pre><code>Input: numbers = [-1,0], target = -1
Output: [1,2]
Explanation: The sum of -1 and 0 is -1. Therefore index1 = 1, index2 = 2. We return [1, 2].
</code></pre><h3 id="çözüm">Çözüm</h3>
<ul>
<li>
<p>LeetCode&rsquo;daki &ldquo;167. Two Sum II - Input Array Is Sorted&rdquo; sorusu, sıralı bir tam sayı dizisinde verilen bir hedef sayıya eşit olacak şekilde iki sayının toplamını bulmanızı ister.</p>
</li>
<li>
<p>Ancak bu versiyonda, sıfırdan başlamayan 1&rsquo;den başlayan dizinleri döndürmeniz istenir.</p>
</li>
<li>
<p>Girdi: Sıralı bir tam sayı dizisi numbers ve bir hedef sayı target.</p>
</li>
<li>
<p>Çıktı: İki sayının toplamı hedef sayıya eşit olduğunda, bu iki sayının dizindeki konumlarını (1&rsquo;den başlayarak) bir liste olarak döndürün.</p>
</li>
<li>
<p>Bu problem için etkili bir çözüm yöntemi, iki işaretçi kullanmaktır. Bu yaklaşımda, bir işaretçi dizinin başında (left) ve diğer işaretçi dizinin sonunda (right) başlar. İki işaretçi birbirine doğru hareket ederken, işaret ettikleri elemanların toplamını hedef sayıyla karşılaştırır.</p>
</li>
<li>
<p>İşaretçilerin İnitialize Edilmesi: left işaretçisi dizinin başında, right işaretçisi ise dizinin sonunda başlar.</p>
</li>
<li>
<p>Toplamın Karşılaştırılması: İşaretçilerin gösterdiği iki değerin toplamı current_sum hesaplanır.</p>
</li>
<li>
<p>Koşul Kontrolü:
Eğer current_sum hedef sayıya (target) eşitse, 1&rsquo;den başlayarak indeksleri döndürülür.
Eğer current_sum hedef sayıdan küçükse, left işaretçisi bir arttırılarak toplamın büyütülmesi sağlanır.
Eğer current_sum hedef sayıdan büyükse, right işaretçisi bir azaltılarak toplamın küçültülmesi sağlanır.</p>
</li>
<li>
<p>Döngü Bitişi: left işaretçisi right işaretçisinden küçük olduğu sürece döngü devam eder.</p>
</li>
<li>
<p>Örneğin [1,2,7,11,15] 9 elde etmek isteyelim.İlk işaretçi 1 de ikinci işaretçi 15 te başlasın.</p>
</li>
<li>
<p>1+15 = 16 hedefimizden büyük o zaman en sağdaki işaretçiyi 1 sola kaydırırız.</p>
</li>
<li>
<p>1+11 = 12 hedefimizden büyük o zaman en sağdaki işaretçiyi 1 sola kaydırırız.</p>
</li>
<li>
<p>1+7 = 8 hedefimizden küçük o zaman en soldaki işaretçiyi 1 sağa kaydırırız.</p>
</li>
<li>
<p>2+7 = 9 hedefimize ulaştık.</p>
</li>
</ul>
<h2 id="code">Code</h2>
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python">    <span class="k">def</span> <span class="nf">twoSum</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">numbers</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">],</span> <span class="n">target</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">]:</span>
        <span class="n">l</span><span class="p">,</span><span class="n">r</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">numbers</span><span class="p">)</span> <span class="o">-</span> <span class="mi">1</span>
        
        <span class="k">while</span> <span class="n">l</span><span class="o">&lt;</span><span class="n">r</span><span class="p">:</span>
            <span class="n">curSum</span> <span class="o">=</span> <span class="n">numbers</span><span class="p">[</span><span class="n">l</span><span class="p">]</span> <span class="o">+</span> <span class="n">numbers</span><span class="p">[</span><span class="n">r</span><span class="p">]</span>
            
            <span class="k">if</span> <span class="n">curSum</span> <span class="o">&gt;</span> <span class="n">target</span><span class="p">:</span>
                <span class="n">r</span><span class="o">-=</span><span class="mi">1</span>
            <span class="k">elif</span> <span class="n">curSum</span> <span class="o">&lt;</span> <span class="n">target</span><span class="p">:</span>
                <span class="n">l</span><span class="o">+=</span><span class="mi">1</span>
            <span class="k">else</span><span class="p">:</span>
                <span class="k">return</span><span class="p">[</span><span class="n">l</span><span class="o">+</span><span class="mi">1</span><span class="p">,</span><span class="n">r</span><span class="o">+</span><span class="mi">1</span><span class="p">]</span>
        <span class="k">return</span> <span class="p">[]</span>
</code></pre></div><h3 id="complexity">Complexity</h3>
<ul>
<li>Time complexity(Zaman Karmaşıklığı): O(n), burada n dizinin uzunluğudur. Dizi en fazla bir kez taranır.</li>
<li>Space complexity(Alan Karmaşıklığı): O(1), çünkü ekstra bir alan kullanılmaz ve yalnızca iki işaretçi ile çözüm sağlanır.</li>
</ul>
]]></content>
		</item>
		
		<item>
			<title>Leetcode 160 Intersection of Two Linked Lists</title>
			<link>https://www.dincerbakkal.com/posts/leetcode160/</link>
			<pubDate>Sun, 06 Jun 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode160/</guid>
			<description>Given the heads of two singly linked-lists headA and headB, return the node at which the two lists intersect. If the two linked lists have no intersection at all, return null.
For example, the following two linked lists begin to intersect at node c1:
 The test cases are generated such that there are no cycles anywhere in the entire linked structure.
Note that the linked lists must retain their original structure after the function returns.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>Given the heads of two singly linked-lists headA and headB, return the node at which the two lists intersect. If the two linked lists have no intersection at all, return null.</p>
<p>For example, the following two linked lists begin to intersect at node c1:</p>
<figure><img src="/image/160ex0.png"
         alt="image"/>
</figure>

<p>The test cases are generated such that there are no cycles anywhere in the entire linked structure.</p>
<p>Note that the linked lists must retain their original structure after the function returns.</p>
<p>Custom Judge:</p>
<p>The inputs to the judge are given as follows (your program is not given these inputs):</p>
<p>intersectVal - The value of the node where the intersection occurs. This is 0 if there is no intersected node.
listA - The first linked list.
listB - The second linked list.
skipA - The number of nodes to skip ahead in listA (starting from the head) to get to the intersected node.
skipB - The number of nodes to skip ahead in listB (starting from the head) to get to the intersected node.
The judge will then create the linked structure based on these inputs and pass the two heads, headA and headB to your program. If you correctly return the intersected node, then your solution will be accepted.</p>
<!-- raw HTML omitted -->
<figure><img src="/image/160ex1.png"
         alt="image"/>
</figure>

<pre><code>Input: intersectVal = 8, listA = [4,1,8,4,5], listB = [5,6,1,8,4,5], skipA = 2, skipB = 3
Output: Intersected at '8'
Explanation: The intersected node's value is 8 (note that this must not be 0 if the two lists intersect).
From the head of A, it reads as [4,1,8,4,5]. From the head of B, it reads as [5,6,1,8,4,5]. There are 2 nodes before the intersected node in A; There are 3 nodes before the intersected node in B.
</code></pre><!-- raw HTML omitted -->
<figure><img src="/image/160ex2.png"
         alt="image"/>
</figure>

<pre><code>Input: intersectVal = 2, listA = [1,9,1,2,4], listB = [3,2,4], skipA = 3, skipB = 1
Output: Intersected at '2'
Explanation: The intersected node's value is 2 (note that this must not be 0 if the two lists intersect).
From the head of A, it reads as [1,9,1,2,4]. From the head of B, it reads as [3,2,4]. There are 3 nodes before the intersected node in A; There are 1 node before the intersected node in B.
</code></pre><!-- raw HTML omitted -->
<figure><img src="/image/160ex3.png"
         alt="image"/>
</figure>

<pre><code>Input: intersectVal = 0, listA = [2,6,4], listB = [1,5], skipA = 3, skipB = 2
Output: No intersection
Explanation: From the head of A, it reads as [2,6,4]. From the head of B, it reads as [1,5]. Since the two lists do not intersect, intersectVal must be 0, while skipA and skipB can be arbitrary values.
Explanation: The two lists do not intersect, so return null.
</code></pre><!-- raw HTML omitted -->
<ul>
<li>Bize iki linked list veriliyor ve bunların kesiştiği node bulmamız isteniyor.Eğer ortak bir node yok ise null dönmemiz isteniyor.</li>
<li>İki bağlantılı liste kesiştiğinde, her ikisinin de geri kalan kısımları aynı olacaktır.</li>
<li>Böylece l2&rsquo;yi l1&rsquo;e ekleriz ve l1&rsquo;i l2&rsquo;ye ekleriz, sonra kesişen kısımlar l1l2 ve l2l1 aynı uzunluktadır ve kalan kısmı kesiştirmek için her iki bağlantılı listenin aynı konumunda kesişen bir düğüm olacaktır.</li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python">    <span class="k">def</span> <span class="nf">getIntersectionNode</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">headA</span><span class="p">:</span> <span class="n">ListNode</span><span class="p">,</span> <span class="n">headB</span><span class="p">:</span> <span class="n">ListNode</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">ListNode</span><span class="p">:</span>
        <span class="n">h1</span> <span class="o">=</span> <span class="n">headA</span>
        <span class="n">h2</span> <span class="o">=</span> <span class="n">headB</span>
        
        <span class="k">while</span> <span class="n">h1</span> <span class="o">!=</span> <span class="n">h2</span><span class="p">:</span>
            <span class="k">if</span> <span class="ow">not</span> <span class="n">h1</span><span class="p">:</span>
                <span class="n">h1</span> <span class="o">=</span> <span class="n">headB</span>
            <span class="k">else</span><span class="p">:</span>
                <span class="n">h1</span> <span class="o">=</span> <span class="n">h1</span><span class="o">.</span><span class="n">next</span>
            
            <span class="k">if</span> <span class="ow">not</span> <span class="n">h2</span><span class="p">:</span>
                <span class="n">h2</span> <span class="o">=</span> <span class="n">headA</span>
            <span class="k">else</span><span class="p">:</span>
                <span class="n">h2</span> <span class="o">=</span> <span class="n">h2</span><span class="o">.</span><span class="n">next</span>
                
        <span class="k">return</span> <span class="n">h1</span>
</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 150 Evaluate Reverse Polish Notation</title>
			<link>https://www.dincerbakkal.com/posts/leetcode150/</link>
			<pubDate>Sat, 05 Jun 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode150/</guid>
			<description>Soru You are given an array of strings tokens that represents an arithmetic expression in a Reverse Polish Notation.
Evaluate the expression. Return an integer that represents the value of the expression.
Note that:
The valid operators are &amp;lsquo;+&amp;rsquo;, &amp;lsquo;-&amp;rsquo;, &amp;lsquo;*&amp;rsquo;, and &amp;lsquo;/&amp;rsquo;. Each operand may be an integer or another expression. The division between two integers always truncates toward zero. There will not be any division by zero. The input represents a valid arithmetic expression in a reverse polish notation.</description>
			<content type="html"><![CDATA[<h3 id="soru">Soru</h3>
<p>You are given an array of strings tokens that represents an arithmetic expression in a Reverse Polish Notation.</p>
<p>Evaluate the expression. Return an integer that represents the value of the expression.</p>
<p>Note that:</p>
<p>The valid operators are &lsquo;+&rsquo;, &lsquo;-&rsquo;, &lsquo;*&rsquo;, and &lsquo;/&rsquo;.
Each operand may be an integer or another expression.
The division between two integers always truncates toward zero.
There will not be any division by zero.
The input represents a valid arithmetic expression in a reverse polish notation.
The answer and all the intermediate calculations can be represented in a 32-bit integer.</p>
<h3 id="örnek-1">Örnek 1</h3>
<pre><code>Input: tokens = [&quot;2&quot;,&quot;1&quot;,&quot;+&quot;,&quot;3&quot;,&quot;*&quot;]
Output: 9
Explanation: ((2 + 1) * 3) = 9
</code></pre><h3 id="örnek-2">Örnek 2</h3>
<pre><code>Input: tokens = [&quot;4&quot;,&quot;13&quot;,&quot;5&quot;,&quot;/&quot;,&quot;+&quot;]
Output: 6
Explanation: (4 + (13 / 5)) = 6
</code></pre><h3 id="örnek-3">Örnek 3</h3>
<pre><code>Input: tokens = [&quot;10&quot;,&quot;6&quot;,&quot;9&quot;,&quot;3&quot;,&quot;+&quot;,&quot;-11&quot;,&quot;*&quot;,&quot;/&quot;,&quot;*&quot;,&quot;17&quot;,&quot;+&quot;,&quot;5&quot;,&quot;+&quot;]
Output: 22
Explanation: ((10 * (6 / ((9 + 3) * -11))) + 17) + 5
= ((10 * (6 / (12 * -11))) + 17) + 5
= ((10 * (6 / -132)) + 17) + 5
= ((10 * 0) + 17) + 5
= (0 + 17) + 5
= 17 + 5
= 22
</code></pre><h3 id="çözüm">Çözüm</h3>
<ul>
<li>Ters Polonyalı gösterimde (veya post-fix notasyonunda) verilen bir dizi operatör ve operandın değerini hesaplamanızı ister. Bu gösterimde, operatörler operandların hemen arkasından gelir, bu da hesaplamayı parantez kullanmadan ve işlem önceliğini dikkate almadan yapmanıza olanak tanır.</li>
<li>Girdi: Bir string dizisi olarak verilen operatörler (+, -, *, /) ve operandlar.</li>
<li>Bu problem genellikle bir yığın (stack) kullanılarak çözülür. Operandlar yığına eklenir; bir operatör geldiğinde, yığından iki operand çıkarılır, operatör bu iki operand üzerinde uygulanır ve sonuç tekrar yığına eklenir. Bu süreç, ifadenin sonuna kadar devam eder.</li>
<li>Çalışma Mekanizması:</li>
<li>Yığın İnitialize Edilmesi: Bir yığın oluşturulur.</li>
<li>İterasyon: Girdi olarak verilen tokenlar üzerinde döngü yapılır.</li>
<li>Operatör Kontrolü: Token bir operatörse, yığından iki eleman çıkarılır ve ilgili aritmetik işlem yapılır. İşlem sonucu yığına geri eklenir.</li>
<li>Operand Kontrolü: Eğer token bir sayıysa, doğrudan yığına eklenir.</li>
<li>Sonuç: İşlemler tamamlandığında, yığındaki son eleman çıkarılır ve bu değer ifadenin sonucu olarak döndürülür.</li>
</ul>
<h2 id="code">Code</h2>
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">evalRPN</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">tokens</span><span class="p">):</span>
        <span class="n">stack</span> <span class="o">=</span> <span class="p">[]</span>
        
        <span class="k">for</span> <span class="n">token</span> <span class="ow">in</span> <span class="n">tokens</span><span class="p">:</span>
            <span class="k">if</span> <span class="n">token</span> <span class="ow">in</span> <span class="s2">&#34;+-*/&#34;</span><span class="p">:</span>
                <span class="n">b</span><span class="p">,</span> <span class="n">a</span> <span class="o">=</span> <span class="n">stack</span><span class="o">.</span><span class="n">pop</span><span class="p">(),</span> <span class="n">stack</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>  <span class="c1"># İkinci çıkan, işlemde ilk operand olmalı</span>
                <span class="k">if</span> <span class="n">token</span> <span class="o">==</span> <span class="s1">&#39;+&#39;</span><span class="p">:</span>
                    <span class="n">stack</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">a</span> <span class="o">+</span> <span class="n">b</span><span class="p">)</span>
                <span class="k">elif</span> <span class="n">token</span> <span class="o">==</span> <span class="s1">&#39;-&#39;</span><span class="p">:</span>
                    <span class="n">stack</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">a</span> <span class="o">-</span> <span class="n">b</span><span class="p">)</span>
                <span class="k">elif</span> <span class="n">token</span> <span class="o">==</span> <span class="s1">&#39;*&#39;</span><span class="p">:</span>
                    <span class="n">stack</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">a</span> <span class="o">*</span> <span class="n">b</span><span class="p">)</span>
                <span class="k">elif</span> <span class="n">token</span> <span class="o">==</span> <span class="s1">&#39;/&#39;</span><span class="p">:</span>
                    <span class="c1"># Python&#39;da tam sayı bölmesi yuvarlama işlemini yukarıya değil, sıfıra doğru yapar</span>
                    <span class="n">stack</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">a</span> <span class="o">/</span> <span class="n">b</span><span class="p">))</span>
            <span class="k">else</span><span class="p">:</span>
                <span class="n">stack</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">token</span><span class="p">))</span>  <span class="c1"># Operand yığına eklenir</span>
        
        <span class="k">return</span> <span class="n">stack</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>  <span class="c1"># Son eleman sonuçtur</span>


</code></pre></div><h3 id="complexity">Complexity</h3>
<ul>
<li>Time complexity (Zaman Karmaşıklığı) : O(n), burada n token dizisinin uzunluğudur. Her token için sabit zaman harcanır.</li>
<li>Space complexity (Alan Karmaşıklığı) : O(n), en kötü durumda tüm tokenlar sayı olabilir ve bunlar yığına eklenir.</li>
</ul>
]]></content>
		</item>
		
		<item>
			<title>Leetcode 155 Min Stack</title>
			<link>https://www.dincerbakkal.com/posts/leetcode155/</link>
			<pubDate>Sat, 05 Jun 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode155/</guid>
			<description>Soru Design a stack that supports push, pop, top, and retrieving the minimum element in constant time.
Implement the MinStack class:
MinStack() initializes the stack object. void push(int val) pushes the element val onto the stack. void pop() removes the element on the top of the stack. int top() gets the top element of the stack. int getMin() retrieves the minimum element in the stack.
Örnek 1 Input [&amp;quot;MinStack&amp;quot;,&amp;quot;push&amp;quot;,&amp;quot;push&amp;quot;,&amp;quot;push&amp;quot;,&amp;quot;getMin&amp;quot;,&amp;quot;pop&amp;quot;,&amp;quot;top&amp;quot;,&amp;quot;getMin&amp;quot;] [[],[-2],[0],[-3],[],[],[],[]] Output [null,null,null,null,-3,null,0,-2] Explanation MinStack minStack = new MinStack(); minStack.</description>
			<content type="html"><![CDATA[<h3 id="soru">Soru</h3>
<p>Design a stack that supports push, pop, top, and retrieving the minimum element in constant time.</p>
<p>Implement the MinStack class:</p>
<p>MinStack() initializes the stack object.
void push(int val) pushes the element val onto the stack.
void pop() removes the element on the top of the stack.
int top() gets the top element of the stack.
int getMin() retrieves the minimum element in the stack.</p>
<h3 id="örnek-1">Örnek 1</h3>
<pre><code>Input
[&quot;MinStack&quot;,&quot;push&quot;,&quot;push&quot;,&quot;push&quot;,&quot;getMin&quot;,&quot;pop&quot;,&quot;top&quot;,&quot;getMin&quot;]
[[],[-2],[0],[-3],[],[],[],[]]

Output
[null,null,null,null,-3,null,0,-2]

Explanation
MinStack minStack = new MinStack();
minStack.push(-2);
minStack.push(0);
minStack.push(-3);
minStack.getMin(); // return -3
minStack.pop();
minStack.top();    // return 0
minStack.getMin(); // return -2
</code></pre><h3 id="çözüm">Çözüm</h3>
<ul>
<li>Belirli işlemleri destekleyen özel bir yığın (stack) tasarımını gerçekleştirmenizi ister. Bu yığın, normal yığın işlevlerinin yanı sıra, yığındaki en küçük elemanı sabit zaman içinde geri döndürebilmelidir.</li>
<li>Min Stack probleminin çözümü, yığın veri yapısı kullanarak yapılır. Ancak, yığının minimum değerini sabit zaman içinde alabilmek için, her elemanın yığınına eklenme anında o ana kadar olan minimum değerle birlikte eklenmesi gerekir. Böylece, yığın elemanları çıkarıldığında bile minimum değer hızlıca elde edilebilir.</li>
<li>Çalışma Mekanizması:</li>
<li>İnitialize: İki yığın kullanılır: stack normal yığın işlemleri için, min_stack ise şu ana kadar görülen minimum değerleri tutar.</li>
<li>Push İşlemi: Yeni bir eleman eklenirken, bu eleman stacke eklenir. Eğer min_stack boşsa veya eklenen eleman min_stackin en üstündeki elemandan küçük veya eşitse, bu eleman ayrıca min_stacke de eklenir.</li>
<li>Pop İşlemi: Eleman çıkarılırken, stackten eleman çıkarılır. Eğer bu eleman min_stackin en üstündeki elemana eşitse, min_stackten de çıkarılır.</li>
<li>Top İşlemi: stackin en üstündeki eleman döndürülür.</li>
<li>GetMin İşlemi: min_stackin en üstündeki eleman, yığının şu ana kadar gördüğü minimum değerdir ve bu değer döndürülür.</li>
</ul>
<h2 id="code">Code</h2>
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">class</span> <span class="nc">MinStack</span><span class="p">:</span>
    <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">stack</span> <span class="o">=</span> <span class="p">[]</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">min_stack</span> <span class="o">=</span> <span class="p">[]</span>

    <span class="k">def</span> <span class="nf">push</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">x</span><span class="p">):</span>
        <span class="c1"># Elemanı normal yığınına ekle</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">stack</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
        <span class="c1"># Min yığınına şu ana kadar olan en küçük elemanı ekle</span>
        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">min_stack</span> <span class="ow">or</span> <span class="n">x</span> <span class="o">&lt;=</span> <span class="bp">self</span><span class="o">.</span><span class="n">min_stack</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]:</span>
            <span class="bp">self</span><span class="o">.</span><span class="n">min_stack</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>

    <span class="k">def</span> <span class="nf">pop</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="c1"># Elemanı normal yığınından çıkar</span>
        <span class="n">popped</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">stack</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
        <span class="c1"># Eğer çıkarılan eleman min yığınının en üstündeyse, min yığınından da çıkar</span>
        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">min_stack</span> <span class="ow">and</span> <span class="n">popped</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">min_stack</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]:</span>
            <span class="bp">self</span><span class="o">.</span><span class="n">min_stack</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>

    <span class="k">def</span> <span class="nf">top</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="c1"># En üstteki elemanı döndür</span>
        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">stack</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>

    <span class="k">def</span> <span class="nf">getMin</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="c1"># Min yığınının en üstündeki elemanı döndür</span>
        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">min_stack</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>

</code></pre></div><h3 id="complexity">Complexity</h3>
<ul>
<li>Time complexity (Zaman Karmaşıklığı) : Tüm işlemler O(1) zaman karmaşıklığına sahiptir.</li>
<li>Space complexity (Alan Karmaşıklığı) : O(n), burada n yığına eklenen eleman sayısıdır. İki yığın kullanıldığı için, ekstra alan gereksinimi vardır.</li>
</ul>
]]></content>
		</item>
		
		<item>
			<title>Leetcode 125 Valid Palindrome</title>
			<link>https://www.dincerbakkal.com/posts/leetcode125/</link>
			<pubDate>Fri, 04 Jun 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode125/</guid>
			<description>Soru A phrase is a palindrome if, after converting all uppercase letters into lowercase letters and removing all non-alphanumeric characters, it reads the same forward and backward. Alphanumeric characters include letters and numbers.
Given a string s, return true if it is a palindrome, or false otherwise.
Örnek 1 Input: s = &amp;quot;A man, a plan, a canal: Panama&amp;quot; Output: true Explanation: &amp;quot;amanaplanacanalpanama&amp;quot; is a palindrome. Örnek 2 Input: s = &amp;quot;race a car&amp;quot; Output: false Explanation: &amp;quot;raceacar&amp;quot; is not a palindrome.</description>
			<content type="html"><![CDATA[<h3 id="soru">Soru</h3>
<p>A phrase is a palindrome if, after converting all uppercase letters into lowercase letters and removing all non-alphanumeric characters, it reads the same forward and backward. Alphanumeric characters include letters and numbers.</p>
<p>Given a string s, return true if it is a palindrome, or false otherwise.</p>
<h3 id="örnek-1">Örnek 1</h3>
<pre><code>Input: s = &quot;A man, a plan, a canal: Panama&quot;
Output: true
Explanation: &quot;amanaplanacanalpanama&quot; is a palindrome.
</code></pre><h3 id="örnek-2">Örnek 2</h3>
<pre><code>Input: s = &quot;race a car&quot;
Output: false
Explanation: &quot;raceacar&quot; is not a palindrome.
</code></pre><h3 id="örnek-3">Örnek 3</h3>
<pre><code>Input: s = &quot; &quot;
Output: true
Explanation: s is an empty string &quot;&quot; after removing non-alphanumeric characters.
Since an empty string reads the same forward and backward, it is a palindrome.
</code></pre><h3 id="çözüm">Çözüm</h3>
<ul>
<li>eetCode&rsquo;un &ldquo;125. Valid Palindrome&rdquo; sorusu, verilen bir stringin, yalnızca alfanümerik karakterleri dikkate alarak ve büyük/küçük harf duyarlılığını göz ardı ederek bir palindrom(düze ve ters okunuşu aynı) olup olmadığını kontrol etmenizi ister.</li>
<li>Bu sorun için en etkili yöntemlerden biri, iki işaretçi kullanmaktır. Bir işaretçi stringin başında, diğer işaretçi ise sonunda başlar. İki işaretçi birbirine doğru hareket ederken, sadece alfanümerik karakterleri kontrol eder ve karşılaştırır.</li>
<li>İşaretçilerin İnitialize Edilmesi: left işaretçisi stringin başında, right işaretçisi ise sonunda başlar.</li>
<li>Alfanümerik Olmayanların Atlaması: Her iki işaretçi için, gösterdikleri karakter alfanümerik değilse, bir sonraki alfanümerik karaktere kadar hareket ederler.</li>
<li>Karakter Karşılaştırması: İşaretçiler alfanümerik bir karaktere işaret ettiğinde, bu karakterler karşılaştırılır. Eğer bir uyuşmazlık varsa, string bir palindrom değildir.</li>
<li>İşaretçilerin Güncellenmesi: Karakterler eşleşiyorsa, left bir arttırılır, right bir azaltılır ve döngü devam eder.</li>
<li>Sonuç: Tüm karşılaştırmalar geçerli ise ve hiçbir çelişki bulunmazsa, string bir palindromdur.</li>
</ul>
<h2 id="code">Code</h2>
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python">    <span class="k">def</span> <span class="nf">isPalindrome</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">s</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
        <span class="n">l</span><span class="p">,</span> <span class="n">r</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">s</span><span class="p">)</span> <span class="o">-</span> <span class="mi">1</span>
        
        <span class="k">while</span> <span class="n">l</span><span class="o">&lt;</span><span class="n">r</span><span class="p">:</span>
            <span class="c1"># Sol işaretçi için alfanümerik olmayanları atla</span>
            <span class="k">while</span> <span class="n">l</span> <span class="o">&lt;</span> <span class="n">r</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">alphaNum</span><span class="p">(</span><span class="n">s</span><span class="p">[</span><span class="n">l</span><span class="p">]):</span>
                <span class="n">l</span> <span class="o">+=</span><span class="mi">1</span>
            <span class="c1"># Sağ işaretçi için alfanümerik olmayanları atla    </span>
            <span class="k">while</span> <span class="n">r</span> <span class="o">&gt;</span> <span class="n">l</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">alphaNum</span><span class="p">(</span><span class="n">s</span><span class="p">[</span><span class="n">r</span><span class="p">]):</span>
                <span class="n">r</span><span class="o">-=</span><span class="mi">1</span>
            <span class="c1"># Karşılaştırma yap, büyük/küçük harf duyarlılığını göz ardı et    </span>
            <span class="k">if</span> <span class="n">s</span><span class="p">[</span><span class="n">l</span><span class="p">]</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="o">!=</span> <span class="n">s</span><span class="p">[</span><span class="n">r</span><span class="p">]</span><span class="o">.</span><span class="n">lower</span><span class="p">():</span>
                <span class="k">return</span> <span class="kc">False</span>
            <span class="n">l</span><span class="p">,</span><span class="n">r</span> <span class="o">=</span> <span class="n">l</span> <span class="o">+</span><span class="mi">1</span><span class="p">,</span><span class="n">r</span><span class="o">-</span><span class="mi">1</span>
        <span class="k">return</span> <span class="kc">True</span>
    
    <span class="k">def</span> <span class="nf">alphaNum</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">c</span><span class="p">):</span>
        <span class="k">return</span><span class="p">(</span><span class="nb">ord</span><span class="p">(</span><span class="s1">&#39;A&#39;</span><span class="p">)</span><span class="o">&lt;=</span><span class="nb">ord</span><span class="p">(</span><span class="n">c</span><span class="p">)</span> <span class="o">&lt;=</span> <span class="nb">ord</span><span class="p">(</span><span class="s1">&#39;Z&#39;</span><span class="p">)</span> <span class="ow">or</span>
               <span class="nb">ord</span><span class="p">(</span><span class="s1">&#39;a&#39;</span><span class="p">)</span><span class="o">&lt;=</span><span class="nb">ord</span><span class="p">(</span><span class="n">c</span><span class="p">)</span> <span class="o">&lt;=</span> <span class="nb">ord</span><span class="p">(</span><span class="s1">&#39;z&#39;</span><span class="p">)</span> <span class="ow">or</span>
               <span class="nb">ord</span><span class="p">(</span><span class="s1">&#39;0&#39;</span><span class="p">)</span><span class="o">&lt;=</span><span class="nb">ord</span><span class="p">(</span><span class="n">c</span><span class="p">)</span> <span class="o">&lt;=</span> <span class="nb">ord</span><span class="p">(</span><span class="s1">&#39;9&#39;</span><span class="p">))</span>
</code></pre></div><h3 id="complexity">Complexity</h3>
<ul>
<li>Time complexity(Zaman Karmaşıklığı): O(n), burada n stringin uzunluğudur. String yalnızca bir kez taranır.</li>
<li>Space complexity(Alan Karmaşıklığı): O(1), çünkü ekstra bir alan kullanılmaz ve sadece birkaç yerel değişken tanımlanır.</li>
</ul>
]]></content>
		</item>
		
		<item>
			<title>Leetcode 118 Pascal&#39;s Triangle</title>
			<link>https://www.dincerbakkal.com/posts/leetcode118/</link>
			<pubDate>Thu, 03 Jun 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode118/</guid>
			<description>Given an integer numRows, return the first numRows of Pascal&amp;rsquo;s triangle.
In Pascal&amp;rsquo;s triangle, each number is the sum of the two numbers directly above it as shown:
 Input: numRows = 5 Output: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]] Input: numRows = 1 Output: [[1]]  Bizden bize verilen n katlı bir pascal üçgeni oluşturmamız isteniyor. Pascal üçgeninde bir değeri üst katındaki iki değerin toplamından bulmaktayız. 1 2 1 -&amp;gt; 1 3 3 1 elde edilir.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>Given an integer numRows, return the first numRows of Pascal&rsquo;s triangle.</p>
<p>In Pascal&rsquo;s triangle, each number is the sum of the two numbers directly above it as shown:</p>
<figure><img src="/image/118EX1.gif"
         alt="image"/>
</figure>

<!-- raw HTML omitted -->
<pre><code>Input: numRows = 5
Output: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]
</code></pre><!-- raw HTML omitted -->
<pre><code>Input: numRows = 1
Output: [[1]]
</code></pre><!-- raw HTML omitted -->
<ul>
<li>Bizden bize verilen n katlı bir pascal üçgeni oluşturmamız isteniyor.</li>
<li>Pascal üçgeninde bir değeri üst katındaki iki değerin toplamından bulmaktayız.</li>
<li>1 2 1 -&gt; 1 3 3 1 elde edilir.</li>
<li>Bunu yapabilmek için bir katı hesaplarken üst katının başına ve sonuna 0 eklememiz işimizi kolaylaştırır.</li>
<li>0 1 2 1 0 bu şekilde toplamaları yaparak bir sonraki katı buluruz.</li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python">    <span class="k">def</span> <span class="nf">generate</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">numRows</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">List</span><span class="p">[</span><span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">]]:</span>
        <span class="n">res</span> <span class="o">=</span> <span class="p">[[</span><span class="mi">1</span><span class="p">]]</span> <span class="c1">#ilk kat hep aynı</span>
        
        <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">numRows</span> <span class="o">-</span> <span class="mi">1</span><span class="p">):</span>
            <span class="n">temp</span> <span class="o">=</span> <span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="n">res</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">+</span> <span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="c1">#sol ve sağa 0 ları ekleriz.</span>
            <span class="n">row</span> <span class="o">=</span> <span class="p">[]</span>
            
            <span class="k">for</span> <span class="n">j</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">res</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">])</span><span class="o">+</span><span class="mi">1</span><span class="p">):</span>
                <span class="n">row</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">temp</span><span class="p">[</span><span class="n">j</span><span class="p">]</span> <span class="o">+</span> <span class="n">temp</span><span class="p">[</span><span class="n">j</span><span class="o">+</span><span class="mi">1</span><span class="p">])</span>
            <span class="n">res</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">row</span><span class="p">)</span>
        <span class="k">return</span> <span class="n">res</span>
</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 108 Convert Sorted Array to Binary Search Tree</title>
			<link>https://www.dincerbakkal.com/posts/leetcode108/</link>
			<pubDate>Wed, 02 Jun 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode108/</guid>
			<description>Given an integer array nums where the elements are sorted in ascending order, convert it to a height-balanced binary search tree.
A height-balanced binary tree is a binary tree in which the depth of the two subtrees of every node never differs by more than one.
 Input: nums = [-10,-3,0,5,9] Output: [0,-3,9,-10,null,5]  Input: nums = [1,3] Output: [3,1]  Açıklama eklenecek.  def sortedArrayToBST(self, nums: List[int]) -&amp;gt; Optional[TreeNode]: def helper(l,r): if l&amp;gt;r: return None m=(l+r)//2 root = TreeNode(nums[m]) root.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>Given an integer array nums where the elements are sorted in ascending order, convert it to a height-balanced binary search tree.</p>
<p>A height-balanced binary tree is a binary tree in which the depth of the two subtrees of every node never differs by more than one.</p>
<!-- raw HTML omitted -->
<figure><img src="/image/108EX1.jpg"
         alt="image"/>
</figure>

<pre><code>Input: nums = [-10,-3,0,5,9]
Output: [0,-3,9,-10,null,5]
</code></pre><!-- raw HTML omitted -->
<figure><img src="/image/108EX2.jpg"
         alt="image"/>
</figure>

<pre><code>Input: nums = [1,3]
Output: [3,1]
</code></pre><!-- raw HTML omitted -->
<ul>
<li>Açıklama eklenecek.</li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python">    <span class="k">def</span> <span class="nf">sortedArrayToBST</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">nums</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">Optional</span><span class="p">[</span><span class="n">TreeNode</span><span class="p">]:</span>
        <span class="k">def</span> <span class="nf">helper</span><span class="p">(</span><span class="n">l</span><span class="p">,</span><span class="n">r</span><span class="p">):</span>
            <span class="k">if</span> <span class="n">l</span><span class="o">&gt;</span><span class="n">r</span><span class="p">:</span>
                <span class="k">return</span> <span class="kc">None</span>
            <span class="n">m</span><span class="o">=</span><span class="p">(</span><span class="n">l</span><span class="o">+</span><span class="n">r</span><span class="p">)</span><span class="o">//</span><span class="mi">2</span>
            <span class="n">root</span> <span class="o">=</span> <span class="n">TreeNode</span><span class="p">(</span><span class="n">nums</span><span class="p">[</span><span class="n">m</span><span class="p">])</span>
            <span class="n">root</span><span class="o">.</span><span class="n">left</span> <span class="o">=</span> <span class="n">helper</span><span class="p">(</span><span class="n">l</span><span class="p">,</span><span class="n">m</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span>
            <span class="n">root</span><span class="o">.</span><span class="n">right</span><span class="o">=</span> <span class="n">helper</span><span class="p">(</span><span class="n">m</span><span class="o">+</span><span class="mi">1</span><span class="p">,</span><span class="n">r</span><span class="p">)</span>
            <span class="k">return</span> <span class="n">root</span>
            
        <span class="k">return</span> <span class="n">helper</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="nb">len</span><span class="p">(</span><span class="n">nums</span><span class="p">)</span> <span class="o">-</span><span class="mi">1</span><span class="p">)</span>
</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 110 Balanced Binary Tree</title>
			<link>https://www.dincerbakkal.com/posts/leetcode110/</link>
			<pubDate>Tue, 01 Jun 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode110/</guid>
			<description>Soru Given a binary tree, determine if it is height-balanced.
For this problem, a height-balanced binary tree is defined as:
a binary tree in which the left and right subtrees of every node differ in height by no more than 1.
Örnek 1  Input: root = [3,9,20,null,null,15,7] Output: true Örnek 2  Input: root = [1,2,2,3,3,null,null,4,4] Output: false Örnek 3 Input: root = [] Output: true Çözüm  LeetCode 110.</description>
			<content type="html"><![CDATA[<h3 id="soru">Soru</h3>
<p>Given a binary tree, determine if it is height-balanced.</p>
<p>For this problem, a height-balanced binary tree is defined as:</p>
<p>a binary tree in which the left and right subtrees of every node differ in height by no more than 1.</p>
<h3 id="örnek-1">Örnek 1</h3>
<figure><img src="/image/110EX1.jpg"
         alt="image"/>
</figure>

<pre><code>Input: root = [3,9,20,null,null,15,7]
Output: true
</code></pre><h3 id="örnek-2">Örnek 2</h3>
<figure><img src="/image/110EX2.jpg"
         alt="image"/>
</figure>

<pre><code>Input: root = [1,2,2,3,3,null,null,4,4]
Output: false
</code></pre><h3 id="örnek-3">Örnek 3</h3>
<pre><code>Input: root = []
Output: true
</code></pre><h3 id="çözüm">Çözüm</h3>
<ul>
<li>LeetCode 110. Balanced Binary Tree sorusunu biliyorum! Bu problem, bir ikili ağacın dengeli (balanced) olup olmadığını belirlememizi istiyor.</li>
<li>Girdi: Bir ikili ağacın kök düğümü (root).</li>
<li>Çıktı: Eğer ağaç dengeli ise True, değilse False döndür.</li>
<li>Bir ikili ağaç şu koşulu sağlıyorsa dengeli (balanced) kabul edilir: Her düğüm için sol ve sağ alt ağaçların maksimum derinlik farkı en fazla 1 olmalıdır.</li>
<li>Bu soruyu DFS (derinlik öncelikli arama) kullanarak çözebiliriz.Her düğüm için sol ve sağ alt ağaçların derinliğini hesaplarız ve farkı kontrol ederiz.</li>
<li>Çözüm Açıklaması</li>
<li>DFS kullanarak her düğüm için derinlik hesaplanır.</li>
<li>Alt ağaçlardan biri dengesizse, -1 döndürülerek yukarıya iletilir.</li>
<li>Her düğümde sol ve sağ derinlik farkı hesaplanır.</li>
<li>Eğer |left - right| &gt; 1 ise dengesizdir ve -1 döndürülür.</li>
<li>DFS çağrısı bittiğinde, -1 döndürülmemişse ağaç dengelidir.</li>
</ul>
<h2 id="code">Code</h2>
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">class</span> <span class="nc">TreeNode</span><span class="p">:</span>
    <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">val</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">left</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">right</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">val</span> <span class="o">=</span> <span class="n">val</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">left</span> <span class="o">=</span> <span class="n">left</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">right</span> <span class="o">=</span> <span class="n">right</span>

<span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">isBalanced</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">root</span><span class="p">:</span> <span class="n">TreeNode</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
        <span class="k">def</span> <span class="nf">dfs</span><span class="p">(</span><span class="n">node</span><span class="p">):</span>
            <span class="k">if</span> <span class="ow">not</span> <span class="n">node</span><span class="p">:</span>
                <span class="k">return</span> <span class="mi">0</span>
            
            <span class="n">left</span> <span class="o">=</span> <span class="n">dfs</span><span class="p">(</span><span class="n">node</span><span class="o">.</span><span class="n">left</span><span class="p">)</span>
            <span class="n">right</span> <span class="o">=</span> <span class="n">dfs</span><span class="p">(</span><span class="n">node</span><span class="o">.</span><span class="n">right</span><span class="p">)</span>

            <span class="c1"># Eğer bir alt ağaç dengesizse, -1 döndürerek dengesizliği yukarı ilet</span>
            <span class="k">if</span> <span class="n">left</span> <span class="o">==</span> <span class="o">-</span><span class="mi">1</span> <span class="ow">or</span> <span class="n">right</span> <span class="o">==</span> <span class="o">-</span><span class="mi">1</span> <span class="ow">or</span> <span class="nb">abs</span><span class="p">(</span><span class="n">left</span> <span class="o">-</span> <span class="n">right</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">:</span>
                <span class="k">return</span> <span class="o">-</span><span class="mi">1</span>
            
            <span class="k">return</span> <span class="nb">max</span><span class="p">(</span><span class="n">left</span><span class="p">,</span> <span class="n">right</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1</span>
        
        <span class="k">return</span> <span class="n">dfs</span><span class="p">(</span><span class="n">root</span><span class="p">)</span> <span class="o">!=</span> <span class="o">-</span><span class="mi">1</span>

</code></pre></div><h3 id="complexity">Complexity</h3>
<ul>
<li>Time complexity (Zaman Karmaşıklığı) : O(n) → Her düğüm bir kez ziyaret edilir.</li>
<li>Space complexity (Alan Karmaşıklığı):
<ul>
<li>Dengeli ağaçta O(log n) → Özyineleme derinliği ağacın yüksekliği kadardır.</li>
<li>Dengesiz ağaçta O(n) → Kötü durumda (tek taraflı ağaç) derinlik n olabilir.</li>
</ul>
</li>
</ul>
]]></content>
		</item>
		
		<item>
			<title>Leetcode 088 Merge Sorted Array</title>
			<link>https://www.dincerbakkal.com/posts/leetcode088/</link>
			<pubDate>Thu, 27 May 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode088/</guid>
			<description>You are given two integer arrays nums1 and nums2, sorted in non-decreasing order, and two integers m and n, representing the number of elements in nums1 and nums2 respectively.
Merge nums1 and nums2 into a single array sorted in non-decreasing order.
The final sorted array should not be returned by the function, but instead be stored inside the array nums1. To accommodate this, nums1 has a length of m + n, where the first m elements denote the elements that should be merged, and the last n elements are set to 0 and should be ignored.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>You are given two integer arrays nums1 and nums2, sorted in non-decreasing order, and two integers m and n, representing the number of elements in nums1 and nums2 respectively.</p>
<p>Merge nums1 and nums2 into a single array sorted in non-decreasing order.</p>
<p>The final sorted array should not be returned by the function, but instead be stored inside the array nums1. To accommodate this, nums1 has a length of m + n, where the first m elements denote the elements that should be merged, and the last n elements are set to 0 and should be ignored. nums2 has a length of n.</p>
<!-- raw HTML omitted -->
<pre><code>Input: nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3
Output: [1,2,2,3,5,6]
Explanation: The arrays we are merging are [1,2,3] and [2,5,6].
The result of the merge is [1,2,2,3,5,6] with the underlined elements coming from nums1.
</code></pre><!-- raw HTML omitted -->
<pre><code>Input: nums1 = [1], m = 1, nums2 = [], n = 0
Output: [1]
Explanation: The arrays we are merging are [1] and [].
The result of the merge is [1].
</code></pre><!-- raw HTML omitted -->
<pre><code>Input: nums1 = [0], m = 0, nums2 = [1], n = 1
Output: [1]
Explanation: The arrays we are merging are [] and [1].
The result of the merge is [1].
Note that because m = 0, there are no elements in nums1. The 0 is only there to ensure the merge result can fit in nums1.
</code></pre><!-- raw HTML omitted -->
<ul>
<li>Soruda bize iki array veriliyor.Birinci array nums1 = [1,2,3,0,0,0], m = 3 ikinci array nums2 = [2,5,6], n = 3.</li>
<li>Bizden nums2 arrayi nums1 içine yerleştirmemiz isteniyor.</li>
<li>İki işaretçi kullanarak soruyu çözebiliriz.</li>
<li>En sondan başlayarak sayıları karşılaştırıp son indekse yerleştiririz.</li>
<li>Eğer nums2 içinde sayı kaldı ise onları da nums1 boş kalan yerlere yerleştiririz.</li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python">    <span class="k">def</span> <span class="nf">merge</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">nums1</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">],</span> <span class="n">m</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span> <span class="n">nums2</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">],</span> <span class="n">n</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
        <span class="s2">&#34;&#34;&#34;
</span><span class="s2">        Do not return anything, modify nums1 in-place instead.
</span><span class="s2">        &#34;&#34;&#34;</span>
       
        <span class="n">last</span> <span class="o">=</span> <span class="n">m</span> <span class="o">+</span> <span class="n">n</span> <span class="o">-</span><span class="mi">1</span>  <span class="c1"># nums1 içindeki son indeks</span>
        <span class="n">m</span><span class="o">-=</span><span class="mi">1</span>             <span class="c1"># nums1 son indeks</span>
        <span class="n">n</span><span class="o">-=</span><span class="mi">1</span>             <span class="c1"># nums2 aon indeks</span>
        
        <span class="c1">#en sondan başlayarak sayıları karşılaştırıp son indekse yerleştiririz.</span>
        <span class="k">while</span> <span class="n">m</span><span class="o">&gt;=</span><span class="mi">0</span> <span class="ow">and</span> <span class="n">n</span><span class="o">&gt;=</span><span class="mi">0</span><span class="p">:</span>
            <span class="k">if</span> <span class="n">nums1</span><span class="p">[</span><span class="n">m</span><span class="p">]</span><span class="o">&gt;</span><span class="n">nums2</span><span class="p">[</span><span class="n">n</span><span class="p">]:</span>
                <span class="n">nums1</span><span class="p">[</span><span class="n">last</span><span class="p">]</span> <span class="o">=</span> <span class="n">nums1</span><span class="p">[</span><span class="n">m</span><span class="p">]</span>
                <span class="n">last</span><span class="o">-=</span><span class="mi">1</span>
                <span class="n">m</span><span class="o">-=</span><span class="mi">1</span>
            <span class="k">else</span><span class="p">:</span>
                <span class="n">nums1</span><span class="p">[</span><span class="n">last</span><span class="p">]</span> <span class="o">=</span> <span class="n">nums2</span><span class="p">[</span><span class="n">n</span><span class="p">]</span>
                <span class="n">last</span> <span class="o">-=</span> <span class="mi">1</span>
                <span class="n">n</span><span class="o">-=</span><span class="mi">1</span>
            
            
        <span class="c1">#Eğer nums2 içinde sayı kaldı ise onları da nums1 boş kalan yerlere yerleştiririz.</span>
        <span class="k">while</span> <span class="n">n</span><span class="o">&gt;=</span><span class="mi">0</span><span class="p">:</span>
            <span class="n">nums1</span><span class="p">[</span><span class="n">last</span><span class="p">]</span> <span class="o">=</span> <span class="n">nums2</span><span class="p">[</span><span class="n">n</span><span class="p">]</span>
            <span class="n">n</span><span class="p">,</span><span class="n">last</span> <span class="o">=</span> <span class="n">n</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="n">last</span><span class="o">-</span><span class="mi">1</span>
</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 101 Symmetric Tree</title>
			<link>https://www.dincerbakkal.com/posts/leetcode101/</link>
			<pubDate>Thu, 27 May 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode101/</guid>
			<description>Given the root of a binary tree, check whether it is a mirror of itself (i.e., symmetric around its center).
 Input: root = [1,2,2,3,4,4,3] Output: true  Input: root = [1,2,2,null,3,null,3] Output: false  Soruda bize bir binary tree veriliyor ve bu treenin sağ ve sol kollarının simetrik olup olmadığı soruluyor. Sağ ve sol kollar için rekürsif olarak simetrik olup olmadığını kontrol ederek soruyu çözebiliriz.    Resimde görüleceği gibi birinci simetri kontrolü için solun solu ve sağın sağı, ikinci simetri kontrolü için solun sağı ve sağın solu kontrol edilir.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>Given the root of a binary tree, check whether it is a mirror of itself (i.e., symmetric around its center).</p>
<!-- raw HTML omitted -->
<pre><code><figure><img src="/image/101ex1.jpg"
         alt="image"/>
</figure>


Input: root = [1,2,2,3,4,4,3]
Output: true
</code></pre><!-- raw HTML omitted -->
<pre><code><figure><img src="/image/101ex2.jpg"
         alt="image"/>
</figure>

Input: root = [1,2,2,null,3,null,3]
Output: false
</code></pre><!-- raw HTML omitted -->
<ul>
<li>Soruda bize bir binary tree veriliyor ve bu treenin sağ ve sol kollarının simetrik olup olmadığı soruluyor.</li>
<li>Sağ ve sol kollar için rekürsif olarak simetrik olup olmadığını kontrol ederek soruyu çözebiliriz.</li>
</ul>
<figure><img src="/image/101sol1.jpg"
         alt="image"/>
</figure>

<ul>
<li>Resimde görüleceği gibi birinci simetri kontrolü için solun solu ve sağın sağı, ikinci simetri kontrolü için solun sağı ve sağın solu kontrol edilir.</li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="c1"># Definition for a binary tree node.</span>
<span class="c1"># class TreeNode:</span>
<span class="c1">#     def __init__(self, val=0, left=None, right=None):</span>
<span class="c1">#         self.val = val</span>
<span class="c1">#         self.left = left</span>
<span class="c1">#         self.right = right</span>
<span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">isSymmetric</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">root</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">TreeNode</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
        <span class="k">if</span> <span class="ow">not</span> <span class="n">root</span><span class="p">:</span>
            <span class="k">return</span> <span class="kc">True</span> <span class="c1">#kök yok ise true dön</span>
        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">IsSymetric</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">left</span><span class="p">,</span><span class="n">root</span><span class="o">.</span><span class="n">right</span><span class="p">)</span> <span class="c1">#simetrik kontrol eden programı çağır</span>
    
    <span class="k">def</span> <span class="nf">IsSymetric</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">left</span><span class="p">,</span><span class="n">right</span><span class="p">):</span>
        <span class="k">if</span> <span class="n">left</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">or</span> <span class="n">right</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span> <span class="c1">#sağ ve sol node boş ise true dön</span>
            <span class="k">return</span> <span class="n">left</span><span class="o">==</span><span class="n">right</span>
        <span class="k">if</span> <span class="n">left</span><span class="o">.</span><span class="n">val</span> <span class="o">!=</span><span class="n">right</span><span class="o">.</span><span class="n">val</span><span class="p">:</span> <span class="c1">#sağ ve sol node birbirine eşit deği ise false dön </span>
            <span class="k">return</span> <span class="kc">False</span>
        <span class="n">outPair</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">IsSymetric</span><span class="p">(</span><span class="n">left</span><span class="o">.</span><span class="n">left</span><span class="p">,</span><span class="n">right</span><span class="o">.</span><span class="n">right</span><span class="p">)</span> <span class="c1">#simetri kontrolü için solun solunu ve sağın sağını çağır </span>
        <span class="n">inPiar</span>  <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">IsSymetric</span><span class="p">(</span><span class="n">left</span><span class="o">.</span><span class="n">right</span><span class="p">,</span><span class="n">right</span><span class="o">.</span><span class="n">left</span><span class="p">)</span> <span class="c1">#simetri kontrolü için solun sağını ve sağın solunu çağır</span>
        
        <span class="k">return</span> <span class="n">outPair</span> <span class="ow">and</span> <span class="n">inPiar</span> <span class="c1">#ikisi de true ise true döner</span>
</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 069 Sqrt(x)</title>
			<link>https://www.dincerbakkal.com/posts/leetcode069/</link>
			<pubDate>Wed, 26 May 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode069/</guid>
			<description>Given a non-negative integer x, compute and return the square root of x.
Since the return type is an integer, the decimal digits are truncated, and only the integer part of the result is returned.
Note: You are not allowed to use any built-in exponent function or operator, such as pow(x, 0.5) or x ** 0.5.
Input: x = 4 Output: 2 Input: x = 8 Output: 2 Explanation: The square root of 8 is 2.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>Given a non-negative integer x, compute and return the square root of x.</p>
<p>Since the return type is an integer, the decimal digits are truncated, and only the integer part of the result is returned.</p>
<p>Note: You are not allowed to use any built-in exponent function or operator, such as pow(x, 0.5) or x ** 0.5.</p>
<!-- raw HTML omitted -->
<pre><code>Input: x = 4
Output: 2
</code></pre><!-- raw HTML omitted -->
<pre><code>Input: x = 8
Output: 2
Explanation: The square root of 8 is 2.82842..., and since the decimal part is truncated, 2 is returned.
</code></pre><!-- raw HTML omitted -->
<ul>
<li>Soruda bize verilen int değerin karekökünün tam değerini dönmemiz isteniyor.</li>
<li>Bunun için binary search kullanabiliriz.</li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python">    <span class="k">def</span> <span class="nf">mySqrt</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">x</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
        <span class="n">l</span><span class="p">,</span> <span class="n">r</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span> <span class="n">x</span>
        <span class="k">while</span> <span class="n">l</span> <span class="o">&lt;=</span> <span class="n">r</span><span class="p">:</span>
            <span class="n">mid</span> <span class="o">=</span> <span class="n">l</span> <span class="o">+</span> <span class="p">(</span><span class="n">r</span><span class="o">-</span><span class="n">l</span><span class="p">)</span><span class="o">//</span><span class="mi">2</span>
            <span class="k">if</span> <span class="n">mid</span> <span class="o">*</span> <span class="n">mid</span> <span class="o">&lt;=</span> <span class="n">x</span> <span class="o">&lt;</span> <span class="p">(</span><span class="n">mid</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span><span class="o">*</span><span class="p">(</span><span class="n">mid</span><span class="o">+</span><span class="mi">1</span><span class="p">):</span>
                <span class="k">return</span> <span class="n">mid</span>
            <span class="k">elif</span> <span class="n">x</span> <span class="o">&lt;</span> <span class="n">mid</span> <span class="o">*</span> <span class="n">mid</span><span class="p">:</span>
                <span class="n">r</span> <span class="o">=</span> <span class="n">mid</span> <span class="o">-</span> <span class="mi">1</span>
            <span class="k">else</span><span class="p">:</span>
                <span class="n">l</span> <span class="o">=</span> <span class="n">mid</span> <span class="o">+</span> <span class="mi">1</span>
</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 067 Add Binary</title>
			<link>https://www.dincerbakkal.com/posts/leetcode067/</link>
			<pubDate>Tue, 25 May 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode067/</guid>
			<description>Given two binary strings a and b, return their sum as a binary string.
Input: a = &amp;quot;11&amp;quot;, b = &amp;quot;1&amp;quot; Output: &amp;quot;100&amp;quot; Input: a = &amp;quot;1010&amp;quot;, b = &amp;quot;1011&amp;quot; Output: &amp;quot;10101&amp;quot;  Eklenecek  def addBinary(self, a: str, b: str) -&amp;gt; str: res = &amp;#34;&amp;#34; carry = 0 a, b = a[::-1], b[::-1] for i in range(max(len(a), len(b))): digitA = ord(a[i]) - ord(&amp;#34;0&amp;#34;) if i &amp;lt; len(a) else 0 digitB = ord(b[i]) - ord(&amp;#34;0&amp;#34;) if i &amp;lt; len(b) else 0 total = digitA + digitB + carry char = str(total%2) res = char + res carry = total // 2 if carry: res = &amp;#34;1&amp;#34; + res return res </description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>Given two binary strings a and b, return their sum as a binary string.</p>
<!-- raw HTML omitted -->
<pre><code>Input: a = &quot;11&quot;, b = &quot;1&quot;
Output: &quot;100&quot;
</code></pre><!-- raw HTML omitted -->
<pre><code>Input: a = &quot;1010&quot;, b = &quot;1011&quot;
Output: &quot;10101&quot;
</code></pre><!-- raw HTML omitted -->
<ul>
<li>Eklenecek</li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python">    <span class="k">def</span> <span class="nf">addBinary</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">a</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">b</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
        <span class="n">res</span> <span class="o">=</span> <span class="s2">&#34;&#34;</span>
        <span class="n">carry</span> <span class="o">=</span> <span class="mi">0</span>
        
        <span class="n">a</span><span class="p">,</span> <span class="n">b</span> <span class="o">=</span> <span class="n">a</span><span class="p">[::</span><span class="o">-</span><span class="mi">1</span><span class="p">],</span> <span class="n">b</span><span class="p">[::</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
        
        <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">max</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">a</span><span class="p">),</span> <span class="nb">len</span><span class="p">(</span><span class="n">b</span><span class="p">))):</span>
            <span class="n">digitA</span> <span class="o">=</span> <span class="nb">ord</span><span class="p">(</span><span class="n">a</span><span class="p">[</span><span class="n">i</span><span class="p">])</span> <span class="o">-</span> <span class="nb">ord</span><span class="p">(</span><span class="s2">&#34;0&#34;</span><span class="p">)</span> <span class="k">if</span> <span class="n">i</span> <span class="o">&lt;</span> <span class="nb">len</span><span class="p">(</span><span class="n">a</span><span class="p">)</span> <span class="k">else</span> <span class="mi">0</span>
            <span class="n">digitB</span> <span class="o">=</span> <span class="nb">ord</span><span class="p">(</span><span class="n">b</span><span class="p">[</span><span class="n">i</span><span class="p">])</span> <span class="o">-</span> <span class="nb">ord</span><span class="p">(</span><span class="s2">&#34;0&#34;</span><span class="p">)</span> <span class="k">if</span> <span class="n">i</span> <span class="o">&lt;</span> <span class="nb">len</span><span class="p">(</span><span class="n">b</span><span class="p">)</span> <span class="k">else</span> <span class="mi">0</span>
            
            <span class="n">total</span> <span class="o">=</span> <span class="n">digitA</span> <span class="o">+</span> <span class="n">digitB</span> <span class="o">+</span> <span class="n">carry</span>
            <span class="n">char</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">total</span><span class="o">%</span><span class="mi">2</span><span class="p">)</span>
            <span class="n">res</span> <span class="o">=</span> <span class="n">char</span> <span class="o">+</span> <span class="n">res</span>
            <span class="n">carry</span> <span class="o">=</span> <span class="n">total</span> <span class="o">//</span> <span class="mi">2</span>
        
        <span class="k">if</span> <span class="n">carry</span><span class="p">:</span>
            <span class="n">res</span> <span class="o">=</span> <span class="s2">&#34;1&#34;</span> <span class="o">+</span> <span class="n">res</span>
        <span class="k">return</span> <span class="n">res</span>
</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 014 Longest Common Prefix</title>
			<link>https://www.dincerbakkal.com/posts/leetcode014/</link>
			<pubDate>Mon, 24 May 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode014/</guid>
			<description>Write a function to find the longest common prefix string amongst an array of strings.
If there is no common prefix, return an empty string &amp;ldquo;&amp;rdquo;.
Input: strs = [&amp;quot;flower&amp;quot;,&amp;quot;flow&amp;quot;,&amp;quot;flight&amp;quot;] Output: &amp;quot;fl&amp;quot; Input: strs = [&amp;quot;dog&amp;quot;,&amp;quot;racecar&amp;quot;,&amp;quot;car&amp;quot;] Output: &amp;quot;&amp;quot; Explanation: There is no common prefix among the input strings.  Soruda bir string listesi veriliyor ve bu listedeki kelimelerin en uzun ortak başlangıç harfleri soruluyor. Yapmamız gereken ilk elemanın harflerini diğer kelimelerin harfleri ile karşılaştırmak.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>Write a function to find the longest common prefix string amongst an array of strings.</p>
<p>If there is no common prefix, return an empty string &ldquo;&rdquo;.</p>
<!-- raw HTML omitted -->
<pre><code>Input: strs = [&quot;flower&quot;,&quot;flow&quot;,&quot;flight&quot;]
Output: &quot;fl&quot;
</code></pre><!-- raw HTML omitted -->
<pre><code>Input: strs = [&quot;dog&quot;,&quot;racecar&quot;,&quot;car&quot;]
Output: &quot;&quot;
Explanation: There is no common prefix among the input strings.
</code></pre><!-- raw HTML omitted -->
<ul>
<li>Soruda bir string listesi veriliyor ve bu listedeki kelimelerin en uzun ortak başlangıç harfleri soruluyor.</li>
<li>Yapmamız gereken ilk elemanın harflerini diğer kelimelerin harfleri ile karşılaştırmak.</li>
<li>Dikkat edilmesi gereken eğer elimizdeki kelimenin harfleri biterse diye onun uzunluğunuda kontrol ederek gitmek.</li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python">    <span class="k">def</span> <span class="nf">longestCommonPrefix</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">strs</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
        <span class="n">res</span> <span class="o">=</span> <span class="s2">&#34;&#34;</span>
        
        <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">strs</span><span class="p">[</span><span class="mi">0</span><span class="p">])):</span>
            <span class="k">for</span> <span class="n">s</span> <span class="ow">in</span> <span class="n">strs</span><span class="p">:</span>
                <span class="k">if</span> <span class="n">i</span><span class="o">==</span><span class="nb">len</span><span class="p">(</span><span class="n">s</span><span class="p">)</span> <span class="ow">or</span> <span class="n">s</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">!=</span> <span class="n">strs</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="n">i</span><span class="p">]:</span>
                    <span class="k">return</span> <span class="n">res</span>
            
            <span class="n">res</span><span class="o">+=</span><span class="n">strs</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="n">i</span><span class="p">]</span>
        
        <span class="k">return</span> <span class="n">res</span>
</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 066 Plus One</title>
			<link>https://www.dincerbakkal.com/posts/leetcode066/</link>
			<pubDate>Mon, 24 May 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode066/</guid>
			<description>You are given a large integer represented as an integer array digits, where each digits[i] is the ith digit of the integer. The digits are ordered from most significant to least significant in left-to-right order. The large integer does not contain any leading 0&amp;rsquo;s.
Increment the large integer by one and return the resulting array of digits.
Input: digits = [1,2,3] Output: [1,2,4] Explanation: The array represents the integer 123. Incrementing by one gives 123 + 1 = 124.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>You are given a large integer represented as an integer array digits, where each digits[i] is the ith digit of the integer. The digits are ordered from most significant to least significant in left-to-right order. The large integer does not contain any leading 0&rsquo;s.</p>
<p>Increment the large integer by one and return the resulting array of digits.</p>
<!-- raw HTML omitted -->
<pre><code>Input: digits = [1,2,3]
Output: [1,2,4]
Explanation: The array represents the integer 123.
Incrementing by one gives 123 + 1 = 124.
Thus, the result should be [1,2,4].
</code></pre><!-- raw HTML omitted -->
<pre><code>Input: digits = [9]
Output: [1,0]
Explanation: The array represents the integer 9.
Incrementing by one gives 9 + 1 = 10.
Thus, the result should be [1,0].
</code></pre><!-- raw HTML omitted -->
<ul>
<li>Soruda string olarak bir sayı veriliyor ve ona 1 eklememiz isteniyor.</li>
<li>Bazı durumları göz önüne almalıyız mesela 9 rakamına 1 eklersek 10 olur gibi.</li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python">    <span class="k">def</span> <span class="nf">plusOne</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">digits</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">]:</span>
        <span class="n">digits</span> <span class="o">=</span> <span class="n">digits</span><span class="p">[::</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="c1">#listeyi ters çeviririz</span>
        <span class="n">one</span><span class="p">,</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">0</span> <span class="c1">#one dediğimiz bir kontrol değeri oluştururuz bu bizi eldemiz i de sayaç</span>
        
        <span class="k">while</span> <span class="n">one</span><span class="p">:</span> <span class="c1">#one =1 oldukça devam et</span>
            <span class="k">if</span> <span class="n">i</span> <span class="o">&lt;</span> <span class="nb">len</span><span class="p">(</span><span class="n">digits</span><span class="p">):</span> <span class="c1">#eğer i listenin uzunluğundan düşük ise </span>
                <span class="k">if</span> <span class="n">digits</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">==</span> <span class="mi">9</span><span class="p">:</span> <span class="c1">#rakam 9 ise rakamın indeksini 0 yap</span>
                    <span class="n">digits</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="mi">0</span>
                <span class="k">else</span><span class="p">:</span>      <span class="c1">#9 değilse 1 ekle ve one = 0 yap döngü bitsin.</span>
                    <span class="n">digits</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">+=</span> <span class="mi">1</span>
                    <span class="n">one</span> <span class="o">=</span> <span class="mi">0</span>
            <span class="k">else</span><span class="p">:</span>
                <span class="n">digits</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> <span class="c1">#liste bitti ise listeye 1 ekle one = 0 yap döngü bitsin</span>
                <span class="n">one</span> <span class="o">=</span> <span class="mi">0</span>
            
            <span class="n">i</span><span class="o">+=</span><span class="mi">1</span> <span class="c1">#sayaç arttır</span>
        
        <span class="k">return</span> <span class="n">digits</span><span class="p">[::</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="c1">#listeyi tekrar ters çeviririz</span>
</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 020 Valid Parentheses</title>
			<link>https://www.dincerbakkal.com/posts/leetcode020/</link>
			<pubDate>Sun, 23 May 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode020/</guid>
			<description>Soru Given a string s containing just the characters &amp;lsquo;(&amp;rsquo;, &amp;lsquo;)&amp;rsquo;, &amp;lsquo;{&amp;rsquo;, &amp;lsquo;}&amp;rsquo;, &amp;lsquo;[&amp;rsquo; and &amp;lsquo;]&amp;rsquo;, determine if the input string is valid.
An input string is valid if:
 Open brackets must be closed by the same type of brackets. Open brackets must be closed in the correct order.  Örnek 1 Input: s = &amp;quot;()[]{}&amp;quot; Output: true Örnek 2 Input: s = &amp;quot;([)]&amp;quot; Output: false Çözüm  Verilen bir parantez dizisinin geçerli olup olmadığını kontrol etmenizi isteyen bir problem.</description>
			<content type="html"><![CDATA[<h3 id="soru">Soru</h3>
<p>Given a string s containing just the characters &lsquo;(&rsquo;, &lsquo;)&rsquo;, &lsquo;{&rsquo;, &lsquo;}&rsquo;, &lsquo;[&rsquo; and &lsquo;]&rsquo;, determine if the input string is valid.</p>
<p>An input string is valid if:</p>
<ol>
<li>Open brackets must be closed by the same type of brackets.</li>
<li>Open brackets must be closed in the correct order.</li>
</ol>
<h3 id="örnek-1">Örnek 1</h3>
<pre><code>Input: s = &quot;()[]{}&quot;
Output: true
</code></pre><h3 id="örnek-2">Örnek 2</h3>
<pre><code>Input: s = &quot;([)]&quot;
Output: false
</code></pre><h3 id="çözüm">Çözüm</h3>
<ul>
<li>Verilen bir parantez dizisinin geçerli olup olmadığını kontrol etmenizi isteyen bir problem. Bu sorunda amaç, tüm açık parantezlerin uygun bir şekilde kapatılmış olup olmadığını belirlemektir. Geçerli bir parantez dizisi için, her açık parantez ('(', &lsquo;{&rsquo;, &lsquo;[') karşılık gelen kapanış paranteziyle (')&rsquo;, &lsquo;}&rsquo;, &lsquo;]') eşleşmelidir.</li>
<li>Bu tür problemler genellikle bir yığın (stack) veri yapısı kullanılarak çözülür. Yığın, son giren ilk çıkar (LIFO) prensibiyle çalışır ve açılan parantezlerin sırasını takip etmek için idealdir.</li>
<li>Çalışma Mekanizması:</li>
<li>Yığın İnitialize Edilmesi: Parantezlerin açılış sırasını takip etmek için bir yığın (stack) oluşturulur.</li>
<li>Eşleşme Sözlüğü: Kapanış parantezlerini ve karşılık gelen açılış parantezlerini içeren bir sözlük (matching) kullanılır.</li>
<li>Dizi Üzerinde Dolaşma: String içindeki her karakter için:
Eğer karakter bir açılış parantezi ise, yığına eklenir.
Eğer karakter bir kapanış parantezi ise, yığının en üstündeki eleman çıkarılır ve bu elemanın karşılık gelen açılış parantezi olup olmadığı kontrol edilir.</li>
<li>Geçerlilik Kontrolü: İşlemler sonunda, eğer yığın boşsa tüm parantezler doğru bir şekilde eşleşmiştir ve true döndürülür. Eğer yığında eleman kalmışsa, bu, açılmış ancak kapatılmamış parantezler olduğu anlamına gelir ve false döndürülür.</li>
</ul>
<h2 id="code">Code</h2>
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">isValid</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">s</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
        <span class="n">stack</span> <span class="o">=</span> <span class="p">[]</span>
        <span class="n">matching</span> <span class="o">=</span> <span class="p">{</span><span class="s1">&#39;)&#39;</span><span class="p">:</span> <span class="s1">&#39;(&#39;</span><span class="p">,</span> <span class="s1">&#39;}&#39;</span><span class="p">:</span> <span class="s1">&#39;{&#39;</span><span class="p">,</span> <span class="s1">&#39;]&#39;</span><span class="p">:</span> <span class="s1">&#39;[&#39;</span><span class="p">}</span>
        
        <span class="k">for</span> <span class="n">char</span> <span class="ow">in</span> <span class="n">s</span><span class="p">:</span>
            <span class="k">if</span> <span class="n">char</span> <span class="ow">in</span> <span class="n">matching</span><span class="o">.</span><span class="n">values</span><span class="p">():</span>
                <span class="n">stack</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">char</span><span class="p">)</span>  <span class="c1"># Açma parantezlerini yığına ekle</span>
            <span class="k">elif</span> <span class="n">char</span> <span class="ow">in</span> <span class="n">matching</span><span class="p">:</span>
                <span class="k">if</span> <span class="ow">not</span> <span class="n">stack</span> <span class="ow">or</span> <span class="n">stack</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span> <span class="o">!=</span> <span class="n">matching</span><span class="p">[</span><span class="n">char</span><span class="p">]:</span>
                    <span class="k">return</span> <span class="kc">False</span>  <span class="c1"># Eşleşmeyen veya yığında açılmamış bir kapanış parantezi varsa</span>
        <span class="k">return</span> <span class="ow">not</span> <span class="n">stack</span>  <span class="c1"># Yığın boşsa, tüm parantezler eşleşmiştir</span>

</code></pre></div><h3 id="complexity">Complexity</h3>
<ul>
<li>Time complexity (Zaman Karmaşıklığı) : O(n), burada n girdi stringinin uzunluğudur. String boyunca tek bir geçiş yapılır.</li>
<li>Space complexity (Alan Karmaşıklığı) : O(n), en kötü durumda tüm parantezler yığına eklenir (örneğin tümü açılış parantezi olduğunda).</li>
</ul>
]]></content>
		</item>
		
		<item>
			<title>Leetcode 026 Remove Duplicates from Sorted Array</title>
			<link>https://www.dincerbakkal.com/posts/leetcode026/</link>
			<pubDate>Sun, 23 May 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode026/</guid>
			<description>Given an integer array nums sorted in non-decreasing order, remove the duplicates in-place such that each unique element appears only once. The relative order of the elements should be kept the same.
Since it is impossible to change the length of the array in some languages, you must instead have the result be placed in the first part of the array nums. More formally, if there are k elements after removing the duplicates, then the first k elements of nums should hold the final result.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>Given an integer array nums sorted in non-decreasing order, remove the duplicates in-place such that each unique element appears only once. The relative order of the elements should be kept the same.</p>
<p>Since it is impossible to change the length of the array in some languages, you must instead have the result be placed in the first part of the array nums. More formally, if there are k elements after removing the duplicates, then the first k elements of nums should hold the final result. It does not matter what you leave beyond the first k elements.</p>
<p>Return k after placing the final result in the first k slots of nums.</p>
<p>Do not allocate extra space for another array. You must do this by modifying the input array in-place with O(1) extra memory.</p>
<p>Custom Judge:</p>
<p>The judge will test your solution with the following code:</p>
<p>int[] nums = [&hellip;]; // Input array
int[] expectedNums = [&hellip;]; // The expected answer with correct length</p>
<p>int k = removeDuplicates(nums); // Calls your implementation</p>
<p>assert k == expectedNums.length;
for (int i = 0; i &lt; k; i++) {
assert nums[i] == expectedNums[i];
}
If all assertions pass, then your solution will be accepted.</p>
<!-- raw HTML omitted -->
<pre><code>Input: nums = [1,1,2]
Output: 2, nums = [1,2,_]
Explanation: Your function should return k = 2, with the first two elements of nums being 1 and 2 respectively.
It does not matter what you leave beyond the returned k (hence they are underscores).
</code></pre><!-- raw HTML omitted -->
<pre><code>Input: nums = [0,0,1,1,1,2,2,3,3,4]
Output: 5, nums = [0,1,2,3,4,_,_,_,_,_]
Explanation: Your function should return k = 5, with the first five elements of nums being 0, 1, 2, 3, and 4 respectively.
It does not matter what you leave beyond the returned k (hence they are underscores).
</code></pre><!-- raw HTML omitted -->
<ul>
<li>Soruda bize bir array veriliyor.Bu array içerisinde soldan sağa artarak ilerleyen tekrar eden rakamlar var.Bizden istenen aynılarından sadece bir tane olacak şekilde array yeniden düzenlememiz isteniyor.</li>
<li>Çözüm için iki işaretçi kullanabiliriz.Left ve right diye iki işaretçimiz olsun.</li>
<li>İkisini de 1. indeksten başlatırız. Çünkü 0. indeksteki rakam hep orada kalacak.</li>
<li>Daha sonra right ilerletiriz ve right-1 indeks ile aynı mı diye kontrol ederiz.Aynı ise devam ederiz.</li>
<li>Farklı ise right indeksteki sayıyı left indekse koyar ve left indeksi 1 arttırırız.</li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python">    <span class="k">def</span> <span class="nf">removeDuplicates</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">nums</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
        <span class="n">left</span> <span class="o">=</span> <span class="mi">1</span>
        
        <span class="k">for</span> <span class="n">right</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">nums</span><span class="p">)):</span>
            <span class="k">if</span> <span class="n">nums</span><span class="p">[</span><span class="n">right</span><span class="p">]</span> <span class="o">!=</span> <span class="n">nums</span><span class="p">[</span><span class="n">right</span><span class="o">-</span><span class="mi">1</span><span class="p">]:</span>
                <span class="n">nums</span><span class="p">[</span><span class="n">left</span><span class="p">]</span> <span class="o">=</span> <span class="n">nums</span><span class="p">[</span><span class="n">right</span><span class="p">]</span>
                <span class="n">left</span><span class="o">+=</span><span class="mi">1</span>
        <span class="k">return</span> <span class="n">left</span>
</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 009 Palindrome Number</title>
			<link>https://www.dincerbakkal.com/posts/leetcode009/</link>
			<pubDate>Sat, 22 May 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode009/</guid>
			<description>Given an integer x, return true if x is palindrome integer.
An integer is a palindrome when it reads the same backward as forward. For example, 121 is palindrome while 123 is not.
Follow up: Could you solve it without converting the integer to a string?
Input: x = 121 Output: true Input: x = -121 Output: false Explanation: From left to right, it reads -121. From right to left, it becomes 121-.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>Given an integer x, return true if x is palindrome integer.</p>
<p>An integer is a palindrome when it reads the same backward as forward. For example, 121 is palindrome while 123 is not.</p>
<p>Follow up: Could you solve it without converting the integer to a string?</p>
<!-- raw HTML omitted -->
<pre><code>Input: x = 121
Output: true
</code></pre><!-- raw HTML omitted -->
<pre><code>Input: x = -121
Output: false
Explanation: From left to right, it reads -121. From right to left, it becomes 121-. Therefore it is not a palindrome.
</code></pre><!-- raw HTML omitted -->
<pre><code>Input: x = 10
Output: false
Explanation: Reads 01 from right to left. Therefore it is not a palindrome.
</code></pre><!-- raw HTML omitted -->
<ul>
<li>Soruda bize integer bir değer veriliyor ve bunun palindrome(düz olarak ve ters olarak aynı) sayı olup olmadığını bulmamız isteniyor.</li>
<li>Sorunun devamında integer değeri stringe çevirmeden bulmamız isteniyor.</li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python">    <span class="k">def</span> <span class="nf">isPalindrome</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">x</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
        <span class="k">if</span> <span class="n">x</span><span class="o">&lt;</span><span class="mi">0</span><span class="p">:</span><span class="k">return</span> <span class="kc">False</span> <span class="c1">#0 dan küçük değerler palindrome olamaz -121 121- gibi</span>
        
        <span class="n">div</span> <span class="o">=</span> <span class="mi">1</span>
        <span class="k">while</span> <span class="n">x</span><span class="o">&gt;=</span><span class="mi">10</span> <span class="o">*</span> <span class="n">div</span><span class="p">:</span>
            <span class="n">div</span> <span class="o">*=</span> <span class="mi">10</span> <span class="c1">#bölenimizi buluyoruz 1221 için div 1000 bulunur.</span>
        
        <span class="k">while</span> <span class="n">x</span><span class="p">:</span>
            <span class="n">right</span> <span class="o">=</span> <span class="n">x</span> <span class="o">%</span> <span class="mi">10</span> <span class="c1">#en sağdaki rakamı bulmak için modunu alıyoruz 1221 % 10 = 1</span>
            <span class="n">left</span> <span class="o">=</span> <span class="n">x</span> <span class="o">//</span> <span class="n">div</span> <span class="c1">#sayıyı dive bölüyoruz en soldaki rakamı buluyoruz 1221 // 1000 = 1</span>
            
            <span class="k">if</span> <span class="n">left</span> <span class="o">!=</span> <span class="n">right</span><span class="p">:</span> <span class="k">return</span> <span class="kc">False</span> <span class="c1">#sağ ve sol rakamı karşılaştır.</span>
            
            <span class="c1"># 1221 sayısının kontrol etmemiz gereken yeni hali 22</span>
            <span class="n">x</span> <span class="o">=</span> <span class="p">(</span><span class="n">x</span> <span class="o">%</span> <span class="n">div</span><span class="p">)</span> <span class="o">//</span> <span class="mi">10</span> <span class="c1"># Bunun için önce div ile mod alıyoruz 221 sonrada 10 bölüyoruz 22 </span>
            <span class="n">div</span> <span class="o">=</span> <span class="n">div</span> <span class="o">/</span> <span class="mi">100</span> <span class="c1">#sağ ve soldan 2 basamak azaldığı için 100 bölüp yeni div buluyoruz.</span>
        <span class="k">return</span> <span class="kc">True</span>
</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 013 Roman to Integer</title>
			<link>https://www.dincerbakkal.com/posts/leetcode013/</link>
			<pubDate>Sat, 22 May 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode013/</guid>
			<description>Roman numerals are represented by seven different symbols: I, V, X, L, C, D and M.
Symbol Value I 1 V 5 X 10 L 50 C 100 D 500 M 1000 For example, 2 is written as II in Roman numeral, just two one&amp;rsquo;s added together. 12 is written as XII, which is simply X + II. The number 27 is written as XXVII, which is XX + V + II.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>Roman numerals are represented by seven different symbols: I, V, X, L, C, D and M.</p>
<pre><code>Symbol       Value
I             1
V             5
X             10
L             50
C             100
D             500
M             1000

</code></pre><p>For example, 2 is written as II in Roman numeral, just two one&rsquo;s added together. 12 is written as XII, which is simply X + II. The number 27 is written as XXVII, which is XX + V + II.</p>
<p>Roman numerals are usually written largest to smallest from left to right. However, the numeral for four is not IIII. Instead, the number four is written as IV. Because the one is before the five we subtract it making four. The same principle applies to the number nine, which is written as IX. There are six instances where subtraction is used:</p>
<p>I can be placed before V (5) and X (10) to make 4 and 9.
X can be placed before L (50) and C (100) to make 40 and 90.
C can be placed before D (500) and M (1000) to make 400 and 900.
Given a roman numeral, convert it to an integer.</p>
<!-- raw HTML omitted -->
<pre><code>Input: s = &quot;III&quot;
Output: 3
</code></pre><!-- raw HTML omitted -->
<pre><code>Input: s = &quot;IV&quot;
Output: 4
</code></pre><!-- raw HTML omitted -->
<pre><code>Input: s = &quot;LVIII&quot;
Output: 58
Explanation: L = 50, V= 5, III = 3.
</code></pre><!-- raw HTML omitted -->
<ul>
<li>Soruda bize string olarak roma rakamları veriliyor ve bunun sayısal karşılığı isteniyor.</li>
<li>Roma rakamlarını hash map olarak tutarız.</li>
<li>Burada dikkat edilmesi gereken soldaki harf değeri sağdaki harf değerinden küçük ise soldaki negatif anlama gelektedir.</li>
<li>Soldaki harfin değeri sağdakinden büyük ise pozitiftir.</li>
<li>Örneğin VI = 6 -&gt; V=5 , I=1 5+1=6</li>
<li>IV = 4 -&gt; I sağındaki değerden küçük  I=-1 , V = 5      (-1)+5 = 4</li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python">    <span class="k">def</span> <span class="nf">romanToInt</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">s</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
        <span class="n">roman</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&#34;I&#34;</span> <span class="p">:</span> <span class="mi">1</span><span class="p">,</span> <span class="s2">&#34;V&#34;</span> <span class="p">:</span> <span class="mi">5</span><span class="p">,</span> <span class="s2">&#34;X&#34;</span> <span class="p">:</span> <span class="mi">10</span><span class="p">,</span>
                <span class="s2">&#34;L&#34;</span> <span class="p">:</span> <span class="mi">50</span><span class="p">,</span> <span class="s2">&#34;C&#34;</span> <span class="p">:</span> <span class="mi">100</span><span class="p">,</span> <span class="s2">&#34;D&#34;</span> <span class="p">:</span> <span class="mi">500</span><span class="p">,</span> <span class="s2">&#34;M&#34;</span> <span class="p">:</span> <span class="mi">1000</span><span class="p">}</span>
        <span class="n">res</span> <span class="o">=</span> <span class="mi">0</span>
        
        <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">s</span><span class="p">)):</span>
            <span class="k">if</span> <span class="n">i</span> <span class="o">+</span> <span class="mi">1</span> <span class="o">&lt;</span> <span class="nb">len</span><span class="p">(</span><span class="n">s</span><span class="p">)</span> <span class="ow">and</span> <span class="n">roman</span><span class="p">[</span><span class="n">s</span><span class="p">[</span><span class="n">i</span><span class="p">]]</span> <span class="o">&lt;</span> <span class="n">roman</span><span class="p">[</span><span class="n">s</span><span class="p">[</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">]]:</span>
                <span class="n">res</span> <span class="o">-=</span> <span class="n">roman</span><span class="p">[</span><span class="n">s</span><span class="p">[</span><span class="n">i</span><span class="p">]]</span>
            <span class="k">else</span><span class="p">:</span>
                <span class="n">res</span> <span class="o">+=</span> <span class="n">roman</span><span class="p">[</span><span class="n">s</span><span class="p">[</span><span class="n">i</span><span class="p">]]</span>
        <span class="k">return</span> <span class="n">res</span>
</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 028 Implement strStr()</title>
			<link>https://www.dincerbakkal.com/posts/leetcode028/</link>
			<pubDate>Sat, 22 May 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode028/</guid>
			<description>Implement strStr().
Return the index of the first occurrence of needle in haystack, or -1 if needle is not part of haystack.
Clarification:
What should we return when needle is an empty string? This is a great question to ask during an interview.
For the purpose of this problem, we will return 0 when needle is an empty string. This is consistent to C&amp;rsquo;s strstr() and Java&amp;rsquo;s indexOf().
Input: haystack = &amp;quot;hello&amp;quot;, needle = &amp;quot;ll&amp;quot; Output: 2 Input: haystack = &amp;quot;aaaaa&amp;quot;, needle = &amp;quot;bba&amp;quot; Output: -1 Input: haystack = &amp;quot;&amp;quot;, needle = &amp;quot;&amp;quot; Output: 0  Soruda bize iki string veriliyor ve birinci string içerisinde ikinci string hangi indexte başladığı soruluyor.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>Implement strStr().</p>
<p>Return the index of the first occurrence of needle in haystack, or -1 if needle is not part of haystack.</p>
<p>Clarification:</p>
<p>What should we return when needle is an empty string? This is a great question to ask during an interview.</p>
<p>For the purpose of this problem, we will return 0 when needle is an empty string. This is consistent to C&rsquo;s strstr() and Java&rsquo;s indexOf().</p>
<!-- raw HTML omitted -->
<pre><code>Input: haystack = &quot;hello&quot;, needle = &quot;ll&quot;
Output: 2
</code></pre><!-- raw HTML omitted -->
<pre><code>Input: haystack = &quot;aaaaa&quot;, needle = &quot;bba&quot;
Output: -1
</code></pre><!-- raw HTML omitted -->
<pre><code>Input: haystack = &quot;&quot;, needle = &quot;&quot;
Output: 0
</code></pre><!-- raw HTML omitted -->
<ul>
<li>Soruda bize iki string veriliyor ve birinci string içerisinde ikinci string hangi indexte başladığı soruluyor.</li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python">    <span class="k">def</span> <span class="nf">strStr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">haystack</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">needle</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
        <span class="k">if</span> <span class="ow">not</span> <span class="n">needle</span><span class="p">:</span>
            <span class="k">return</span> <span class="mi">0</span>
        
        <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">haystack</span><span class="p">)):</span>
            <span class="k">if</span> <span class="p">(</span><span class="n">haystack</span><span class="p">[</span><span class="n">i</span><span class="p">:</span><span class="n">i</span><span class="o">+</span><span class="nb">len</span><span class="p">(</span><span class="n">needle</span><span class="p">)])</span> <span class="o">==</span> <span class="n">needle</span><span class="p">:</span>
                <span class="k">return</span> <span class="n">i</span>
        <span class="k">return</span> <span class="o">-</span><span class="mi">1</span>
</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 378 Kth Smallest Element in a Sorted Matrix</title>
			<link>https://www.dincerbakkal.com/posts/leetcode378/</link>
			<pubDate>Fri, 21 May 2021 20:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode378/</guid>
			<description>Given an n x n matrix where each of the rows and columns are sorted in ascending order, return the kth smallest element in the matrix.
Note that it is the kth smallest element in the sorted order, not the kth distinct element.
Input: matrix = [[1,5,9],[10,11,13],[12,13,15]], k = 8 Output: 13 Explanation: The elements in the matrix are [1,5,9,10,11,12,13,13,15], and the 8th smallest number is 13 Input: matrix = [[-5]], k = 1 Output: -5   Use Heap to solve the question.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>Given an n x n matrix where each of the rows and columns are sorted in ascending order, return the kth smallest element in the matrix.</p>
<p>Note that it is the kth smallest element in the sorted order, not the kth distinct element.</p>
<!-- raw HTML omitted -->
<pre><code>Input: matrix = [[1,5,9],[10,11,13],[12,13,15]], k = 8
Output: 13
Explanation: The elements in the matrix are [1,5,9,10,11,12,13,13,15], and the 8th smallest number is 13

</code></pre><!-- raw HTML omitted -->
<pre><code>Input: matrix = [[-5]], k = 1
Output: -5

</code></pre><!-- raw HTML omitted -->
<ul>
<li>
<p>Use Heap to solve the question.</p>
</li>
<li>
<p>Min Heap (easy understand): Push all values into min heap and pop k-1 value from min heap, then the head of the heap will be the kth element.</p>
</li>
<li>
<p>insert an element into heap: O(log(n)), where n is the width of the matrix
find k the k-th element O(k)</p>
</li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>

    <span class="k">def</span> <span class="nf">kthSmallest</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">matrix</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">]],</span> <span class="n">k</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
        <span class="n">minHeap</span> <span class="o">=</span> <span class="p">[]</span>
        <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">matrix</span><span class="p">:</span>
            <span class="k">for</span> <span class="n">y</span> <span class="ow">in</span> <span class="n">x</span><span class="p">:</span>
                <span class="n">heapq</span><span class="o">.</span><span class="n">heappush</span><span class="p">(</span><span class="n">minHeap</span><span class="p">,</span> <span class="n">y</span><span class="p">)</span>
        <span class="n">index</span> <span class="o">=</span> <span class="mi">0</span>
        <span class="k">while</span> <span class="n">index</span><span class="o">&lt;</span><span class="n">k</span><span class="o">-</span><span class="mi">1</span><span class="p">:</span>
            <span class="n">heapq</span><span class="o">.</span><span class="n">heappop</span><span class="p">(</span><span class="n">minHeap</span><span class="p">)</span>
            <span class="n">index</span><span class="o">+=</span><span class="mi">1</span>
        <span class="k">return</span> <span class="n">minHeap</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>



</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 328 Odd Even Linked List</title>
			<link>https://www.dincerbakkal.com/posts/leetcode328/</link>
			<pubDate>Thu, 20 May 2021 20:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode328/</guid>
			<description>Given the head of a singly linked list, group all the nodes with odd indices together followed by the nodes with even indices, and return the reordered list.
The first node is considered odd, and the second node is even, and so on.
Note that the relative order inside both the even and odd groups should remain as it was in the input.
You must solve the problem in O(1) extra space complexity and O(n) time complexity.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>Given the head of a singly linked list, group all the nodes with odd indices together followed by the nodes with even indices, and return the reordered list.</p>
<p>The first node is considered odd, and the second node is even, and so on.</p>
<p>Note that the relative order inside both the even and odd groups should remain as it was in the input.</p>
<p>You must solve the problem in O(1) extra space complexity and O(n) time complexity.</p>
<!-- raw HTML omitted -->
<pre><code><figure><img src="/image/328ex1.jpg"
         alt="image"/>
</figure>


Input: head = [1,2,3,4,5]
Output: [1,3,5,2,4]

</code></pre><!-- raw HTML omitted -->
<pre><code><figure><img src="/image/328ex2.jpg"
         alt="image"/>
</figure>

Input: head = [2,1,3,5,6,4,7]
Output: [2,3,6,7,1,5,4]

</code></pre><!-- raw HTML omitted -->
<ul>
<li>Soruda bize bir linked list veriliyor listedeki nodeları tek 1-3-5 sıradakiler önde çift 2-4-6 sıradakiler sonda olacak şekilde yazmamız isteniyor.</li>
<li>Yapacağımız şey evenList adında yeni bir liste oluşturup çift sıradakiler buna eklemek.Tekleri ise birbirine eklemek.</li>
<li>Son olarakta elimizdeki sadece odd sırasında olan nodelardan oluşan listeye evenList eklemek.</li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>

    <span class="k">def</span> <span class="nf">oddEvenList</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">head</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">ListNode</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">Optional</span><span class="p">[</span><span class="n">ListNode</span><span class="p">]:</span>
        <span class="k">if</span><span class="p">(</span><span class="ow">not</span> <span class="n">head</span><span class="p">):</span>
            <span class="k">return</span> <span class="n">head</span>
        
        <span class="n">odd</span> <span class="o">=</span> <span class="n">head</span>
        <span class="n">even</span> <span class="o">=</span> <span class="n">odd</span><span class="o">.</span><span class="n">next</span>
        <span class="n">evenList</span> <span class="o">=</span> <span class="n">even</span>
        
        <span class="k">while</span><span class="p">(</span><span class="n">even</span> <span class="ow">and</span> <span class="n">even</span><span class="o">.</span><span class="n">next</span><span class="p">):</span>
            <span class="n">odd</span><span class="o">.</span><span class="n">next</span> <span class="o">=</span> <span class="n">even</span><span class="o">.</span><span class="n">next</span>
            <span class="n">odd</span> <span class="o">=</span> <span class="n">odd</span><span class="o">.</span><span class="n">next</span>
            
            <span class="n">even</span><span class="o">.</span><span class="n">next</span> <span class="o">=</span> <span class="n">odd</span><span class="o">.</span><span class="n">next</span>
            <span class="n">even</span> <span class="o">=</span> <span class="n">even</span><span class="o">.</span><span class="n">next</span>
            
        <span class="n">odd</span><span class="o">.</span><span class="n">next</span> <span class="o">=</span> <span class="n">evenList</span>
        
        <span class="k">return</span> <span class="n">head</span>



</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 24 Swap Nodes in Pairs</title>
			<link>https://www.dincerbakkal.com/posts/leetcode024/</link>
			<pubDate>Wed, 19 May 2021 20:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode024/</guid>
			<description>Given a linked list, swap every two adjacent nodes and return its head. You must solve the problem without modifying the values in the list&amp;rsquo;s nodes (i.e., only nodes themselves may be changed.)
 Input: head = [1,2,3,4] Output: [2,1,4,3]  Input: head = [] Output: []  Input: head = [1] Output: [1]  Soruda bize bir linked list veriliyor ve nodeları ikili olarak ters çevirmemiz isteniyor. Listenin başına dummy bir node koyarak bir çok sorunu halledebiliriz.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>Given a linked list, swap every two adjacent nodes and return its head. You must solve the problem without modifying the values in the list&rsquo;s nodes (i.e., only nodes themselves may be changed.)</p>
<!-- raw HTML omitted -->
<pre><code><figure><img src="/image/24ex1.jpg"
         alt="image"/>
</figure>


Input: head = [1,2,3,4]
Output: [2,1,4,3]

</code></pre><!-- raw HTML omitted -->
<pre><code>
Input: head = []
Output: []

</code></pre><!-- raw HTML omitted -->
<pre><code>
Input: head = [1]
Output: [1]

</code></pre><!-- raw HTML omitted -->
<ul>
<li>Soruda bize bir linked list veriliyor ve nodeları ikili olarak ters çevirmemiz isteniyor.</li>
<li>Listenin başına dummy bir node koyarak bir çok sorunu halledebiliriz.</li>
<li>Daha sonra nodeları ikili olarak ters çeviririz.</li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>

    <span class="k">def</span> <span class="nf">swapPairs</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">head</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">ListNode</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">Optional</span><span class="p">[</span><span class="n">ListNode</span><span class="p">]:</span>
        <span class="n">dummy</span> <span class="o">=</span> <span class="n">ListNode</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="n">head</span><span class="p">)</span>
        <span class="n">prev</span><span class="p">,</span> <span class="n">curr</span> <span class="o">=</span> <span class="n">dummy</span><span class="p">,</span> <span class="n">head</span>
        
        <span class="k">while</span> <span class="n">curr</span> <span class="ow">and</span> <span class="n">curr</span><span class="o">.</span><span class="n">next</span><span class="p">:</span>
            <span class="c1">#save ptrs</span>
            <span class="n">nxtPair</span> <span class="o">=</span> <span class="n">curr</span><span class="o">.</span><span class="n">next</span><span class="o">.</span><span class="n">next</span>
            <span class="n">second</span> <span class="o">=</span> <span class="n">curr</span><span class="o">.</span><span class="n">next</span>
            
            <span class="c1">#reverse this pair</span>
            <span class="n">second</span><span class="o">.</span><span class="n">next</span> <span class="o">=</span> <span class="n">curr</span>
            <span class="n">curr</span><span class="o">.</span><span class="n">next</span> <span class="o">=</span> <span class="n">nxtPair</span>
            <span class="n">prev</span><span class="o">.</span><span class="n">next</span> <span class="o">=</span> <span class="n">second</span>
            
            <span class="c1">#update ptrs</span>
            <span class="n">prev</span> <span class="o">=</span> <span class="n">curr</span>
            <span class="n">curr</span> <span class="o">=</span> <span class="n">nxtPair</span>
            
        <span class="k">return</span> <span class="n">dummy</span><span class="o">.</span><span class="n">next</span>



</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 61 Rotate List</title>
			<link>https://www.dincerbakkal.com/posts/leetcode061/</link>
			<pubDate>Tue, 18 May 2021 20:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode061/</guid>
			<description>Given the head of a linked list, rotate the list to the right by k places.
 Input: head = [1,2,3,4,5], k = 2 Output: [4,5,1,2,3]  Input: head = [0,1,2], k = 4 Output: [2,0,1]  Soruda bize bir linked list ve k sayısı veriliyor.Bu k sayısı kadar linked listi kaydırmamız isteniyor. İlk olarak linked listin uzunluğunu ve tail yani son elemanı buluruz. Daha sonra verilen k sayısının 0 olması yada linked listen uzun olması durumlarını kontrol ederiz.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>Given the head of a linked list, rotate the list to the right by k places.</p>
<!-- raw HTML omitted -->
<pre><code><figure><img src="/image/61ex1.jpg"
         alt="image"/>
</figure>


Input: head = [1,2,3,4,5], k = 2
Output: [4,5,1,2,3]

</code></pre><!-- raw HTML omitted -->
<pre><code><figure><img src="/image/61ex2.jpg"
         alt="image"/>
</figure>


Input: head = [0,1,2], k = 4
Output: [2,0,1]

</code></pre><!-- raw HTML omitted -->
<ul>
<li>Soruda bize bir linked list ve k sayısı veriliyor.Bu k sayısı kadar linked listi kaydırmamız isteniyor.</li>
<li>İlk olarak linked listin uzunluğunu ve tail yani son elemanı buluruz.</li>
<li>Daha sonra verilen k sayısının 0 olması yada linked listen uzun olması durumlarını kontrol ederiz.</li>
<li>Daha sonra (lenght - k - 1) kadar giderek yeni şuan linked listin ortasında olan ama kaydırmayı tamamladığımızda linked listin son elemanı olacak olan node buluruz bunun nexti none yaparız.</li>
<li>Son olarakta tail nexti head yaparak işlemi bitiririz.</li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>

    <span class="k">def</span> <span class="nf">rotateRight</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">head</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">ListNode</span><span class="p">],</span> <span class="n">k</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Optional</span><span class="p">[</span><span class="n">ListNode</span><span class="p">]:</span>
        <span class="k">if</span> <span class="ow">not</span> <span class="n">head</span><span class="p">:</span>
            <span class="k">return</span> <span class="n">head</span>
        
        <span class="c1">#get lenght</span>
        <span class="n">lenght</span><span class="p">,</span> <span class="n">tail</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span> <span class="n">head</span>
        <span class="k">while</span> <span class="n">tail</span><span class="o">.</span><span class="n">next</span><span class="p">:</span>
            <span class="n">tail</span> <span class="o">=</span> <span class="n">tail</span><span class="o">.</span><span class="n">next</span>
            <span class="n">lenght</span> <span class="o">+=</span><span class="mi">1</span>
        
        <span class="n">k</span> <span class="o">=</span> <span class="n">k</span> <span class="o">%</span> <span class="n">lenght</span>
        <span class="k">if</span> <span class="n">k</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
            <span class="k">return</span> <span class="n">head</span>
        
        <span class="c1"># Move to the pivot and rotate</span>
        <span class="n">cur</span> <span class="o">=</span> <span class="n">head</span>
        <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">lenght</span> <span class="o">-</span> <span class="n">k</span> <span class="o">-</span> <span class="mi">1</span><span class="p">):</span>
            <span class="n">cur</span> <span class="o">=</span> <span class="n">cur</span><span class="o">.</span><span class="n">next</span>
        <span class="n">newHead</span> <span class="o">=</span> <span class="n">cur</span><span class="o">.</span><span class="n">next</span>
        <span class="n">cur</span><span class="o">.</span><span class="n">next</span> <span class="o">=</span> <span class="kc">None</span>
        <span class="n">tail</span><span class="o">.</span><span class="n">next</span> <span class="o">=</span> <span class="n">head</span>
        <span class="k">return</span> <span class="n">newHead</span>



</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 92 Reverse Linked List II</title>
			<link>https://www.dincerbakkal.com/posts/leetcode092/</link>
			<pubDate>Mon, 17 May 2021 20:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode092/</guid>
			<description>Given the head of a singly linked list and two integers left and right where left &amp;lt;= right, reverse the nodes of the list from position left to position right, and return the reversed list.
 Input: head = [1,2,3,4,5], left = 2, right = 4 Output: [1,4,3,2,5]  Input: head = [5], left = 1, right = 1 Output: [5]  Soruda bize bir linked list ve içerisinde iki nokta veriliyor.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>Given the head of a singly linked list and two integers left and right where left &lt;= right, reverse the nodes of the list from position left to position right, and return the reversed list.</p>
<!-- raw HTML omitted -->
<pre><code><figure><img src="/image/92ex1.jpg"
         alt="image"/>
</figure>


Input: head = [1,2,3,4,5], left = 2, right = 4
Output: [1,4,3,2,5]

</code></pre><!-- raw HTML omitted -->
<pre><code>
Input: head = [5], left = 1, right = 1
Output: [5]

</code></pre><!-- raw HTML omitted -->
<ul>
<li>Soruda bize bir linked list ve içerisinde iki nokta veriliyor.Bu iki nokta arasındaki nodeları ters çevirmemiz isteniyor.</li>
<li>Kod kısmında açıklamaları yazdım. Burada yardımcı olması açısından bir dummy node kullanıyoruz.Bu bir çok edge case önlüyor.</li>
<li>Daha sonra verilern iki nokta arasındaki nodeları ters çeviriyoruz.</li>
<li>Son olarakta pointerları düzenliyoruz.</li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>

    <span class="k">def</span> <span class="nf">reverseBetween</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">head</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">ListNode</span><span class="p">],</span> <span class="n">left</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span> <span class="n">right</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Optional</span><span class="p">[</span><span class="n">ListNode</span><span class="p">]:</span>
        <span class="n">dummy</span> <span class="o">=</span> <span class="n">ListNode</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="n">head</span><span class="p">)</span>
        
        <span class="c1">#1) reach node at position &#34;left&#34;</span>
        <span class="n">leftPrev</span><span class="p">,</span> <span class="n">cur</span> <span class="o">=</span> <span class="n">dummy</span><span class="p">,</span> <span class="n">head</span>
        <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">left</span> <span class="o">-</span> <span class="mi">1</span><span class="p">):</span>
            <span class="n">leftPrev</span><span class="p">,</span> <span class="n">cur</span> <span class="o">=</span> <span class="n">cur</span><span class="p">,</span> <span class="n">cur</span><span class="o">.</span><span class="n">next</span>
        
        <span class="c1"># Now cur=&#34;left&#34;, leftPrev=&#34;node before left&#34;</span>
        <span class="c1"># 2) reverse from left to right</span>
        <span class="n">prev</span> <span class="o">=</span> <span class="kc">None</span>
        <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">right</span> <span class="o">-</span> <span class="n">left</span> <span class="o">+</span> <span class="mi">1</span><span class="p">):</span>
            <span class="n">tmpNext</span> <span class="o">=</span> <span class="n">cur</span><span class="o">.</span><span class="n">next</span>
            <span class="n">cur</span><span class="o">.</span><span class="n">next</span> <span class="o">=</span> <span class="n">prev</span>
            <span class="n">prev</span><span class="p">,</span> <span class="n">cur</span> <span class="o">=</span> <span class="n">cur</span><span class="p">,</span> <span class="n">tmpNext</span>
        
        <span class="c1">#3) Update pointers</span>
        <span class="n">leftPrev</span><span class="o">.</span><span class="n">next</span><span class="o">.</span><span class="n">next</span> <span class="o">=</span> <span class="n">cur</span> <span class="c1">#cur is node after &#34;right&#34;</span>
        <span class="n">leftPrev</span><span class="o">.</span><span class="n">next</span> <span class="o">=</span> <span class="n">prev</span>     <span class="c1">#prev is right</span>
        <span class="k">return</span> <span class="n">dummy</span><span class="o">.</span><span class="n">next</span>



</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 323 Number of Connected Components in an Undirected Graph</title>
			<link>https://www.dincerbakkal.com/posts/leetcode323/</link>
			<pubDate>Sun, 16 May 2021 20:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode323/</guid>
			<description>Given n nodes labeled from 0 to n - 1 and a list of undirected edges (each edge is a pair of nodes), write a function to find the number of connected components in an undirected graph.
You can assume that no duplicate edges will appear in edges. Since all edges are undirected, [0, 1] is the same as [1, 0] and thus will not appear together in edges.
 Input: n = 5 and edges = [[0, 1], [1, 2], [3, 4]] 0 3 | | 1 --- 2 4 Output: 2  Input: n = 5 and edges = [[0, 1], [1, 2], [2, 3], [3, 4]] 0 4 | | 1 --- 2 --- 3 Output: 1  Start from index 0 to n.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>Given n nodes labeled from 0 to n - 1 and a list of undirected edges (each edge is a pair of nodes), write a function to find the number of connected components in an undirected graph.</p>
<p>You can assume that no duplicate edges will appear in edges. Since all edges are undirected, [0, 1] is the same as [1, 0] and thus will not appear together in edges.</p>
<!-- raw HTML omitted -->
<pre><code>
Input: n = 5 and edges = [[0, 1], [1, 2], [3, 4]]

     0          3
     |          |
     1 --- 2    4 

Output: 2

</code></pre><!-- raw HTML omitted -->
<pre><code>
Input: n = 5 and edges = [[0, 1], [1, 2], [2, 3], [3, 4]]

     0           4
     |           |
     1 --- 2 --- 3

Output:  1

</code></pre><!-- raw HTML omitted -->
<ul>
<li>Start from index 0 to n. For each index, use BFS to find all it’s related numbers and append them to the visited set, if this index has no more related number then count + 1 and start from next index, note that if the index is in visited set. we skip to next index.</li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>

    <span class="k">def</span> <span class="nf">countComponents</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">n</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span> <span class="n">edges</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">]])</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
        <span class="n">dist</span> <span class="o">=</span> <span class="n">collections</span><span class="o">.</span><span class="n">defaultdict</span><span class="p">(</span><span class="nb">list</span><span class="p">)</span>
        <span class="k">for</span> <span class="n">source</span><span class="p">,</span> <span class="n">target</span> <span class="ow">in</span> <span class="n">edges</span><span class="p">:</span>
            <span class="n">dist</span><span class="p">[</span><span class="n">source</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">target</span><span class="p">)</span>
            <span class="n">dist</span><span class="p">[</span><span class="n">target</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">source</span><span class="p">)</span>
        <span class="n">count</span> <span class="o">=</span> <span class="mi">0</span>
        <span class="n">visited</span><span class="o">=</span><span class="nb">set</span><span class="p">()</span>
        <span class="n">queue</span> <span class="o">=</span> <span class="n">collections</span><span class="o">.</span><span class="n">deque</span><span class="p">()</span>
        <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">n</span><span class="p">):</span>
            <span class="k">if</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">visited</span><span class="p">:</span>
                <span class="k">continue</span>
            <span class="n">queue</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
            <span class="k">while</span> <span class="n">queue</span><span class="p">:</span>
                <span class="n">source</span><span class="o">=</span><span class="n">queue</span><span class="o">.</span><span class="n">popleft</span><span class="p">()</span>
                <span class="k">if</span> <span class="n">source</span> <span class="ow">in</span> <span class="n">visited</span><span class="p">:</span>
                    <span class="k">continue</span>
                <span class="n">visited</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">source</span><span class="p">)</span>
                <span class="k">for</span> <span class="n">target</span> <span class="ow">in</span> <span class="n">dist</span><span class="p">[</span><span class="n">source</span><span class="p">]:</span>
                    <span class="n">queue</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">target</span><span class="p">)</span>
            <span class="n">count</span><span class="o">+=</span><span class="mi">1</span>
        <span class="k">return</span> <span class="n">count</span>



</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 261 Graph Valid Tree</title>
			<link>https://www.dincerbakkal.com/posts/leetcode261/</link>
			<pubDate>Sat, 15 May 2021 20:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode261/</guid>
			<description>Description Given n nodes labeled from 0 to n - 1 and a list of undirected edges (each edge is a pair of nodes), write a function to check whether these edges make up a valid tree.
You can assume that no duplicate edges will appear in edges. Since all edges are undirected, [0, 1] is the same as [1, 0] and thus will not appear together in edges.
Input: n = 5 edges = [[0, 1], [0, 2], [0, 3], [1, 4]] Output: true.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>Description
Given n nodes labeled from 0 to n - 1 and a list of undirected edges (each edge is a pair of nodes), write a function to check whether these edges make up a valid tree.</p>
<p>You can assume that no duplicate edges will appear in edges. Since all edges are undirected, [0, 1] is the same as [1, 0] and thus will not appear together in edges.</p>
<!-- raw HTML omitted -->
<pre><code>Input: n = 5 edges = [[0, 1], [0, 2], [0, 3], [1, 4]]
Output: true.

</code></pre><!-- raw HTML omitted -->
<pre><code>Input: n = 5 edges = [[0, 1], [1, 2], [2, 3], [1, 3], [1, 4]]
Output: false.

</code></pre><!-- raw HTML omitted -->
<ul>
<li>Çözülecek</li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">validTree</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">n</span><span class="p">,</span> <span class="n">edges</span><span class="p">):</span>
        <span class="k">if</span> <span class="ow">not</span> <span class="n">n</span><span class="p">:</span>
            <span class="k">return</span> <span class="kc">True</span>
        <span class="n">adj</span> <span class="o">=</span> <span class="p">{</span><span class="n">i</span><span class="p">:[]</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">n</span><span class="p">)}</span>
        <span class="k">for</span> <span class="n">n1</span><span class="p">,</span> <span class="n">n2</span> <span class="ow">in</span> <span class="n">edges</span><span class="p">:</span>
            <span class="n">adj</span><span class="p">[</span><span class="n">n1</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">n2</span><span class="p">)</span>
            <span class="n">adj</span><span class="p">[</span><span class="n">n2</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">n1</span><span class="p">)</span>
        <span class="n">visit</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
        <span class="k">def</span> <span class="nf">dfs</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="n">prev</span><span class="p">):</span>
            <span class="k">if</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">visit</span><span class="p">:</span>
                <span class="k">return</span> <span class="kc">False</span>
            <span class="n">visit</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">i</span><span class="p">)</span>
            <span class="k">for</span> <span class="n">j</span> <span class="ow">in</span> <span class="n">adj</span><span class="p">[</span><span class="n">i</span><span class="p">]:</span>
                <span class="k">if</span> <span class="n">j</span> <span class="o">==</span> <span class="n">prev</span><span class="p">:</span>
                    <span class="k">continue</span>
                <span class="k">if</span> <span class="ow">not</span> <span class="n">dfs</span><span class="p">(</span><span class="n">j</span><span class="p">,</span><span class="n">i</span><span class="p">):</span>
                    <span class="k">return</span> <span class="kc">False</span>
            <span class="k">return</span> <span class="kc">True</span>
        <span class="k">return</span> <span class="n">dfs</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span> <span class="ow">and</span> <span class="n">n</span> <span class="o">==</span> <span class="nb">len</span><span class="p">(</span><span class="n">visit</span><span class="p">)</span>



</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 200 Number of Islands</title>
			<link>https://www.dincerbakkal.com/posts/leetcode200/</link>
			<pubDate>Fri, 14 May 2021 20:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode200/</guid>
			<description>Given an m x n 2D binary grid grid which represents a map of &amp;lsquo;1&amp;rsquo;s (land) and &amp;lsquo;0&amp;rsquo;s (water), return the number of islands.
An island is surrounded by water and is formed by connecting adjacent lands horizontally or vertically. You may assume all four edges of the grid are all surrounded by water.
 Input: grid = [ [&amp;quot;1&amp;quot;,&amp;quot;1&amp;quot;,&amp;quot;1&amp;quot;,&amp;quot;1&amp;quot;,&amp;quot;0&amp;quot;], [&amp;quot;1&amp;quot;,&amp;quot;1&amp;quot;,&amp;quot;0&amp;quot;,&amp;quot;1&amp;quot;,&amp;quot;0&amp;quot;], [&amp;quot;1&amp;quot;,&amp;quot;1&amp;quot;,&amp;quot;0&amp;quot;,&amp;quot;0&amp;quot;,&amp;quot;0&amp;quot;], [&amp;quot;0&amp;quot;,&amp;quot;0&amp;quot;,&amp;quot;0&amp;quot;,&amp;quot;0&amp;quot;,&amp;quot;0&amp;quot;] ] Output: 1 Input: grid = [ [&amp;quot;1&amp;quot;,&amp;quot;1&amp;quot;,&amp;quot;0&amp;quot;,&amp;quot;0&amp;quot;,&amp;quot;0&amp;quot;], [&amp;quot;1&amp;quot;,&amp;quot;1&amp;quot;,&amp;quot;0&amp;quot;,&amp;quot;0&amp;quot;,&amp;quot;0&amp;quot;], [&amp;quot;0&amp;quot;,&amp;quot;0&amp;quot;,&amp;quot;1&amp;quot;,&amp;quot;0&amp;quot;,&amp;quot;0&amp;quot;], [&amp;quot;0&amp;quot;,&amp;quot;0&amp;quot;,&amp;quot;0&amp;quot;,&amp;quot;1&amp;quot;,&amp;quot;1&amp;quot;] ] Output: 3  This question can be solved by Depth First Search and it is very classic DFS question for list.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>Given an m x n 2D binary grid grid which represents a map of &lsquo;1&rsquo;s (land) and &lsquo;0&rsquo;s (water), return the number of islands.</p>
<p>An island is surrounded by water and is formed by connecting adjacent lands horizontally or vertically. You may assume all four edges of the grid are all surrounded by water.</p>
<!-- raw HTML omitted -->
<pre><code>
Input: grid = [
  [&quot;1&quot;,&quot;1&quot;,&quot;1&quot;,&quot;1&quot;,&quot;0&quot;],
  [&quot;1&quot;,&quot;1&quot;,&quot;0&quot;,&quot;1&quot;,&quot;0&quot;],
  [&quot;1&quot;,&quot;1&quot;,&quot;0&quot;,&quot;0&quot;,&quot;0&quot;],
  [&quot;0&quot;,&quot;0&quot;,&quot;0&quot;,&quot;0&quot;,&quot;0&quot;]
]
Output: 1

</code></pre><!-- raw HTML omitted -->
<pre><code>Input: grid = [
  [&quot;1&quot;,&quot;1&quot;,&quot;0&quot;,&quot;0&quot;,&quot;0&quot;],
  [&quot;1&quot;,&quot;1&quot;,&quot;0&quot;,&quot;0&quot;,&quot;0&quot;],
  [&quot;0&quot;,&quot;0&quot;,&quot;1&quot;,&quot;0&quot;,&quot;0&quot;],
  [&quot;0&quot;,&quot;0&quot;,&quot;0&quot;,&quot;1&quot;,&quot;1&quot;]
]
Output: 3

</code></pre><!-- raw HTML omitted -->
<ul>
<li>This question can be solved by Depth First Search and it is very classic DFS question for list.</li>
</ul>
<p>To find the number of islands, we need to move from left top to bottom right. For each move we can go up or right or down or left directions. After each move, if we are out of the bondary or we find water or we repeat the path then we return to last move and change to another direction to move until we find 1 island. After we find island, we update the count and start to find another island.</p>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">numIslands</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">grid</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]])</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
        <span class="k">if</span> <span class="ow">not</span> <span class="n">grid</span><span class="p">:</span> <span class="k">return</span> <span class="mi">0</span>
        <span class="n">row</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">grid</span><span class="p">)</span>
        <span class="n">col</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">grid</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
        <span class="n">visited</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
        <span class="n">count</span> <span class="o">=</span> <span class="mi">0</span>
        <span class="n">directions</span><span class="o">=</span><span class="p">[(</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="mi">0</span><span class="p">),(</span><span class="mi">0</span><span class="p">,</span><span class="mi">1</span><span class="p">),(</span><span class="mi">1</span><span class="p">,</span><span class="mi">0</span><span class="p">),(</span><span class="mi">0</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span><span class="p">)]</span>
        <span class="k">def</span> <span class="nf">findIsland</span><span class="p">(</span><span class="n">x</span><span class="p">,</span><span class="n">y</span><span class="p">):</span>
            <span class="k">for</span> <span class="n">dx</span><span class="p">,</span> <span class="n">dy</span> <span class="ow">in</span> <span class="n">directions</span><span class="p">:</span>
                <span class="n">nx</span><span class="p">,</span><span class="n">ny</span> <span class="o">=</span> <span class="n">x</span><span class="o">+</span><span class="n">dx</span><span class="p">,</span> <span class="n">y</span><span class="o">+</span><span class="n">dy</span>
                <span class="k">if</span> <span class="mi">0</span><span class="o">&lt;=</span><span class="n">nx</span><span class="o">&lt;</span><span class="n">row</span> <span class="ow">and</span> <span class="mi">0</span><span class="o">&lt;=</span><span class="n">ny</span><span class="o">&lt;</span><span class="n">col</span> <span class="ow">and</span> <span class="n">grid</span><span class="p">[</span><span class="n">nx</span><span class="p">][</span><span class="n">ny</span><span class="p">]</span><span class="o">==</span><span class="s1">&#39;1&#39;</span> <span class="ow">and</span> <span class="p">(</span><span class="n">nx</span><span class="p">,</span><span class="n">ny</span><span class="p">)</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">visited</span><span class="p">:</span>
                    <span class="n">visited</span><span class="o">.</span><span class="n">add</span><span class="p">((</span><span class="n">nx</span><span class="p">,</span><span class="n">ny</span><span class="p">))</span>
                    <span class="n">findIsland</span><span class="p">(</span><span class="n">nx</span><span class="p">,</span><span class="n">ny</span><span class="p">)</span>
            
        <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">row</span><span class="p">):</span>
            <span class="k">for</span> <span class="n">y</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">col</span><span class="p">):</span>
                <span class="k">if</span> <span class="n">grid</span><span class="p">[</span><span class="n">x</span><span class="p">][</span><span class="n">y</span><span class="p">]</span> <span class="o">==</span> <span class="s1">&#39;1&#39;</span> <span class="ow">and</span> <span class="p">(</span><span class="n">x</span><span class="p">,</span><span class="n">y</span><span class="p">)</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">visited</span><span class="p">:</span>
                    <span class="n">count</span> <span class="o">+=</span><span class="mi">1</span>
                    <span class="n">visited</span><span class="o">.</span><span class="n">add</span><span class="p">((</span><span class="n">x</span><span class="p">,</span><span class="n">y</span><span class="p">))</span>
                    <span class="n">findIsland</span><span class="p">(</span><span class="n">x</span><span class="p">,</span><span class="n">y</span><span class="p">)</span>         
        <span class="k">return</span> <span class="n">count</span>



</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 417 Pacific Atlantic Water Flow</title>
			<link>https://www.dincerbakkal.com/posts/leetcode417/</link>
			<pubDate>Thu, 13 May 2021 20:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode417/</guid>
			<description>There is an m x n rectangular island that borders both the Pacific Ocean and Atlantic Ocean. The Pacific Ocean touches the island&amp;rsquo;s left and top edges, and the Atlantic Ocean touches the island&amp;rsquo;s right and bottom edges.
The island is partitioned into a grid of square cells. You are given an m x n integer matrix heights where heights[r][c] represents the height above sea level of the cell at coordinate (r, c).</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>There is an m x n rectangular island that borders both the Pacific Ocean and Atlantic Ocean. The Pacific Ocean touches the island&rsquo;s left and top edges, and the Atlantic Ocean touches the island&rsquo;s right and bottom edges.</p>
<p>The island is partitioned into a grid of square cells. You are given an m x n integer matrix heights where heights[r][c] represents the height above sea level of the cell at coordinate (r, c).</p>
<p>The island receives a lot of rain, and the rain water can flow to neighboring cells directly north, south, east, and west if the neighboring cell&rsquo;s height is less than or equal to the current cell&rsquo;s height. Water can flow from any cell adjacent to an ocean into the ocean.</p>
<p>Return a 2D list of grid coordinates result where result[i] = [ri, ci] denotes that rain water can flow from cell (ri, ci) to both the Pacific and Atlantic oceans.</p>
<!-- raw HTML omitted -->
<pre><code>
<figure><img src="/image/417ex1.jpg"
         alt="image"/>
</figure>


Input: heights = [[1,2,2,3,5],[3,2,3,4,4],[2,4,5,3,1],[6,7,1,4,5],[5,1,1,2,4]]
Output: [[0,4],[1,3],[1,4],[2,2],[3,0],[3,1],[4,0]]

</code></pre><!-- raw HTML omitted -->
<pre><code>Input: heights = [[2,1],[1,2]]
Output: [[0,0],[0,1],[1,0],[1,1]]

</code></pre><!-- raw HTML omitted -->
<ul>
<li>Soruda bize bir matrix veriliyor ve bu matrixteki değerler dalga boylarını temsile ediyor.Resimde görüldüğü gibi üst ve solda pasifik okyanusu , sağ ve altta atlantik okyanus var. Dalganın değeri yanındaki dalgadan büyükse ilerleyip okyanusa kadar varabiliyor.Hangi kordinatlardaki dalgalar hem pasifik hem atlantik okyanusuna varabilir bulmamız isteniyor.</li>
<li></li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">pacificAtlantic</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">heights</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">]])</span> <span class="o">-&gt;</span> <span class="n">List</span><span class="p">[</span><span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">]]:</span>
        <span class="n">ROWS</span><span class="p">,</span> <span class="n">COLS</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">heights</span><span class="p">),</span> <span class="nb">len</span><span class="p">(</span><span class="n">heights</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
        <span class="n">pac</span><span class="p">,</span> <span class="n">atl</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(),</span> <span class="nb">set</span><span class="p">()</span>
        
        <span class="k">def</span> <span class="nf">dfs</span><span class="p">(</span><span class="n">r</span><span class="p">,</span><span class="n">c</span><span class="p">,</span><span class="n">visit</span><span class="p">,</span><span class="n">prevHeight</span><span class="p">):</span>
            <span class="k">if</span><span class="p">((</span><span class="n">r</span><span class="p">,</span><span class="n">c</span><span class="p">)</span> <span class="ow">in</span> <span class="n">visit</span> <span class="ow">or</span> <span class="n">r</span><span class="o">&lt;</span><span class="mi">0</span> <span class="ow">or</span> <span class="n">c</span><span class="o">&lt;</span><span class="mi">0</span> <span class="ow">or</span>
              <span class="n">r</span><span class="o">==</span> <span class="n">ROWS</span> <span class="ow">or</span> <span class="n">c</span><span class="o">==</span><span class="n">COLS</span> <span class="ow">or</span> <span class="n">heights</span><span class="p">[</span><span class="n">r</span><span class="p">][</span><span class="n">c</span><span class="p">]</span><span class="o">&lt;</span><span class="n">prevHeight</span><span class="p">):</span>
                <span class="k">return</span>
            <span class="n">visit</span><span class="o">.</span><span class="n">add</span><span class="p">((</span><span class="n">r</span><span class="p">,</span><span class="n">c</span><span class="p">))</span>
            <span class="n">dfs</span><span class="p">(</span><span class="n">r</span><span class="o">+</span><span class="mi">1</span><span class="p">,</span><span class="n">c</span><span class="p">,</span><span class="n">visit</span><span class="p">,</span> <span class="n">heights</span><span class="p">[</span><span class="n">r</span><span class="p">][</span><span class="n">c</span><span class="p">])</span>
            <span class="n">dfs</span><span class="p">(</span><span class="n">r</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="n">c</span><span class="p">,</span><span class="n">visit</span><span class="p">,</span> <span class="n">heights</span><span class="p">[</span><span class="n">r</span><span class="p">][</span><span class="n">c</span><span class="p">])</span>
            <span class="n">dfs</span><span class="p">(</span><span class="n">r</span><span class="p">,</span><span class="n">c</span><span class="o">+</span><span class="mi">1</span><span class="p">,</span><span class="n">visit</span><span class="p">,</span> <span class="n">heights</span><span class="p">[</span><span class="n">r</span><span class="p">][</span><span class="n">c</span><span class="p">])</span>
            <span class="n">dfs</span><span class="p">(</span><span class="n">r</span><span class="p">,</span><span class="n">c</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="n">visit</span><span class="p">,</span> <span class="n">heights</span><span class="p">[</span><span class="n">r</span><span class="p">][</span><span class="n">c</span><span class="p">])</span>
        
        <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">COLS</span><span class="p">):</span>
            <span class="n">dfs</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="n">c</span><span class="p">,</span><span class="n">pac</span><span class="p">,</span><span class="n">heights</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="n">c</span><span class="p">])</span>
            <span class="n">dfs</span><span class="p">(</span><span class="n">ROWS</span> <span class="o">-</span> <span class="mi">1</span><span class="p">,</span> <span class="n">c</span><span class="p">,</span> <span class="n">atl</span><span class="p">,</span> <span class="n">heights</span><span class="p">[</span><span class="n">ROWS</span> <span class="o">-</span> <span class="mi">1</span><span class="p">][</span><span class="n">c</span><span class="p">])</span>
        <span class="k">for</span> <span class="n">r</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">ROWS</span><span class="p">):</span>
            <span class="n">dfs</span><span class="p">(</span><span class="n">r</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="n">pac</span><span class="p">,</span><span class="n">heights</span><span class="p">[</span><span class="n">r</span><span class="p">][</span><span class="mi">0</span><span class="p">])</span>
            <span class="n">dfs</span><span class="p">(</span><span class="n">r</span><span class="p">,</span> <span class="n">COLS</span> <span class="o">-</span> <span class="mi">1</span><span class="p">,</span> <span class="n">atl</span><span class="p">,</span> <span class="n">heights</span><span class="p">[</span><span class="n">r</span><span class="p">][</span><span class="n">COLS</span> <span class="o">-</span> <span class="mi">1</span><span class="p">])</span>
        
        <span class="n">res</span> <span class="o">=</span> <span class="p">[]</span>
        <span class="k">for</span> <span class="n">r</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">ROWS</span><span class="p">):</span>
            <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">COLS</span><span class="p">):</span>
                <span class="k">if</span> <span class="p">(</span><span class="n">r</span><span class="p">,</span><span class="n">c</span><span class="p">)</span> <span class="ow">in</span> <span class="n">pac</span> <span class="ow">and</span> <span class="p">(</span><span class="n">r</span><span class="p">,</span><span class="n">c</span><span class="p">)</span> <span class="ow">in</span> <span class="n">atl</span><span class="p">:</span>
                    <span class="n">res</span><span class="o">.</span><span class="n">append</span><span class="p">([</span><span class="n">r</span><span class="p">,</span><span class="n">c</span><span class="p">])</span>
        <span class="k">return</span> <span class="n">res</span>



</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 133 Clone Graph</title>
			<link>https://www.dincerbakkal.com/posts/leetcode133/</link>
			<pubDate>Wed, 12 May 2021 20:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode133/</guid>
			<description>Given a reference of a node in a connected undirected graph.
Return a deep copy (clone) of the graph.
Each node in the graph contains a value (int) and a list (List[Node]) of its neighbors.
class Node { public int val; public Listneighbors; }
Test case format:
For simplicity, each node&amp;rsquo;s value is the same as the node&amp;rsquo;s index (1-indexed). For example, the first node with val == 1, the second node with val == 2, and so on.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>Given a reference of a node in a connected undirected graph.</p>
<p>Return a deep copy (clone) of the graph.</p>
<p>Each node in the graph contains a value (int) and a list (List[Node]) of its neighbors.</p>
<p>class Node {
public int val;
public List<!-- raw HTML omitted --> neighbors;
}</p>
<p>Test case format:</p>
<p>For simplicity, each node&rsquo;s value is the same as the node&rsquo;s index (1-indexed). For example, the first node with val == 1, the second node with val == 2, and so on. The graph is represented in the test case using an adjacency list.</p>
<p>An adjacency list is a collection of unordered lists used to represent a finite graph. Each list describes the set of neighbors of a node in the graph.</p>
<p>The given node will always be the first node with val = 1. You must return the copy of the given node as a reference to the cloned graph.</p>
<!-- raw HTML omitted -->
<pre><code>
<figure><img src="/image/133ex1.png"
         alt="image"/>
</figure>


Input: adjList = [[2,4],[1,3],[2,4],[1,3]]
Output: [[2,4],[1,3],[2,4],[1,3]]
Explanation: There are 4 nodes in the graph.
1st node (val = 1)'s neighbors are 2nd node (val = 2) and 4th node (val = 4).
2nd node (val = 2)'s neighbors are 1st node (val = 1) and 3rd node (val = 3).
3rd node (val = 3)'s neighbors are 2nd node (val = 2) and 4th node (val = 4).
4th node (val = 4)'s neighbors are 1st node (val = 1) and 3rd node (val = 3).

</code></pre><!-- raw HTML omitted -->
<pre><code>Input: adjList = [[]]
Output: [[]]
Explanation: Note that the input contains one empty list. The graph consists of only one node with val = 1 and it does not have any neighbors.

</code></pre><!-- raw HTML omitted -->
<p>Using breadth first search, we need to pay attention to the problem of undirected edges. Here, the hash table is also used to store the nodes that have been accessed and the corresponding clone nodes. The following is the specific algorithm:</p>
<p>Hash table is used to store the nodes that have been accessed and the corresponding clone nodes;
Clone the given node and store it in the hash table. At the same time, with the help of auxiliary queue, the given node is put into the queue first.
Out of the queue, access all the adjacent points of the node. If the node is not in the hash table, the adjacent points of the cloned current node are stored in the hash table. At the same time, the adjacent node is queued and placed in the adjacent table of the corresponding node in the clone graph.
Repeat until the queue is empty, indicating the end of graph traversal.</p>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">cloneGraph</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">node</span><span class="p">:</span> <span class="s1">&#39;Node&#39;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="s1">&#39;Node&#39;</span><span class="p">:</span>
        <span class="n">oldToNew</span> <span class="o">=</span> <span class="p">{}</span>
        
        <span class="k">def</span> <span class="nf">dfs</span><span class="p">(</span><span class="n">node</span><span class="p">):</span>
            <span class="k">if</span> <span class="n">node</span> <span class="ow">in</span> <span class="n">oldToNew</span><span class="p">:</span>
                <span class="k">return</span> <span class="n">oldToNew</span><span class="p">[</span><span class="n">node</span><span class="p">]</span>
            
            <span class="n">copy</span> <span class="o">=</span> <span class="n">Node</span><span class="p">(</span><span class="n">node</span><span class="o">.</span><span class="n">val</span><span class="p">)</span>
            <span class="n">oldToNew</span><span class="p">[</span><span class="n">node</span><span class="p">]</span> <span class="o">=</span> <span class="n">copy</span>
            <span class="k">for</span> <span class="n">nei</span> <span class="ow">in</span> <span class="n">node</span><span class="o">.</span><span class="n">neighbors</span><span class="p">:</span>
                <span class="n">copy</span><span class="o">.</span><span class="n">neighbors</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">dfs</span><span class="p">(</span><span class="n">nei</span><span class="p">))</span>
            <span class="k">return</span> <span class="n">copy</span>
        <span class="k">return</span> <span class="n">dfs</span><span class="p">(</span><span class="n">node</span><span class="p">)</span> <span class="k">if</span> <span class="n">node</span> <span class="k">else</span> <span class="kc">None</span>



</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 143 Reorder List</title>
			<link>https://www.dincerbakkal.com/posts/leetcode143/</link>
			<pubDate>Tue, 11 May 2021 20:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode143/</guid>
			<description>Soru You are given the head of a singly linked-list. The list can be represented as:
L0 → L1 → … → Ln - 1 → Ln Reorder the list to be on the following form:
L0 → Ln → L1 → Ln - 1 → L2 → Ln - 2 → … You may not modify the values in the list&amp;rsquo;s nodes. Only nodes themselves may be changed.
Örnek 1   Input: head = [1,2,3,4] Output: [1,4,2,3] Örnek 2  Input: head = [1,2,3,4,5] Output: [1,5,2,4,3] Çözüm  Verilen bir tek yönlü bağlı listenin düğümlerini özel bir sırayla yeniden düzenlemenizi ister.</description>
			<content type="html"><![CDATA[<h3 id="soru">Soru</h3>
<p>You are given the head of a singly linked-list. The list can be represented as:</p>
<p>L0 → L1 → … → Ln - 1 → Ln
Reorder the list to be on the following form:</p>
<p>L0 → Ln → L1 → Ln - 1 → L2 → Ln - 2 → …
You may not modify the values in the list&rsquo;s nodes. Only nodes themselves may be changed.</p>
<h3 id="örnek-1">Örnek 1</h3>
<pre><code>
<figure><img src="/image/143ex1.jpg"
         alt="image"/>
</figure>


Input: head = [1,2,3,4]
Output: [1,4,2,3]

</code></pre><h3 id="örnek-2">Örnek 2</h3>
<pre><code><figure><img src="/image/143ex2.jpg"
         alt="image"/>
</figure>


Input: head = [1,2,3,4,5]
Output: [1,5,2,4,3]

</code></pre><h3 id="çözüm">Çözüm</h3>
<ul>
<li>Verilen bir tek yönlü bağlı listenin düğümlerini özel bir sırayla yeniden düzenlemenizi ister. Bu problemde, listenin ilk elemanını son eleman, ikinci elemanı sondan ikinci eleman ve bu şekilde devam edecek biçimde yeniden düzenlenmesi gerekiyor.</li>
<li>Girdi: Tek yönlü bir bağlı listenin baş düğümü (head).</li>
<li>Çıktı: Düğümler yukarıda açıklanan sırayla yeniden düzenlenmiş liste. Fonksiyon dönüş değeri olmadan listeyi yerinde (in-place) değiştirmelidir.</li>
<li>Çalışma Mekanizması:</li>
<li>Listeyi Ortadan Bölmek: Hızlı ve yavaş işaretçiler kullanılarak liste ortadan ikiye bölünür. Hızlı işaretçi her adımda iki düğüm, yavaş işaretçi bir düğüm ilerler.</li>
<li>Listeyi Ters Çevirmek: İkinci yarının başlangıcından itibaren liste sonuna kadar düğümler ters çevrilir.</li>
<li>Listeleri Birleştirmek: İlk liste ile tersine çevrilmiş ikinci liste, özellikle belirtilen sırayla birleştirilir. Bu işlem sırasında, birinci listeden bir düğüm, ikinci listeden bir düğüm şeklinde ilerlenir.</li>
</ul>
<h2 id="code">Code</h2>
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">class</span> <span class="nc">ListNode</span><span class="p">:</span>
    <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">val</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="nb">next</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">val</span> <span class="o">=</span> <span class="n">val</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">next</span> <span class="o">=</span> <span class="nb">next</span>

<span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">reorderList</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">head</span><span class="p">):</span>
        <span class="k">if</span> <span class="ow">not</span> <span class="n">head</span><span class="p">:</span>
            <span class="k">return</span>
        
        <span class="c1"># Adım 1: Orta noktayı bul</span>
        <span class="n">slow</span><span class="p">,</span> <span class="n">fast</span> <span class="o">=</span> <span class="n">head</span><span class="p">,</span> <span class="n">head</span>
        <span class="k">while</span> <span class="n">fast</span> <span class="ow">and</span> <span class="n">fast</span><span class="o">.</span><span class="n">next</span><span class="p">:</span>
            <span class="n">slow</span> <span class="o">=</span> <span class="n">slow</span><span class="o">.</span><span class="n">next</span>
            <span class="n">fast</span> <span class="o">=</span> <span class="n">fast</span><span class="o">.</span><span class="n">next</span><span class="o">.</span><span class="n">next</span>
        
        <span class="c1"># Adım 2: İkinci yarısını ters çevir</span>
        <span class="n">prev</span><span class="p">,</span> <span class="n">curr</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="n">slow</span>
        <span class="k">while</span> <span class="n">curr</span><span class="p">:</span>
            <span class="n">next_temp</span> <span class="o">=</span> <span class="n">curr</span><span class="o">.</span><span class="n">next</span>
            <span class="n">curr</span><span class="o">.</span><span class="n">next</span> <span class="o">=</span> <span class="n">prev</span>
            <span class="n">prev</span> <span class="o">=</span> <span class="n">curr</span>
            <span class="n">curr</span> <span class="o">=</span> <span class="n">next_temp</span>
        
        <span class="c1"># Adım 3: İki listeyi birleştir</span>
        <span class="n">first</span><span class="p">,</span> <span class="n">second</span> <span class="o">=</span> <span class="n">head</span><span class="p">,</span> <span class="n">prev</span>
        <span class="k">while</span> <span class="n">second</span><span class="o">.</span><span class="n">next</span><span class="p">:</span>
            <span class="n">temp1</span><span class="p">,</span> <span class="n">temp2</span> <span class="o">=</span> <span class="n">first</span><span class="o">.</span><span class="n">next</span><span class="p">,</span> <span class="n">second</span><span class="o">.</span><span class="n">next</span>
            <span class="n">first</span><span class="o">.</span><span class="n">next</span> <span class="o">=</span> <span class="n">second</span>
            <span class="n">second</span><span class="o">.</span><span class="n">next</span> <span class="o">=</span> <span class="n">temp1</span>
            <span class="n">first</span><span class="p">,</span> <span class="n">second</span> <span class="o">=</span> <span class="n">temp1</span><span class="p">,</span> <span class="n">temp2</span>

</code></pre></div><h3 id="complexity">Complexity</h3>
<ul>
<li>Time complexity (Zaman Karmaşıklığı): O(n), burada n bağlı listenin düğüm sayısıdır. Listenin ortasını bulmak, ikinci yarısını tersine çevirmek ve listeleri birleştirmek lineer zaman alır.</li>
<li>Space complexity (Alan Karmaşıklığı): O(1), çünkü ek alan kullanılmaz; tüm değişiklikler mevcut liste üzerinde yerinde gerçekleştirilir.</li>
</ul>
]]></content>
		</item>
		
		<item>
			<title>Leetcode 148 Sort List</title>
			<link>https://www.dincerbakkal.com/posts/leetcode148/</link>
			<pubDate>Mon, 10 May 2021 20:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode148/</guid>
			<description>Given the head of a linked list, return the list after sorting it in ascending order.
  Input: head = [4,2,1,3] Output: [1,2,3,4]  Input: head = [-1,5,3,4,0] Output: [-1,0,3,4,5] Input: head = [] Output: []   Soruda bizden karışık olarak verilen linked listi küçükten büyüğe doğru sıralamamız isteniyor. Bunun için mergesort sıralamasını kullanabiliriz.T.C. nlogn dir. Mergesort için linkedlist ortadan ikiye bölüp iki yeni liste oluştururuz.Ve bu listeleri kendi içinde tekrar küçükten büyüğe sıralarız.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>Given the head of a linked list, return the list after sorting it in ascending order.</p>
<!-- raw HTML omitted -->
<pre><code>
<figure><img src="/image/148ex1.jpg"
         alt="image"/>
</figure>


Input: head = [4,2,1,3]
Output: [1,2,3,4]

</code></pre><!-- raw HTML omitted -->
<pre><code><figure><img src="/image/148ex2.jpg"
         alt="image"/>
</figure>


Input: head = [-1,5,3,4,0]
Output: [-1,0,3,4,5]

</code></pre><!-- raw HTML omitted -->
<pre><code>Input: head = []
Output: []

</code></pre><!-- raw HTML omitted -->
<figure><img src="/image/148sol1.png"
         alt="image"/>
</figure>

<ul>
<li>Soruda bizden karışık olarak verilen linked listi küçükten büyüğe doğru sıralamamız isteniyor.</li>
<li>Bunun için mergesort sıralamasını kullanabiliriz.T.C. nlogn dir.</li>
<li>Mergesort için linkedlist ortadan ikiye bölüp iki yeni liste oluştururuz.Ve bu listeleri kendi içinde tekrar küçükten büyüğe sıralarız.</li>
<li>Yani rekürsif olarak sortList fonksiyonunu tekrar ,tekrar çağırırız.</li>
<li>Son olarakta merge fonksiyonu ile bölünmüş listeleri birleştiririz.</li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">sortList</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">head</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">ListNode</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">Optional</span><span class="p">[</span><span class="n">ListNode</span><span class="p">]:</span>
        <span class="k">if</span> <span class="ow">not</span> <span class="n">head</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">head</span><span class="o">.</span><span class="n">next</span><span class="p">:</span>
            <span class="k">return</span> <span class="n">head</span>
        
        <span class="c1">#listeyi ikiye bölelim</span>
        <span class="n">left</span> <span class="o">=</span> <span class="n">head</span>
        <span class="n">right</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">getMid</span><span class="p">(</span><span class="n">head</span><span class="p">)</span>
        <span class="n">tmp</span> <span class="o">=</span> <span class="n">right</span><span class="o">.</span><span class="n">next</span>
        <span class="n">right</span><span class="o">.</span><span class="n">next</span> <span class="o">=</span> <span class="kc">None</span>
        <span class="n">right</span> <span class="o">=</span> <span class="n">tmp</span>
        
        <span class="n">left</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sortList</span><span class="p">(</span><span class="n">left</span><span class="p">)</span>
        <span class="n">right</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sortList</span><span class="p">(</span><span class="n">right</span><span class="p">)</span>
        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">merge</span><span class="p">(</span><span class="n">left</span><span class="p">,</span><span class="n">right</span><span class="p">)</span>
    
    <span class="k">def</span> <span class="nf">getMid</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">head</span><span class="p">):</span>
        <span class="n">slow</span><span class="p">,</span><span class="n">fast</span> <span class="o">=</span> <span class="n">head</span><span class="p">,</span> <span class="n">head</span><span class="o">.</span><span class="n">next</span>
        <span class="k">while</span> <span class="n">fast</span> <span class="ow">and</span> <span class="n">fast</span><span class="o">.</span><span class="n">next</span><span class="p">:</span>
            <span class="n">slow</span> <span class="o">=</span> <span class="n">slow</span><span class="o">.</span><span class="n">next</span>
            <span class="n">fast</span> <span class="o">=</span> <span class="n">fast</span><span class="o">.</span><span class="n">next</span><span class="o">.</span><span class="n">next</span>
        <span class="k">return</span> <span class="n">slow</span>
    
    <span class="k">def</span> <span class="nf">merge</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">list1</span><span class="p">,</span><span class="n">list2</span><span class="p">):</span>
        <span class="n">tail</span> <span class="o">=</span> <span class="n">dummy</span> <span class="o">=</span> <span class="n">ListNode</span><span class="p">()</span>
        <span class="k">while</span> <span class="n">list1</span> <span class="ow">and</span> <span class="n">list2</span><span class="p">:</span>
            <span class="k">if</span> <span class="n">list1</span><span class="o">.</span><span class="n">val</span><span class="o">&lt;</span><span class="n">list2</span><span class="o">.</span><span class="n">val</span><span class="p">:</span>
                <span class="n">tail</span><span class="o">.</span><span class="n">next</span> <span class="o">=</span> <span class="n">list1</span>
                <span class="n">list1</span> <span class="o">=</span> <span class="n">list1</span><span class="o">.</span><span class="n">next</span>
            <span class="k">else</span><span class="p">:</span>
                <span class="n">tail</span><span class="o">.</span><span class="n">next</span> <span class="o">=</span> <span class="n">list2</span>
                <span class="n">list2</span> <span class="o">=</span> <span class="n">list2</span><span class="o">.</span><span class="n">next</span>
            <span class="n">tail</span> <span class="o">=</span> <span class="n">tail</span><span class="o">.</span><span class="n">next</span>
        <span class="k">if</span> <span class="n">list1</span><span class="p">:</span>
            <span class="n">tail</span><span class="o">.</span><span class="n">next</span> <span class="o">=</span> <span class="n">list1</span>
        <span class="k">if</span> <span class="n">list2</span><span class="p">:</span>
            <span class="n">tail</span><span class="o">.</span><span class="n">next</span> <span class="o">=</span> <span class="n">list2</span>
        <span class="k">return</span> <span class="n">dummy</span><span class="o">.</span><span class="n">next</span>



</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 019 Remove Nth Node From End of List</title>
			<link>https://www.dincerbakkal.com/posts/leetcode019/</link>
			<pubDate>Sun, 09 May 2021 20:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode019/</guid>
			<description>Soru Given the head of a linked list, remove the nth node from the end of the list and return its head.
Örnek 1   Input: head = [1,2,3,4,5], n = 2 Output: [1,2,3,5] Örnek 2 Input: head = [1], n = 1 Output: [] Örnek 3 Input: head = [1,2], n = 1 Output: [1] Çözüm  Tek yönlü bir bağlı listeden sonundan n&amp;rsquo;inci düğümü silmenizi ister. Bu problem, verilen bir bağlı listenin sonundan n&amp;rsquo;inci düğümün kaldırılmasını ve listenin güncellenmiş baş düğümünün döndürülmesini gerektirir.</description>
			<content type="html"><![CDATA[<h3 id="soru">Soru</h3>
<p>Given the head of a linked list, remove the nth node from the end of the list and return its head.</p>
<h3 id="örnek-1">Örnek 1</h3>
<pre><code>
<figure><img src="/image/019ex1.jpg"
         alt="image"/>
</figure>


Input: head = [1,2,3,4,5], n = 2
Output: [1,2,3,5]

</code></pre><h3 id="örnek-2">Örnek 2</h3>
<pre><code>Input: head = [1], n = 1
Output: []

</code></pre><h3 id="örnek-3">Örnek 3</h3>
<pre><code>Input: head = [1,2], n = 1
Output: [1]

</code></pre><h3 id="çözüm">Çözüm</h3>
<ul>
<li>Tek yönlü bir bağlı listeden sonundan n&rsquo;inci düğümü silmenizi ister. Bu problem, verilen bir bağlı listenin sonundan n&rsquo;inci düğümün kaldırılmasını ve listenin güncellenmiş baş düğümünün döndürülmesini gerektirir.</li>
<li>Girdi: Tek yönlü bir bağlı listenin baş düğümü (head) ve bir tam sayı n.</li>
<li>Çıktı: Sonundan n&rsquo;inci düğüm çıkarılmış bağlı liste.</li>
<li>Bu problemi çözmek için sıkça kullanılan bir yöntem, iki işaretçi tekniği kullanmaktır. İki işaretçi (pointer) arasında sabit bir aralık (n düğüm) korunarak, birinci işaretçi listenin sonuna ulaştığında, ikinci işaretçi silinecek düğümün bir öncesinde olacak şekilde ayarlanır. Bu teknik, liste boyunca yalnızca bir kez geçilmesini sağlar, bu da işlemi verimli kılar.</li>
<li>Çalışma Mekanizması:</li>
<li>Dummy Düğüm Kullanımı: Silinecek düğüm baş düğüm olduğunda, baş düğümün kolayca güncellenebilmesi için bir dummy düğüm kullanılır.</li>
<li>İki İşaretçi Arasındaki Mesafe: İlk işaretçi, ikinci işaretçiden n+1 düğüm ileri taşınır. Bu, ikinci işaretçinin, silinecek düğümün bir öncesinde kalmasını sağlar.</li>
<li>İşaretçilerin İlerletilmesi: İlk işaretçi listenin sonuna ulaşana kadar her iki işaretçi de birer düğüm ileri taşınır.</li>
<li>Düğümün Çıkarılması: İkinci işaretçi, silinecek düğümün bir öncesindedir. Bu düğümün next işaretçisi, silinecek düğümü atlayacak şekilde güncellenir.</li>
<li>Sonuç: Dummy&rsquo;nin next özelliği, güncellenmiş listeyi gösterir ve bu değer döndürülür.</li>
</ul>
<h2 id="code">Code</h2>
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">class</span> <span class="nc">ListNode</span><span class="p">:</span>
    <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">val</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="nb">next</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">val</span> <span class="o">=</span> <span class="n">val</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">next</span> <span class="o">=</span> <span class="nb">next</span>

<span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">removeNthFromEnd</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">head</span><span class="p">,</span> <span class="n">n</span><span class="p">):</span>
        <span class="n">dummy</span> <span class="o">=</span> <span class="n">ListNode</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>  <span class="c1"># Dummy düğüm, edge case&#39;leri kolaylaştırır</span>
        <span class="n">dummy</span><span class="o">.</span><span class="n">next</span> <span class="o">=</span> <span class="n">head</span>
        <span class="n">first</span> <span class="o">=</span> <span class="n">dummy</span>
        <span class="n">second</span> <span class="o">=</span> <span class="n">dummy</span>

        <span class="c1"># İlk işaretçiyi n+1 düğüm ileri taşı</span>
        <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">n</span><span class="o">+</span><span class="mi">1</span><span class="p">):</span>
            <span class="n">first</span> <span class="o">=</span> <span class="n">first</span><span class="o">.</span><span class="n">next</span>

        <span class="c1"># İlk işaretçi sona ulaşana kadar ilerle</span>
        <span class="k">while</span> <span class="n">first</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
            <span class="n">first</span> <span class="o">=</span> <span class="n">first</span><span class="o">.</span><span class="n">next</span>
            <span class="n">second</span> <span class="o">=</span> <span class="n">second</span><span class="o">.</span><span class="n">next</span>

        <span class="c1"># n&#39;inci düğümü çıkar</span>
        <span class="n">second</span><span class="o">.</span><span class="n">next</span> <span class="o">=</span> <span class="n">second</span><span class="o">.</span><span class="n">next</span><span class="o">.</span><span class="n">next</span>

        <span class="k">return</span> <span class="n">dummy</span><span class="o">.</span><span class="n">next</span>



</code></pre></div><h3 id="complexity">Complexity</h3>
<ul>
<li>Time complexity (Zaman Karmaşıklığı): O(L), burada L bağlı listenin uzunluğudur. Liste baştan sona bir kez taranır.</li>
<li>Space complexity (Alan Karmaşıklığı): O(1), çünkü sabit miktarda ekstra alan kullanılır; algoritma yerinde çalışır.</li>
</ul>
]]></content>
		</item>
		
		<item>
			<title>Leetcode 138 Copy List with Random Pointer</title>
			<link>https://www.dincerbakkal.com/posts/leetcode138/</link>
			<pubDate>Sun, 09 May 2021 20:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode138/</guid>
			<description>Soru A linked list of length n is given such that each node contains an additional random pointer, which could point to any node in the list, or null.
Construct a deep copy of the list. The deep copy should consist of exactly n brand new nodes, where each new node has its value set to the value of its corresponding original node. Both the next and random pointer of the new nodes should point to new nodes in the copied list such that the pointers in the original list and copied list represent the same list state.</description>
			<content type="html"><![CDATA[<h3 id="soru">Soru</h3>
<p>A linked list of length n is given such that each node contains an additional random pointer, which could point to any node in the list, or null.</p>
<p>Construct a deep copy of the list. The deep copy should consist of exactly n brand new nodes, where each new node has its value set to the value of its corresponding original node. Both the next and random pointer of the new nodes should point to new nodes in the copied list such that the pointers in the original list and copied list represent the same list state. None of the pointers in the new list should point to nodes in the original list.</p>
<p>For example, if there are two nodes X and Y in the original list, where X.random &ndash;&gt; Y, then for the corresponding two nodes x and y in the copied list, x.random &ndash;&gt; y.</p>
<p>Return the head of the copied linked list.</p>
<p>The linked list is represented in the input/output as a list of n nodes. Each node is represented as a pair of [val, random_index] where:</p>
<ul>
<li>
<p>val: an integer representing Node.val</p>
</li>
<li>
<p>random_index: the index of the node (range from 0 to n-1) that the random pointer points to, or null if it does not point to any node.</p>
</li>
<li>
<p>Your code will only be given the head of the original linked list.</p>
</li>
</ul>
<h3 id="örnek-1">Örnek 1</h3>
<pre><code>
<figure><img src="/image/138ex1.jpg"
         alt="image"/>
</figure>


Input: head = [[7,null],[13,0],[11,4],[10,2],[1,0]]
Output: [[7,null],[13,0],[11,4],[10,2],[1,0]]

</code></pre><h3 id="örnek-2">Örnek 2</h3>
<pre><code>
<figure><img src="/image/138ex2.jpg"
         alt="image"/>
</figure>


Input: head = [[1,1],[2,1]]
Output: [[1,1],[2,1]]

</code></pre><h3 id="örnek-3">Örnek 3</h3>
<pre><code>
<figure><img src="/image/138ex3.jpg"
         alt="image"/>
</figure>


Input: head = [[3,null],[3,0],[3,null]]
Output: [[3,null],[3,0],[3,null]]

</code></pre><h3 id="çözüm">Çözüm</h3>
<ul>
<li>Her düğümün iki işaretçi (pointer) içerdiği bir bağlı listede derin bir kopya (deep copy) yapmanızı ister. Bir işaretçi bir sonraki düğüme (next) işaret ederken, diğer işaretçi (random) liste içindeki herhangi bir düğüme veya hiçbir şeye işaret edebilir.</li>
<li>Girdi: head, Node türünden bir bağlı listenin baş düğümü. Her Node iki işaretçi içerir: next ve random.</li>
<li>Çıktı: Girilen bağlı listenin bir derin kopyası.</li>
<li>Bu problemi çözmek için birkaç yaklaşım mevcuttur, ancak en yaygın olanı, liste üzerinde iki geçiş yaparak çözmektir:</li>
<li>İlk Geçiş:Her düğüm için, yeni bir kopya düğümü oluşturun ve orijinal düğüm ile yeni düğüm arasına yerleştirin. Bu, original_node.next = copy_node ve copy_node.next = original_node.next şeklinde yapılır. Bu adım, yeni düğümlerin orijinal düğümlerin hemen ardına eklenmesini sağlar.</li>
<li>İkinci Geçiş:random işaretçilerini güncelleyin. Orijinal düğümün random işaretçisi varsa, kopya düğümün random işaretçisi original_node.random.next olacaktır. Bu, yeni oluşturulan kopya düğümlere doğru işaret etmelerini sağlar.</li>
<li>Üçüncü Geçiş:Kopya düğümleri orijinal düğümlerden ayırın ve kopya listesinin head&rsquo;ini döndürün.</li>
<li>Çalışma Mekanizması:</li>
<li>Her orijinal düğüm için, yeni bir kopya düğüm oluşturulur ve bu, orijinal düğümün next&rsquo;ine yerleştirilir.</li>
<li>random işaretçiler, uygun şekilde kopyalanır.</li>
<li>Liste ikiye ayrılarak orijinal ve kopya listeler ayrıştırılır.</li>
</ul>
<h2 id="code">Code</h2>
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">class</span> <span class="nc">Node</span><span class="p">:</span>
    <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">val</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="nb">next</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">random</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">val</span> <span class="o">=</span> <span class="n">val</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">next</span> <span class="o">=</span> <span class="nb">next</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">random</span> <span class="o">=</span> <span class="n">random</span>

<span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">copyRandomList</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">head</span><span class="p">):</span>
        <span class="k">if</span> <span class="ow">not</span> <span class="n">head</span><span class="p">:</span>
            <span class="k">return</span> <span class="kc">None</span>

        <span class="c1"># İlk Geçiş: Yeni düğümleri oluştur ve orijinal düğümlerin arasına ekle</span>
        <span class="n">current</span> <span class="o">=</span> <span class="n">head</span>
        <span class="k">while</span> <span class="n">current</span><span class="p">:</span>
            <span class="n">new_node</span> <span class="o">=</span> <span class="n">Node</span><span class="p">(</span><span class="n">current</span><span class="o">.</span><span class="n">val</span><span class="p">,</span> <span class="n">current</span><span class="o">.</span><span class="n">next</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
            <span class="n">current</span><span class="o">.</span><span class="n">next</span> <span class="o">=</span> <span class="n">new_node</span>
            <span class="n">current</span> <span class="o">=</span> <span class="n">new_node</span><span class="o">.</span><span class="n">next</span>

        <span class="c1"># İkinci Geçiş: Random işaretçileri kopyala</span>
        <span class="n">current</span> <span class="o">=</span> <span class="n">head</span>
        <span class="k">while</span> <span class="n">current</span><span class="p">:</span>
            <span class="k">if</span> <span class="n">current</span><span class="o">.</span><span class="n">random</span><span class="p">:</span>
                <span class="n">current</span><span class="o">.</span><span class="n">next</span><span class="o">.</span><span class="n">random</span> <span class="o">=</span> <span class="n">current</span><span class="o">.</span><span class="n">random</span><span class="o">.</span><span class="n">next</span>
            <span class="n">current</span> <span class="o">=</span> <span class="n">current</span><span class="o">.</span><span class="n">next</span><span class="o">.</span><span class="n">next</span>

        <span class="c1"># Üçüncü Geçiş: Listeyi ayır ve kopya listeyi döndür</span>
        <span class="n">current</span> <span class="o">=</span> <span class="n">head</span>
        <span class="n">copy_head</span> <span class="o">=</span> <span class="n">head</span><span class="o">.</span><span class="n">next</span>
        <span class="k">while</span> <span class="n">current</span><span class="p">:</span>
            <span class="n">temp</span> <span class="o">=</span> <span class="n">current</span><span class="o">.</span><span class="n">next</span>
            <span class="n">current</span><span class="o">.</span><span class="n">next</span> <span class="o">=</span> <span class="n">temp</span><span class="o">.</span><span class="n">next</span>
            <span class="k">if</span> <span class="n">temp</span><span class="o">.</span><span class="n">next</span><span class="p">:</span>
                <span class="n">temp</span><span class="o">.</span><span class="n">next</span> <span class="o">=</span> <span class="n">temp</span><span class="o">.</span><span class="n">next</span><span class="o">.</span><span class="n">next</span>
            <span class="n">current</span> <span class="o">=</span> <span class="n">current</span><span class="o">.</span><span class="n">next</span>

        <span class="k">return</span> <span class="n">copy_head</span>

</code></pre></div><h3 id="complexity">Complexity</h3>
<ul>
<li>Time complexity (Zaman Karmaşıklığı): O(n), burada n, liste içindeki düğüm sayısıdır. Her düğüm için birkaç kez geçiş yapılır.</li>
<li>Space complexity (Alan Karmaşıklığı): O(1), ekstra alan yalnızca yeni düğümler için kullanılır; ek bir veri yapısı kullanılmaz.</li>
</ul>
]]></content>
		</item>
		
		<item>
			<title>Leetcode 002 Add Two Numbers</title>
			<link>https://www.dincerbakkal.com/posts/leetcode002/</link>
			<pubDate>Sat, 08 May 2021 20:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode002/</guid>
			<description>Soru You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order, and each of their nodes contains a single digit. Add the two numbers and return the sum as a linked list.
You may assume the two numbers do not contain any leading zero, except the number 0 itself.
Örnek 1   Input: l1 = [2,4,3], l2 = [5,6,4] Output: [7,0,8] Explanation: 342 + 465 = 807.</description>
			<content type="html"><![CDATA[<h3 id="soru">Soru</h3>
<p>You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order, and each of their nodes contains a single digit. Add the two numbers and return the sum as a linked list.</p>
<p>You may assume the two numbers do not contain any leading zero, except the number 0 itself.</p>
<h3 id="örnek-1">Örnek 1</h3>
<pre><code>
<figure><img src="/image/002ex1.jpg"
         alt="image"/>
</figure>


Input: l1 = [2,4,3], l2 = [5,6,4]
Output: [7,0,8]
Explanation: 342 + 465 = 807.

</code></pre><h3 id="örnek-2">Örnek 2</h3>
<pre><code>Input: l1 = [0], l2 = [0]
Output: [0]

</code></pre><h3 id="örnek-3">Örnek 3</h3>
<pre><code>Input: l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]
Output: [8,9,9,9,0,0,0,1]

</code></pre><h3 id="çözüm">Çözüm</h3>
<ul>
<li>İki bağlı liste olarak temsil edilen iki sayıyı toplamanızı ister. Bu bağlı listeler, ters çevrilmiş sırayla sayıların basamaklarını tutar; yani, her liste başındaki düğüm bir sayının en düşük basamağını temsil eder ve her düğüm tek bir basamak tutar. Sorunun amacı, bu iki sayının toplamını aynı şekilde ters çevrilmiş bir bağlı liste olarak döndürmektir.</li>
<li>Girdi: İki bağlı liste baş düğümü l1 ve l2. Her düğüm, bir tam sayı değer (0 ile 9 arası) tutar ve her liste en az bir düğüm içerir.</li>
<li>Çıktı: İki sayının toplamını temsil eden, yeni bir ters çevrilmiş bağlı liste.</li>
<li>Bu problemi çözmek için, iki liste üzerinde bir işaretçi kullanarak basamak basamak ilerler ve gerekirse taşıma (carry) uygularsınız. Yeni oluşturulan listenin her düğümü, karşılık gelen basamakların toplamını (ve varsa bir önceki taşımayı) içerir.</li>
<li>Çalışma Mekanizması:</li>
<li>Başlangıç Koşulları: dummy düğüm başlatılır ki, bu yeni oluşturulan sonucun başlangıcını işaret eder. current işaretçisi bu liste üzerinde hareket eder.</li>
<li>Toplama ve Taşıma Yönetimi: Her iterasyonda, l1 ve l2den değerler alınır (liste sonunda yoksa 0 alınır). Bu değerler ve bir önceki taşımadan gelen değer toplanır. Toplamın 10&rsquo;a bölümünden taşıma elde edilir ve kalan yeni basamak değeri olur.</li>
<li>Liste İlerlemesi: İki liste de None olana kadar veya taşıma 0 olana kadar işlem devam eder.</li>
<li>Sonuç: dummy.next, sonuç listesinin başını gösterir, çünkü dummy sadece başlangıç için kullanılan geçici bir düğümdür.</li>
</ul>
<h2 id="code">Code</h2>
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">class</span> <span class="nc">ListNode</span><span class="p">:</span>
    <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">val</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="nb">next</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">val</span> <span class="o">=</span> <span class="n">val</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">next</span> <span class="o">=</span> <span class="nb">next</span>

<span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">addTwoNumbers</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">l1</span><span class="p">,</span> <span class="n">l2</span><span class="p">):</span>
        <span class="n">dummy</span> <span class="o">=</span> <span class="n">ListNode</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>  <span class="c1"># Sonuç listesi için dummy başlangıç düğümü</span>
        <span class="n">current</span> <span class="o">=</span> <span class="n">dummy</span>
        <span class="n">carry</span> <span class="o">=</span> <span class="mi">0</span>

        <span class="c1"># l1 ve l2&#39;nin sonuna kadar veya taşıma bitene kadar döngü</span>
        <span class="k">while</span> <span class="n">l1</span> <span class="ow">or</span> <span class="n">l2</span> <span class="ow">or</span> <span class="n">carry</span><span class="p">:</span>
            <span class="n">val1</span> <span class="o">=</span> <span class="p">(</span><span class="n">l1</span><span class="o">.</span><span class="n">val</span> <span class="k">if</span> <span class="n">l1</span> <span class="k">else</span> <span class="mi">0</span><span class="p">)</span>
            <span class="n">val2</span> <span class="o">=</span> <span class="p">(</span><span class="n">l2</span><span class="o">.</span><span class="n">val</span> <span class="k">if</span> <span class="n">l2</span> <span class="k">else</span> <span class="mi">0</span><span class="p">)</span>
            
            <span class="c1"># Yeni basamağın toplamı ve yeni taşıma</span>
            <span class="n">total</span> <span class="o">=</span> <span class="n">val1</span> <span class="o">+</span> <span class="n">val2</span> <span class="o">+</span> <span class="n">carry</span>
            <span class="n">carry</span> <span class="o">=</span> <span class="n">total</span> <span class="o">//</span> <span class="mi">10</span>
            <span class="n">total</span> <span class="o">=</span> <span class="n">total</span> <span class="o">%</span> <span class="mi">10</span>
            
            <span class="n">current</span><span class="o">.</span><span class="n">next</span> <span class="o">=</span> <span class="n">ListNode</span><span class="p">(</span><span class="n">total</span><span class="p">)</span>
            <span class="n">current</span> <span class="o">=</span> <span class="n">current</span><span class="o">.</span><span class="n">next</span>
            
            <span class="c1"># İşaretçileri ilerlet</span>
            <span class="k">if</span> <span class="n">l1</span><span class="p">:</span>
                <span class="n">l1</span> <span class="o">=</span> <span class="n">l1</span><span class="o">.</span><span class="n">next</span>
            <span class="k">if</span> <span class="n">l2</span><span class="p">:</span>
                <span class="n">l2</span> <span class="o">=</span> <span class="n">l2</span><span class="o">.</span><span class="n">next</span>

        <span class="k">return</span> <span class="n">dummy</span><span class="o">.</span><span class="n">next</span>

</code></pre></div><h3 id="complexity">Complexity</h3>
<ul>
<li>Time complexity (Zaman Karmaşıklığı): O(max(n, m)), burada n ve m, l1 ve l2 uzunluklarıdır. En kötü durumda her iki liste de tamamen taranır.</li>
<li>Space complexity (Alan Karmaşıklığı): O(max(n, m)), yeni bir liste oluşturulduğu için, en kötü durumda girdi listeleri kadar uzun olabilir.</li>
</ul>
]]></content>
		</item>
		
		<item>
			<title>Leetcode 142 Linked List Cycle II</title>
			<link>https://www.dincerbakkal.com/posts/leetcode142/</link>
			<pubDate>Fri, 07 May 2021 20:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode142/</guid>
			<description>Given the head of a linked list, return the node where the cycle begins. If there is no cycle, return null.
There is a cycle in a linked list if there is some node in the list that can be reached again by continuously following the next pointer. Internally, pos is used to denote the index of the node that tail&amp;rsquo;s next pointer is connected to (0-indexed). It is -1 if there is no cycle.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>Given the head of a linked list, return the node where the cycle begins. If there is no cycle, return null.</p>
<p>There is a cycle in a linked list if there is some node in the list that can be reached again by continuously following the next pointer. Internally, pos is used to denote the index of the node that tail&rsquo;s next pointer is connected to (0-indexed). It is -1 if there is no cycle. Note that pos is not passed as a parameter.</p>
<p>Do not modify the linked list.</p>
<p>Follow up: Can you solve it using O(1) (i.e. constant) memory?</p>
<!-- raw HTML omitted -->
<pre><code>
<figure><img src="/image/142ex1.png"
         alt="image"/>
</figure>


Input: head = [3,2,0,-4], pos = 1
Output: tail connects to node index 1
Explanation: There is a cycle in the linked list, where tail connects to the second node.

</code></pre><!-- raw HTML omitted -->
<pre><code>
<figure><img src="/image/142ex2.png"
         alt="image"/>
</figure>


Input: head = [1,2], pos = 0
Output: tail connects to node index 0
Explanation: There is a cycle in the linked list, where tail connects to the first node.

</code></pre><!-- raw HTML omitted -->
<pre><code><figure><img src="/image/142ex3.png"
         alt="image"/>
</figure>


Input: head = [1], pos = -1
Output: no cycle
Explanation: There is no cycle in the linked list.

</code></pre><!-- raw HTML omitted -->
<ul>
<li>
<p>This is the extension quesion of 141. Linked List Cycle Now we want to return the start node of cycle</p>
</li>
<li>
<p>We need to check if there is cycle</p>
</li>
<li>
<p>If there is not cycle return None and if there is cycle we set slow pointer to head</p>
</li>
<li>
<p>If slow pointer and fast pointer are not equal we move 1 step for each pointer until the two pointer conincide, then we get the node of cycle begining.
There are lots of explainations online, the best way to try is draw graph yourself. There is simple math behind. Here</p>
</li>
<li>
<p>L1: the distance from head to start node of cycle</p>
</li>
<li>
<p>L2: the distance from start node of cycle to crossing node of two pointers</p>
</li>
<li>
<p>L3: the distance from crossing node of two pointers to start node of cycle</p>
</li>
<li>
<p>Slow pointer to crossing node is L1+L2.</p>
</li>
<li>
<p>Fast pointer to crossing node is 2(L1+L2) since fast pointer always move 2 times of slow pointer step.</p>
</li>
<li>
<p>Fast pointer is also equal to L1+L2+L3+L2 because to meet with slow pointer, the fast pointer has to run over cycle at least 1 time.</p>
</li>
<li>
<p>Therefor 2(L1+L2)=L1+L2+L3+L2 -&gt; 2L1=L1+L3 -&gt; L1 = L3</p>
</li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">detectCycle</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">head</span><span class="p">:</span> <span class="n">ListNode</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">ListNode</span><span class="p">:</span>
        <span class="n">slow</span><span class="p">,</span> <span class="n">fast</span> <span class="o">=</span> <span class="n">head</span><span class="p">,</span> <span class="n">head</span>
        <span class="k">while</span> <span class="n">fast</span> <span class="ow">and</span> <span class="n">fast</span><span class="o">.</span><span class="n">next</span><span class="p">:</span>
            <span class="n">fast</span> <span class="o">=</span> <span class="n">fast</span><span class="o">.</span><span class="n">next</span><span class="o">.</span><span class="n">next</span>
            <span class="n">slow</span> <span class="o">=</span> <span class="n">slow</span><span class="o">.</span><span class="n">next</span>
            <span class="k">if</span> <span class="n">fast</span> <span class="o">==</span> <span class="n">slow</span><span class="p">:</span>
                <span class="k">break</span>
        <span class="k">if</span> <span class="ow">not</span> <span class="n">fast</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">fast</span><span class="o">.</span><span class="n">next</span><span class="p">:</span>
            <span class="k">return</span> <span class="kc">None</span>
        <span class="n">slow</span> <span class="o">=</span> <span class="n">head</span>
        <span class="k">while</span> <span class="n">slow</span> <span class="o">!=</span> <span class="n">fast</span><span class="p">:</span>
            <span class="n">slow</span> <span class="o">=</span> <span class="n">slow</span><span class="o">.</span><span class="n">next</span>
            <span class="n">fast</span> <span class="o">=</span> <span class="n">fast</span><span class="o">.</span><span class="n">next</span>
        <span class="k">return</span> <span class="n">fast</span>



</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 309 Best Time to Buy and Sell Stock with Cooldown</title>
			<link>https://www.dincerbakkal.com/posts/leetcode309/</link>
			<pubDate>Thu, 06 May 2021 20:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode309/</guid>
			<description>You are given an array prices where prices[i] is the price of a given stock on the ith day.
Find the maximum profit you can achieve. You may complete as many transactions as you like (i.e., buy one and sell one share of the stock multiple times) with the following restrictions:
After you sell your stock, you cannot buy stock on the next day (i.e., cooldown one day). Note: You may not engage in multiple transactions simultaneously (i.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>You are given an array prices where prices[i] is the price of a given stock on the ith day.</p>
<p>Find the maximum profit you can achieve. You may complete as many transactions as you like (i.e., buy one and sell one share of the stock multiple times) with the following restrictions:</p>
<p>After you sell your stock, you cannot buy stock on the next day (i.e., cooldown one day).
Note: You may not engage in multiple transactions simultaneously (i.e., you must sell the stock before you buy again).</p>
<!-- raw HTML omitted -->
<pre><code>Input: prices = [1,2,3,0,2]
Output: 3
Explanation: transactions = [buy, sell, cooldown, buy, sell]

</code></pre><!-- raw HTML omitted -->
<pre><code>
Input: prices = [1]
Output: 0

</code></pre><!-- raw HTML omitted -->
<ul>
<li></li>
</ul>
<ul>
<li>
<p>This question solved by Dynamic Programming.</p>
</li>
<li>
<p>Soruya göre, her gün al, sat ve bekleme olmak üzere üç işlemden biri yapılabilir. Aslında bu üç durumu bir şekilde 2 durumuna dönüştürebiliriz. stoğu tutmak veya stoğu elden çıkarmak.</p>
</li>
<li>
<p>Stoğu tutmak: Bugünün sonunda, Stoğu tutarsanız maksimum kâr ve bunlar iki koşul olabilir:Bugün hisseyi satın aldın yada Daha önce satın aldığınız hisseyi satmadınız.</p>
</li>
<li>
<p>Stoğu elden çıkarma: Bugünün sonunda, Stoğu elinizde tutmazsanız maksimum kâr ve bunlar da iki koşul olabilir:bugün hisseyi sattın yada Son Stoğu sattıktan sonra hiç hisse almadınız</p>
</li>
<li>
<p>Cevap, stok tutmadığınız zaman, maksimum kâr olmalıdır.</p>
</li>
<li>
<p>Temel durumu bulun:
Biri hold, diğeri unhold olarak adlandırılan iki dp listesi oluşturun. her eleman, i. günün sonundaki maksimum karı temsil eder.</p>
</li>
<li>
<p>hold[0] = -prices[0] ve unhold[0] = 0 başlat</p>
</li>
<li>
<p>Deseni bulun:
Biri elde tutulan stok için diğeri de elde tutulmayan stok için iki model olmalıdır:</p>
</li>
</ul>
<p>stok tutun: max(hisseyi bugün aldınız, daha önce hisseyi aldınız ama henüz satmadınız)
Stoğuni serbest bırak: max(bugün hisseyi sattın, son hisseyi sattıktan sonra hiç hisse almadın)</p>
<ul>
<li>Cevap: unhold[L-1].</li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">maxProfit</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">prices</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
        <span class="n">L</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">prices</span><span class="p">)</span>
        <span class="n">hold</span> <span class="o">=</span> <span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">L</span> <span class="c1">#hold[i]: the ith day profit when you hold stock</span>
        <span class="n">unhold</span> <span class="o">=</span> <span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">L</span> <span class="c1">#unhold[i]: the ith day profit when you not hold stock</span>
        
        <span class="n">hold</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="o">-</span><span class="n">prices</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
        <span class="n">unhold</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="mi">0</span>
        
        <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="n">L</span><span class="p">):</span>
            <span class="n">hold</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="n">unhold</span><span class="p">[</span><span class="n">i</span><span class="o">-</span><span class="mi">2</span><span class="p">]</span><span class="o">-</span><span class="n">prices</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="n">hold</span><span class="p">[</span><span class="n">i</span><span class="o">-</span><span class="mi">1</span><span class="p">])</span><span class="c1">#max(today buy in, last buy in)</span>
            <span class="n">unhold</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="n">hold</span><span class="p">[</span><span class="n">i</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">+</span><span class="n">prices</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="n">unhold</span><span class="p">[</span><span class="n">i</span><span class="o">-</span><span class="mi">1</span><span class="p">])</span><span class="c1">#max(today sell out, not sell out)</span>
        <span class="k">return</span> <span class="n">unhold</span><span class="p">[</span><span class="n">L</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>



</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 698 Partition to K Equal Sum Subsets</title>
			<link>https://www.dincerbakkal.com/posts/leetcode698/</link>
			<pubDate>Wed, 05 May 2021 20:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode698/</guid>
			<description>Given an integer array nums and an integer k, return true if it is possible to divide this array into k non-empty subsets whose sums are all equal.
Input: nums = [4,3,2,3,5,2,1], k = 4 Output: true Explanation: It&#39;s possible to divide it into 4 subsets (5), (1, 4), (2,3), (2,3) with equal sums.  Input: nums = [1,2,3,4], k = 3 Output: false  Çözülecek  class Solution: </description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>Given an integer array nums and an integer k, return true if it is possible to divide this array into k non-empty subsets whose sums are all equal.</p>
<!-- raw HTML omitted -->
<pre><code>Input: nums = [4,3,2,3,5,2,1], k = 4
Output: true
Explanation: It's possible to divide it into 4 subsets (5), (1, 4), (2,3), (2,3) with equal sums.

</code></pre><!-- raw HTML omitted -->
<pre><code>
Input: nums = [1,2,3,4], k = 3
Output: false

</code></pre><!-- raw HTML omitted -->
<ul>
<li>Çözülecek</li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>



</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 416 Partition Equal Subset Sum</title>
			<link>https://www.dincerbakkal.com/posts/leetcode416/</link>
			<pubDate>Tue, 04 May 2021 20:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode416/</guid>
			<description>Given a non-empty array nums containing only positive integers, find if the array can be partitioned into two subsets such that the sum of elements in both subsets is equal.
Input: nums = [1,5,11,5] Output: true Explanation: The array can be partitioned as [1, 5, 5] and [11].  Input: nums = [1,2,3,5] Output: false Explanation: The array cannot be partitioned into equal sum subsets.  Soruda pozitif sayılardan oluşan bir liste veriliyor ve bu listenin içinde toplamları birbirine eşit iki alt küme var mı diye soruyor.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>Given a non-empty array nums containing only positive integers, find if the array can be partitioned into two subsets such that the sum of elements in both subsets is equal.</p>
<!-- raw HTML omitted -->
<pre><code>Input: nums = [1,5,11,5]
Output: true
Explanation: The array can be partitioned as [1, 5, 5] and [11].

</code></pre><!-- raw HTML omitted -->
<pre><code>
Input: nums = [1,2,3,5]
Output: false
Explanation: The array cannot be partitioned into equal sum subsets.

</code></pre><!-- raw HTML omitted -->
<ul>
<li>Soruda pozitif sayılardan oluşan bir liste veriliyor ve bu listenin içinde toplamları birbirine eşit iki alt küme var mı diye soruyor.Var ise True yok ise False dönmemiz gerekiyor.</li>
<li>nums = [1,5,11,5] burada [1,5,5] toplamı [11] listesine eşit True döneriz.</li>
<li>Burada bir set liste oluştururuz ve nums listesindeki sayıları tek tek bu listedeki toplamlara ekleriz böylelikle nums listesi içerisindeki tüm toplama varyasyonları elimizde olur.Eğer nums içerisindeki sayıların toplamının yarıs bu listede varsa demek ki istenen koşul oluşmuştur.</li>
<li>nums = [1,5,11,5] -&gt; [5] için toplam listemiz dp = {0,5} listemize 0 koymamız gerekir ki farklı toplama varyasyonlarını kaçırmayalım.</li>
<li>nums = [1,5,11,5] -&gt; [11] için dp = {0,5,11,16} 11 bulduk aslında burada bitirebiliriz ama devam edelim.</li>
<li>nums = [1,5,11,5] -&gt; [5] için dp = {0,5,11,16,10,21} listeye 5 ve 16 koymadık çünkü set olarak oluşturmuştuk.</li>
<li>Tüm nums listesini dolaştıktan sonra içinde nums toplamının yarısı var mı diye bakarız.</li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">canPartition</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">nums</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
        <span class="k">if</span> <span class="nb">sum</span><span class="p">(</span><span class="n">nums</span><span class="p">)</span> <span class="o">%</span><span class="mi">2</span> <span class="p">:</span>
            <span class="k">return</span> <span class="kc">False</span>
        
        <span class="n">dp</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
        <span class="n">dp</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
        <span class="n">target</span> <span class="o">=</span> <span class="nb">sum</span><span class="p">(</span><span class="n">nums</span><span class="p">)</span> <span class="o">//</span> <span class="mi">2</span>
        
        <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">nums</span><span class="p">)</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">):</span>
            <span class="n">nextDP</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
            <span class="k">for</span> <span class="n">t</span> <span class="ow">in</span> <span class="n">dp</span><span class="p">:</span>
                <span class="k">if</span><span class="p">(</span><span class="n">t</span> <span class="o">+</span> <span class="n">nums</span><span class="p">[</span><span class="n">i</span><span class="p">])</span> <span class="o">==</span> <span class="n">target</span><span class="p">:</span>
                    <span class="k">return</span> <span class="kc">True</span>
                <span class="n">nextDP</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">t</span> <span class="o">+</span> <span class="n">nums</span><span class="p">[</span><span class="n">i</span><span class="p">])</span>
                <span class="n">nextDP</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">t</span><span class="p">)</span>
            <span class="n">dp</span> <span class="o">=</span> <span class="n">nextDP</span>
        <span class="k">return</span> <span class="kc">True</span> <span class="k">if</span> <span class="n">target</span> <span class="ow">in</span> <span class="n">dp</span> <span class="k">else</span> <span class="kc">False</span>


</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 673 Number of Longest Increasing Subsequence</title>
			<link>https://www.dincerbakkal.com/posts/leetcode673/</link>
			<pubDate>Mon, 03 May 2021 20:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode673/</guid>
			<description>Given an integer array nums, return the number of longest increasing subsequences.
Notice that the sequence has to be strictly increasing.
Input: nums = [1,3,5,4,7] Output: 2 Explanation: The two longest increasing subsequences are [1, 3, 4, 7] and [1, 3, 5, 7].  Input: nums = [2,2,2,2,2] Output: 5 Explanation: The length of longest continuous increasing subsequence is 1, and there are 5 subsequences&#39; length is 1, so output 5.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>Given an integer array nums, return the number of longest increasing subsequences.</p>
<p>Notice that the sequence has to be strictly increasing.</p>
<!-- raw HTML omitted -->
<pre><code>Input: nums = [1,3,5,4,7]
Output: 2
Explanation: The two longest increasing subsequences are [1, 3, 4, 7] and [1, 3, 5, 7].

</code></pre><!-- raw HTML omitted -->
<pre><code>
Input: nums = [2,2,2,2,2]
Output: 5
Explanation: The length of longest continuous increasing subsequence is 1, and there are 5 subsequences' length is 1, so output 5.

</code></pre><!-- raw HTML omitted -->
<ul>
<li>
<p>This question can be solved by Dynamic Programming. It is similar with question 300. Longest Increasing Subsequence. But now, the question is asking how many numbers of the longest increasing subsequence.</p>
</li>
<li>
<p>I personally think this question should belong to hard level.</p>
</li>
<li>
<p>To get the answer, we need to build connection between length of the longest increasing subsequence and the count the of length. For that, we need to get current element’s length of longest increasing subsequence and meanwhile we also need to know the current element’s count of longest increasing subsequence. It’s bit of tricky here, think twice. The answer is sum up each longest increasing subsequence’s count.</p>
</li>
<li>
<p>Find the base case:
We need two dp list here, one is for the length of the longest increaseing subsequence and each element represent the current longest length. Another one is for counting the number of such sequence and each element represent the count of increasing of include element. length and count are at least 1 unless there is no input length = [1]n count = [1]n</p>
</li>
<li>
<p>Find the pattern:
The length is easy to come up. If the current element is greater than before (make the subsequence increasing), then we will get the max length of previous plus 1. Else just stay in 1(Not increasing).</p>
</li>
<li>
<p>The count is hard to understand. The current element is the sum of previous longest increasing subsequence whose max element is less than current element(this will make the current subsequence keep increasing and also means the previous longest increasing subsequences’ length is 1 less than the current longest increasing subsequence)</p>
</li>
<li>
<p>Create dp list will cost O(2n) and iterate the dp will cost ((n-1)*n) in total will be O((n-1)*n+2n)</p>
</li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">findNumberOfLIS</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">nums</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
        <span class="n">N</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">nums</span><span class="p">)</span>
        <span class="k">if</span> <span class="n">N</span> <span class="o">&lt;=</span> <span class="mi">1</span><span class="p">:</span> <span class="k">return</span> <span class="n">N</span>
        <span class="n">lengths</span> <span class="o">=</span> <span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">*</span> <span class="n">N</span> <span class="c1">#lengths[i] = longest ending in nums[i]</span>
        <span class="n">counts</span> <span class="o">=</span> <span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">*</span> <span class="n">N</span> <span class="c1">#count[i] = number of longest ending in nums[i]</span>

        <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">num</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">nums</span><span class="p">):</span>
            <span class="k">for</span> <span class="n">j</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">i</span><span class="p">):</span>
                <span class="k">if</span> <span class="n">nums</span><span class="p">[</span><span class="n">j</span><span class="p">]</span> <span class="o">&lt;</span> <span class="n">nums</span><span class="p">[</span><span class="n">i</span><span class="p">]:</span>
                    <span class="k">if</span> <span class="n">lengths</span><span class="p">[</span><span class="n">j</span><span class="p">]</span> <span class="o">&gt;=</span> <span class="n">lengths</span><span class="p">[</span><span class="n">i</span><span class="p">]:</span>
                        <span class="n">lengths</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="n">lengths</span><span class="p">[</span><span class="n">i</span><span class="p">],</span><span class="n">lengths</span><span class="p">[</span><span class="n">j</span><span class="p">]</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span>
                        <span class="n">counts</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="n">counts</span><span class="p">[</span><span class="n">j</span><span class="p">]</span>
                    <span class="k">elif</span> <span class="n">lengths</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">==</span><span class="n">lengths</span><span class="p">[</span><span class="n">j</span><span class="p">]</span> <span class="o">+</span> <span class="mi">1</span><span class="p">:</span>
                        <span class="n">counts</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">+=</span> <span class="n">counts</span><span class="p">[</span><span class="n">j</span><span class="p">]</span>
        <span class="n">longest</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="n">lengths</span><span class="p">)</span>
        <span class="k">return</span> <span class="nb">sum</span><span class="p">(</span><span class="n">c</span> <span class="k">for</span> <span class="n">j</span><span class="p">,</span> <span class="n">c</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">counts</span><span class="p">)</span> <span class="k">if</span> <span class="n">lengths</span><span class="p">[</span><span class="n">j</span><span class="p">]</span> <span class="o">==</span> <span class="n">longest</span><span class="p">)</span>


</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 647 Palindromic Substrings</title>
			<link>https://www.dincerbakkal.com/posts/leetcode647/</link>
			<pubDate>Sun, 02 May 2021 20:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode647/</guid>
			<description>Given a string s, return the number of palindromic substrings in it.
A string is a palindrome when it reads the same backward as forward.
A substring is a contiguous sequence of characters within the string.
Input: s = &amp;quot;abc&amp;quot; Output: 3 Explanation: Three palindromic strings: &amp;quot;a&amp;quot;, &amp;quot;b&amp;quot;, &amp;quot;c&amp;quot;.  Input: s = &amp;quot;aaa&amp;quot; Output: 6 Explanation: Six palindromic strings: &amp;quot;a&amp;quot;, &amp;quot;a&amp;quot;, &amp;quot;a&amp;quot;, &amp;quot;aa&amp;quot;, &amp;quot;aa&amp;quot;, &amp;quot;aaa&amp;quot;.  Bu soruda bize bir string veriliyor ve bu string için palindrome şeklinde kaç farklı alt küme olduğu soruluyor.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>Given a string s, return the number of palindromic substrings in it.</p>
<p>A string is a palindrome when it reads the same backward as forward.</p>
<p>A substring is a contiguous sequence of characters within the string.</p>
<!-- raw HTML omitted -->
<pre><code>Input: s = &quot;abc&quot;
Output: 3
Explanation: Three palindromic strings: &quot;a&quot;, &quot;b&quot;, &quot;c&quot;.

</code></pre><!-- raw HTML omitted -->
<pre><code>
Input: s = &quot;aaa&quot;
Output: 6
Explanation: Six palindromic strings: &quot;a&quot;, &quot;a&quot;, &quot;a&quot;, &quot;aa&quot;, &quot;aa&quot;, &quot;aaa&quot;.

</code></pre><!-- raw HTML omitted -->
<ul>
<li>Bu soruda  bize bir string veriliyor ve bu string için palindrome şeklinde kaç farklı alt küme olduğu soruluyor.</li>
<li>Palindrome önden de ve arkadan da okunduğunda aynı olan kelimeler.</li>
<li>s = &ldquo;aaa&rdquo; için&quot;a&quot;, &ldquo;a&rdquo;, &ldquo;a&rdquo;, &ldquo;aa&rdquo;, &ldquo;aa&rdquo;, &ldquo;aaa&rdquo; alt kümeleri bulunabilir.</li>
<li>Burada izleyeceğimiz yol her harfi ortadaki harfmiş şekilde kabul ederek 2 işaretçimizi sağa ve sola ilerletmek.</li>
<li>s = &ldquo;aaa&rdquo; için ilk harf olan &ldquo;a&rdquo; yı orta kabul ederiz işaretçileri 0. indekse koyarız.İlk palindrome &ldquo;a&rdquo; buluruz.İşaretçileri sağa ve sola 1 kaydırırız.0. indeksin solunda bir değer olmadığı için 1. indekse geçeriz.</li>
<li>&ldquo;aaa&rdquo; indeks 1 de ilk palindrome yine &ldquo;a&rdquo; oldu işaretçileri sağa ve sola 1 değer kaydırırsak ve bunların eşit olduğunu görürsek 2. palindrome bulduk &ldquo;aaa&rdquo;.Bu şekilde tüm stringi tararız.</li>
</ul>
<figure><img src="/image/647sol.png"
         alt="image"/>
</figure>

<ul>
<li>Ancak bu yöntem ile sadece 1,3,5 gibi tek sayılı kümeleri bulabiliriz.</li>
<li>Çift haneli kümeleri bulabilmemiz için &ldquo;aaa&rdquo; için sol indeksi i , sağ indeksi i+1 şeklinde almalıyız.</li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">countSubstrings</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">s</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
        
        <span class="n">res</span> <span class="o">=</span> <span class="mi">0</span>
        
        <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">s</span><span class="p">)):</span>
            <span class="n">res</span> <span class="o">+=</span> <span class="bp">self</span><span class="o">.</span><span class="n">countPali</span><span class="p">(</span><span class="n">s</span><span class="p">,</span><span class="n">i</span><span class="p">,</span><span class="n">i</span><span class="p">)</span>
            <span class="n">res</span> <span class="o">+=</span> <span class="bp">self</span><span class="o">.</span><span class="n">countPali</span><span class="p">(</span><span class="n">s</span><span class="p">,</span><span class="n">i</span><span class="p">,</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span>
        <span class="k">return</span> <span class="n">res</span>
    
    <span class="k">def</span> <span class="nf">countPali</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">s</span><span class="p">,</span><span class="n">l</span><span class="p">,</span><span class="n">r</span><span class="p">):</span>
        <span class="n">res</span> <span class="o">=</span> <span class="mi">0</span>
        <span class="k">while</span> <span class="n">l</span> <span class="o">&gt;=</span> <span class="mi">0</span> <span class="ow">and</span> <span class="n">r</span><span class="o">&lt;</span><span class="nb">len</span><span class="p">(</span><span class="n">s</span><span class="p">)</span> <span class="ow">and</span> <span class="n">s</span><span class="p">[</span><span class="n">l</span><span class="p">]</span> <span class="o">==</span> <span class="n">s</span><span class="p">[</span><span class="n">r</span><span class="p">]:</span>
            <span class="n">res</span> <span class="o">+=</span> <span class="mi">1</span>
            <span class="n">l</span> <span class="o">-=</span> <span class="mi">1</span>
            <span class="n">r</span> <span class="o">+=</span><span class="mi">1</span>
        <span class="k">return</span> <span class="n">res</span>


</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 55 Jump Game</title>
			<link>https://www.dincerbakkal.com/posts/leetcode055/</link>
			<pubDate>Sat, 01 May 2021 20:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode055/</guid>
			<description>You are given an integer array nums. You are initially positioned at the array&amp;rsquo;s first index, and each element in the array represents your maximum jump length at that position.
Return true if you can reach the last index, or false otherwise.
Input: nums = [2,3,1,1,4] Output: true Explanation: Jump 1 step from index 0 to 1, then 3 steps to the last index.  Input: nums = [3,2,1,0,4] Output: false Explanation: You will always arrive at index 3 no matter what.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>You are given an integer array nums. You are initially positioned at the array&rsquo;s first index, and each element in the array represents your maximum jump length at that position.</p>
<p>Return true if you can reach the last index, or false otherwise.</p>
<!-- raw HTML omitted -->
<pre><code>Input: nums = [2,3,1,1,4]
Output: true
Explanation: Jump 1 step from index 0 to 1, then 3 steps to the last index.

</code></pre><!-- raw HTML omitted -->
<pre><code>
Input: nums = [3,2,1,0,4]
Output: false
Explanation: You will always arrive at index 3 no matter what. Its maximum jump length is 0, which makes it impossible to reach the last index.

</code></pre><!-- raw HTML omitted -->
<ul>
<li>Bu soruda  bize bir liste veriliyor.Listenin başından başlayarak her adımda bulunduğumuz indeksin değeri kadar zıplama şansımız var. Listenin sonuna ulaşabilirsek true ulaşamazsak false dönmemiz isteniyor.</li>
<li>[2,3,1,1,4] 0. indeksteyiz 2 zıplama şansımız var .İster 1 zıplayarak 3 değerinin olduğu indekse istersek 2 zıplayarak 1 değerinin olduğu indekse atlayabiliriz.</li>
<li>Bu proble hem dinamik programlama hem de greedy yöntemi ile çözülebilir.</li>
<li>Greedy yönteminde sondan başlayarak önceki adımı bulmaya çalışırız.</li>
<li>Hedefimiz 4. indeks peki kendi indeksi ve değerinin toplamı 4 olan bir değer var mı ? 3. indeks böyle bir değer hedefimiz artık 3. indeks oldu.</li>
<li>Yeni hedefe ulaşmak için yine bir adım geri gidelim 2. indeks ve değerinin toplamı 3 oluyor.Bu durumda yeni hedef 2. indeks.</li>
<li>Bu şekilde sondan başlayarak aramamızı yaparız. 0. indekse ulaşabilirsek o zaman baştan sona ilerleyebiliriz demektir True döneriz aksi taktirde False döneriz.</li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">canJump</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">nums</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
        <span class="n">goal</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">nums</span><span class="p">)</span> <span class="o">-</span> <span class="mi">1</span>

        <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">nums</span><span class="p">)</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">):</span>
            <span class="k">if</span> <span class="n">i</span> <span class="o">+</span> <span class="n">nums</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">&gt;=</span><span class="n">goal</span><span class="p">:</span>
                <span class="n">goal</span> <span class="o">=</span> <span class="n">i</span>
        <span class="k">return</span> <span class="kc">True</span> <span class="k">if</span> <span class="n">goal</span> <span class="o">==</span> <span class="mi">0</span> <span class="k">else</span> <span class="kc">False</span>


</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 62 Unique Paths</title>
			<link>https://www.dincerbakkal.com/posts/leetcode062/</link>
			<pubDate>Fri, 30 Apr 2021 20:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode062/</guid>
			<description>A robot is located at the top-left corner of a m x n grid (marked &amp;lsquo;Start&amp;rsquo; in the diagram below).
The robot can only move either down or right at any point in time. The robot is trying to reach the bottom-right corner of the grid (marked &amp;lsquo;Finish&amp;rsquo; in the diagram below).
How many possible unique paths are there?
 Input: m = 3, n = 7 Output: 28  Input: m = 3, n = 2 Output: 3 Explanation: From the top-left corner, there are a total of 3 ways to reach the bottom-right corner: 1.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>A robot is located at the top-left corner of a m x n grid (marked &lsquo;Start&rsquo; in the diagram below).</p>
<p>The robot can only move either down or right at any point in time. The robot is trying to reach the bottom-right corner of the grid (marked &lsquo;Finish&rsquo; in the diagram below).</p>
<p>How many possible unique paths are there?</p>
<!-- raw HTML omitted -->
<pre><code><figure><img src="/image/62ex1.png"
         alt="image"/>
</figure>


Input: m = 3, n = 7
Output: 28

</code></pre><!-- raw HTML omitted -->
<pre><code>
Input: m = 3, n = 2
Output: 3
Explanation:
From the top-left corner, there are a total of 3 ways to reach the bottom-right corner:
1. Right -&gt; Down -&gt; Down
2. Down -&gt; Down -&gt; Right
3. Down -&gt; Right -&gt; Down

</code></pre><!-- raw HTML omitted -->
<pre><code>
Input: m = 7, n = 3
Output: 28

</code></pre><!-- raw HTML omitted -->
<pre><code>
Input: m = 3, n = 3
Output: 6

</code></pre><!-- raw HTML omitted -->
<ul>
<li>Bu soruda  m ve n kenarlı bir karelerden oluşan bir dikdörtgen veriliyor ve en sol üst köşeden en sağ alt köşeye kaç farklı şekilde gidebileceğimiz soruluyor.</li>
<li>Burada en dipten başlayarak her karenin kaç farklı yolla hedefe ulaşacağını hesaplarsak aşağıdaki gibi bir sonuç elde ederiz.</li>
</ul>
<figure><img src="/image/62sol.png"
         alt="image"/>
</figure>

<ul>
<li>Görüldüğü gibi her kare sağındaki ve altındaki karelerin toplamına eşittir.</li>
<li>En dipten başlayarak tüm kareleri dolaşır ve sonucu buluruz.</li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">uniquePaths</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">m</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span> <span class="n">n</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
        <span class="n">row</span> <span class="o">=</span> <span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">*</span> <span class="n">n</span>
        
        <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">m</span> <span class="o">-</span> <span class="mi">1</span><span class="p">):</span>
            <span class="n">newRow</span> <span class="o">=</span> <span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">*</span> <span class="n">n</span>
            <span class="k">for</span> <span class="n">j</span> <span class="ow">in</span> <span class="nb">range</span> <span class="p">(</span><span class="n">n</span><span class="o">-</span><span class="mi">2</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span><span class="p">):</span>
                <span class="n">newRow</span><span class="p">[</span><span class="n">j</span><span class="p">]</span> <span class="o">=</span> <span class="n">newRow</span><span class="p">[</span><span class="n">j</span> <span class="o">+</span> <span class="mi">1</span><span class="p">]</span> <span class="o">+</span> <span class="n">row</span><span class="p">[</span><span class="n">j</span><span class="p">]</span>
            <span class="n">row</span> <span class="o">=</span> <span class="n">newRow</span>
        <span class="k">return</span> <span class="n">row</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>

</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 91 Decode Ways</title>
			<link>https://www.dincerbakkal.com/posts/leetcode091/</link>
			<pubDate>Thu, 29 Apr 2021 20:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode091/</guid>
			<description>A message containing letters from A-Z can be encoded into numbers using the following mapping:
&amp;lsquo;A&amp;rsquo; -&amp;gt; &amp;ldquo;1&amp;rdquo; &amp;lsquo;B&amp;rsquo; -&amp;gt; &amp;ldquo;2&amp;rdquo; &amp;hellip; &amp;lsquo;Z&amp;rsquo; -&amp;gt; &amp;ldquo;26&amp;rdquo; To decode an encoded message, all the digits must be grouped then mapped back into letters using the reverse of the mapping above (there may be multiple ways). For example, &amp;ldquo;11106&amp;rdquo; can be mapped into:
&amp;ldquo;AAJF&amp;rdquo; with the grouping (1 1 10 6) &amp;ldquo;KJF&amp;rdquo; with the grouping (11 10 6) Note that the grouping (1 11 06) is invalid because &amp;ldquo;06&amp;rdquo; cannot be mapped into &amp;lsquo;F&amp;rsquo; since &amp;ldquo;6&amp;rdquo; is different from &amp;ldquo;06&amp;rdquo;.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>A message containing letters from A-Z can be encoded into numbers using the following mapping:</p>
<p>&lsquo;A&rsquo; -&gt; &ldquo;1&rdquo;
&lsquo;B&rsquo; -&gt; &ldquo;2&rdquo;
&hellip;
&lsquo;Z&rsquo; -&gt; &ldquo;26&rdquo;
To decode an encoded message, all the digits must be grouped then mapped back into letters using the reverse of the mapping above (there may be multiple ways). For example, &ldquo;11106&rdquo; can be mapped into:</p>
<p>&ldquo;AAJF&rdquo; with the grouping (1 1 10 6)
&ldquo;KJF&rdquo; with the grouping (11 10 6)
Note that the grouping (1 11 06) is invalid because &ldquo;06&rdquo; cannot be mapped into &lsquo;F&rsquo; since &ldquo;6&rdquo; is different from &ldquo;06&rdquo;.</p>
<p>Given a string s containing only digits, return the number of ways to decode it.</p>
<p>The answer is guaranteed to fit in a 32-bit integer.</p>
<!-- raw HTML omitted -->
<pre><code>
Input: s = &quot;12&quot;
Output: 2
Explanation: &quot;12&quot; could be decoded as &quot;AB&quot; (1 2) or &quot;L&quot; (12).

</code></pre><!-- raw HTML omitted -->
<pre><code>
Input: s = &quot;226&quot;
Output: 3
Explanation: &quot;226&quot; could be decoded as &quot;BZ&quot; (2 26), &quot;VF&quot; (22 6), or &quot;BBF&quot; (2 2 6).

</code></pre><!-- raw HTML omitted -->
<pre><code>
Input: s = &quot;0&quot;
Output: 0
Explanation: There is no character that is mapped to a number starting with 0.
The only valid mappings with 0 are 'J' -&gt; &quot;10&quot; and 'T' -&gt; &quot;20&quot;, neither of which start with 0.
Hence, there are no valid ways to decode this since all digits need to be mapped.

</code></pre><!-- raw HTML omitted -->
<pre><code>
Input: s = &quot;06&quot;
Output: 0
Explanation: &quot;06&quot; cannot be mapped to &quot;F&quot; because of the leading zero (&quot;6&quot; is different from &quot;06&quot;).

</code></pre><!-- raw HTML omitted -->
<ul>
<li>Bu soru rekursif şekilde çağrı yapılarak çözülebilir.</li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">numDecodings</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">s</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
        <span class="n">dp</span> <span class="o">=</span> <span class="p">{</span><span class="nb">len</span><span class="p">(</span><span class="n">s</span><span class="p">)</span> <span class="p">:</span> <span class="mi">1</span><span class="p">}</span>
        
        <span class="k">def</span> <span class="nf">dfs</span><span class="p">(</span><span class="n">i</span><span class="p">):</span>
            <span class="k">if</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">dp</span><span class="p">:</span>
                <span class="k">return</span> <span class="n">dp</span><span class="p">[</span><span class="n">i</span><span class="p">]</span>
            <span class="k">if</span> <span class="n">s</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">==</span> <span class="s2">&#34;0&#34;</span><span class="p">:</span>
                <span class="k">return</span> <span class="mi">0</span>
            
            <span class="n">res</span> <span class="o">=</span> <span class="n">dfs</span><span class="p">(</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span>
            
            <span class="k">if</span><span class="p">(</span><span class="n">i</span> <span class="o">+</span> <span class="mi">1</span> <span class="o">&lt;</span> <span class="nb">len</span><span class="p">(</span><span class="n">s</span><span class="p">)</span> <span class="ow">and</span> <span class="p">(</span><span class="n">s</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">==</span> <span class="s2">&#34;1&#34;</span> <span class="ow">or</span> 
                <span class="n">s</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">==</span> <span class="s2">&#34;2&#34;</span> <span class="ow">and</span> <span class="n">s</span><span class="p">[</span><span class="n">i</span> <span class="o">+</span> <span class="mi">1</span><span class="p">]</span> <span class="ow">in</span> <span class="s2">&#34;0123456&#34;</span><span class="p">)):</span>
                <span class="n">res</span><span class="o">+=</span><span class="n">dfs</span><span class="p">(</span><span class="n">i</span><span class="o">+</span><span class="mi">2</span><span class="p">)</span>
            <span class="n">dp</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="n">res</span>
            <span class="k">return</span> <span class="n">res</span>
        <span class="k">return</span> <span class="n">dfs</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>

</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 377 Combination Sum IV</title>
			<link>https://www.dincerbakkal.com/posts/leetcode377/</link>
			<pubDate>Wed, 28 Apr 2021 20:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode377/</guid>
			<description>Given an array of distinct integers nums and a target integer target, return the number of possible combinations that add up to target.
The answer is guaranteed to fit in a 32-bit integer.
Follow up: What if negative numbers are allowed in the given array? How does it change the problem? What limitation we need to add to the question to allow negative numbers?
 Input: nums = [1,2,3], target = 4 Output: 7 Explanation: The possible combination ways are: (1, 1, 1, 1) (1, 1, 2) (1, 2, 1) (1, 3) (2, 1, 1) (2, 2) (3, 1) Note that different sequences are counted as different combinations.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>Given an array of distinct integers nums and a target integer target, return the number of possible combinations that add up to target.</p>
<p>The answer is guaranteed to fit in a 32-bit integer.</p>
<p>Follow up: What if negative numbers are allowed in the given array? How does it change the problem? What limitation we need to add to the question to allow negative numbers?</p>
<!-- raw HTML omitted -->
<pre><code>
Input: nums = [1,2,3], target = 4
Output: 7
Explanation:
The possible combination ways are:
(1, 1, 1, 1)
(1, 1, 2)
(1, 2, 1)
(1, 3)
(2, 1, 1)
(2, 2)
(3, 1)
Note that different sequences are counted as different combinations.

</code></pre><!-- raw HTML omitted -->
<pre><code>
Input: nums = [9], target = 3
Output: 0

</code></pre><!-- raw HTML omitted -->
<ul>
<li>Bu soruda bize liste olarak bir kaç sayı ve hedef(target) bir sayı veriliyor.</li>
<li>Bu listedeki sayılar ile kaç farklı şekilde hedef sayı elde edilebilir diye soruluyor.</li>
<li>Dp kullanarak bu soruyu çözebiliriz.</li>
<li>Input: nums = [1,2,3], target = 4 için</li>
<li>dp[0] = 1 başlayarak hedefteki sayıya gidebiliriz.</li>
<li>dp[1] = dp[1-1] + dp[1-2] +dp[1-3]  sondaki ikisi zaten olmaz 0 sadece ilk dp [1-1] = dp[0] = 1</li>
<li>dp[2] = dp[2-1] + dp[2-2] +dp[2-3] sondaki olmaz 0 sadece ilk 2 durum için dp[1] + dp[0] = 2</li>
<li>dp[3] = dp[3-1] + dp[3-2] +dp[2-3] -&gt; dp[2] + dp[1] + dp [0] = 2+1+1=4</li>
<li>dp[4] = dp[4-1] + dp[4-2] +dp[4-3] -&gt; dp[3] + dp[2] + dp[1] = 4+2+1=7</li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">combinationSum4</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">nums</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">],</span> <span class="n">target</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
        <span class="n">dp</span> <span class="o">=</span> <span class="p">{</span><span class="mi">0</span><span class="p">:</span><span class="mi">1</span><span class="p">}</span>
        
        <span class="k">for</span> <span class="n">total</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="n">target</span> <span class="o">+</span> <span class="mi">1</span><span class="p">):</span>
            <span class="n">dp</span><span class="p">[</span><span class="n">total</span><span class="p">]</span> <span class="o">=</span> <span class="mi">0</span>
            <span class="k">for</span> <span class="n">n</span> <span class="ow">in</span> <span class="n">nums</span><span class="p">:</span>
                <span class="n">dp</span><span class="p">[</span><span class="n">total</span><span class="p">]</span> <span class="o">+=</span> <span class="n">dp</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">total</span> <span class="o">-</span> <span class="n">n</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
        <span class="k">return</span> <span class="n">dp</span><span class="p">[</span><span class="n">target</span><span class="p">]</span>

</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 139 Word Break</title>
			<link>https://www.dincerbakkal.com/posts/leetcode139/</link>
			<pubDate>Tue, 27 Apr 2021 20:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode139/</guid>
			<description>Given a string s and a dictionary of strings wordDict, return true if s can be segmented into a space-separated sequence of one or more dictionary words.
Note that the same word in the dictionary may be reused multiple times in the segmentation.
 Input: s = &amp;quot;leetcode&amp;quot;, wordDict = [&amp;quot;leet&amp;quot;,&amp;quot;code&amp;quot;] Output: true Explanation: Return true because &amp;quot;leetcode&amp;quot; can be segmented as &amp;quot;leet code&amp;quot;.  Input: s = &amp;quot;applepenapple&amp;quot;, wordDict = [&amp;quot;apple&amp;quot;,&amp;quot;pen&amp;quot;] Output: true Explanation: Return true because &amp;quot;applepenapple&amp;quot; can be segmented as &amp;quot;apple pen apple&amp;quot;.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>Given a string s and a dictionary of strings wordDict, return true if s can be segmented into a space-separated sequence of one or more dictionary words.</p>
<p>Note that the same word in the dictionary may be reused multiple times in the segmentation.</p>
<!-- raw HTML omitted -->
<pre><code>
Input: s = &quot;leetcode&quot;, wordDict = [&quot;leet&quot;,&quot;code&quot;]
Output: true
Explanation: Return true because &quot;leetcode&quot; can be segmented as &quot;leet code&quot;.

</code></pre><!-- raw HTML omitted -->
<pre><code>
Input: s = &quot;applepenapple&quot;, wordDict = [&quot;apple&quot;,&quot;pen&quot;]
Output: true
Explanation: Return true because &quot;applepenapple&quot; can be segmented as &quot;apple pen apple&quot;.
Note that you are allowed to reuse a dictionary word.

</code></pre><!-- raw HTML omitted -->
<pre><code>
Input: s = &quot;catsandog&quot;, wordDict = [&quot;cats&quot;,&quot;dog&quot;,&quot;sand&quot;,&quot;and&quot;,&quot;cat&quot;]
Output: false

</code></pre><!-- raw HTML omitted -->
<ul>
<li>Bu soruda bize bir kelime(s) ve liste halinde bir kelimeler içeren bir sözlük(wordDict) veriliyor.</li>
<li>Bizden istenen ise kelime(s) sözlükteki kelimelerden oluşuyor ise True oluşmuyor ise False olarak dönmemiz.</li>
<li>Input: s = &ldquo;leetcode&rdquo;, wordDict = [&ldquo;leet&rdquo;,&ldquo;code&rdquo;] şeklinde girdilerimiz olsun.</li>
<li>s kelimesindeki her indexi uyumlu kelime var mı diye inceleyelim.</li>
<li>dp[8] = True -&gt; s kelimemiz 8 harften oluşuyor yani dp[8] kelimenin bittiği boşluğa denk geliyor.Ama tüm s kelimesini başarılı bir şekilde bitirip sona varsaydık True dönecektik bundan dolayı True dedik.Ayrıca DP bir başlangıca ihtiyacımız var.</li>
<li>dp[7] = False -&gt; e  hiç bir kelime uymuyor.</li>
<li>dp[6] = False -&gt; de  hiç bir kelime uymuyor.</li>
<li>dp[5] = False -&gt; ode  hiç bir kelime uymuyor.</li>
<li>dp[4] = True -&gt; code sözlükte var.</li>
<li>dp[3] = False -&gt; tcode  hiç bir kelime uymuyor.</li>
<li>dp[2] = False -&gt; etcode  hiç bir kelime uymuyor.</li>
<li>dp[1] = False -&gt; eetcode  hiç bir kelime uymuyor.</li>
<li>dp[0] = True -&gt; leet sözlükte var.</li>
<li>Burada dp[0] = dp[0 + len(w)] şeklinde kontrol ederek bir desen yakalayabiliriz.</li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python">    <span class="k">def</span> <span class="nf">wordBreak</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">s</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">wordDict</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
        <span class="n">dp</span> <span class="o">=</span> <span class="p">[</span><span class="kc">False</span><span class="p">]</span> <span class="o">*</span> <span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">s</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span>
        <span class="n">dp</span><span class="p">[</span><span class="nb">len</span><span class="p">(</span><span class="n">s</span><span class="p">)]</span> <span class="o">=</span> <span class="kc">True</span>
        
        <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">s</span><span class="p">)</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">):</span>
            <span class="k">for</span> <span class="n">w</span> <span class="ow">in</span> <span class="n">wordDict</span><span class="p">:</span>
                <span class="k">if</span> <span class="p">(</span><span class="n">i</span> <span class="o">+</span> <span class="nb">len</span><span class="p">(</span><span class="n">w</span><span class="p">))</span> <span class="o">&lt;=</span> <span class="nb">len</span><span class="p">(</span><span class="n">s</span><span class="p">)</span> <span class="ow">and</span> <span class="n">s</span><span class="p">[</span><span class="n">i</span> <span class="p">:</span> <span class="n">i</span> <span class="o">+</span><span class="nb">len</span><span class="p">(</span><span class="n">w</span><span class="p">)]</span> <span class="o">==</span> <span class="n">w</span><span class="p">:</span>
                    <span class="n">dp</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="n">dp</span><span class="p">[</span><span class="n">i</span> <span class="o">+</span> <span class="nb">len</span><span class="p">(</span><span class="n">w</span><span class="p">)]</span>
                <span class="k">if</span> <span class="n">dp</span><span class="p">[</span><span class="n">i</span><span class="p">]:</span>
                    <span class="k">break</span>
        <span class="k">return</span> <span class="n">dp</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>

</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 005 Longest Palindromic Substring</title>
			<link>https://www.dincerbakkal.com/posts/leetcode005/</link>
			<pubDate>Sun, 25 Apr 2021 20:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode005/</guid>
			<description>def longestPalindrome(self, s: str) -&amp;gt; str: longest = &amp;#39;&amp;#39; def findLongest(s, l, r): while l&amp;gt;=0 and r&amp;lt;len(s) and s[l] == s[r]: l-=1 r+=1 return s[l+1:r] for i in range(len(s)): # odd case, like &amp;#34;aba&amp;#34; s1 = findLongest(s, i, i) if len(s1) &amp;gt; len(longest): longest = s1 # even case, like &amp;#34;abba&amp;#34; s2 = findLongest(s, i, i+1) if len(s2) &amp;gt; len(longest): longest = s2 return longest </description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<!-- raw HTML omitted -->
<!-- raw HTML omitted -->
<!-- raw HTML omitted -->
<!-- raw HTML omitted -->
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">def</span> <span class="nf">longestPalindrome</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">s</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
        <span class="n">longest</span> <span class="o">=</span> <span class="s1">&#39;&#39;</span>
        <span class="k">def</span> <span class="nf">findLongest</span><span class="p">(</span><span class="n">s</span><span class="p">,</span> <span class="n">l</span><span class="p">,</span> <span class="n">r</span><span class="p">):</span>
            <span class="k">while</span> <span class="n">l</span><span class="o">&gt;=</span><span class="mi">0</span> <span class="ow">and</span> <span class="n">r</span><span class="o">&lt;</span><span class="nb">len</span><span class="p">(</span><span class="n">s</span><span class="p">)</span> <span class="ow">and</span> <span class="n">s</span><span class="p">[</span><span class="n">l</span><span class="p">]</span> <span class="o">==</span> <span class="n">s</span><span class="p">[</span><span class="n">r</span><span class="p">]:</span>
                <span class="n">l</span><span class="o">-=</span><span class="mi">1</span>
                <span class="n">r</span><span class="o">+=</span><span class="mi">1</span>
            <span class="k">return</span> <span class="n">s</span><span class="p">[</span><span class="n">l</span><span class="o">+</span><span class="mi">1</span><span class="p">:</span><span class="n">r</span><span class="p">]</span>
        
        <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">s</span><span class="p">)):</span>
            <span class="c1"># odd case, like &#34;aba&#34;</span>
            <span class="n">s1</span> <span class="o">=</span> <span class="n">findLongest</span><span class="p">(</span><span class="n">s</span><span class="p">,</span> <span class="n">i</span><span class="p">,</span> <span class="n">i</span><span class="p">)</span>
            <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">s1</span><span class="p">)</span> <span class="o">&gt;</span> <span class="nb">len</span><span class="p">(</span><span class="n">longest</span><span class="p">):</span> <span class="n">longest</span> <span class="o">=</span> <span class="n">s1</span>
            <span class="c1"># even case, like &#34;abba&#34;</span>
            <span class="n">s2</span> <span class="o">=</span> <span class="n">findLongest</span><span class="p">(</span><span class="n">s</span><span class="p">,</span> <span class="n">i</span><span class="p">,</span> <span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span>
            <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">s2</span><span class="p">)</span> <span class="o">&gt;</span> <span class="nb">len</span><span class="p">(</span><span class="n">longest</span><span class="p">):</span> <span class="n">longest</span> <span class="o">=</span> <span class="n">s2</span>
                
        <span class="k">return</span> <span class="n">longest</span>
</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 300 Longest Increasing Subsequence</title>
			<link>https://www.dincerbakkal.com/posts/leetcode300/</link>
			<pubDate>Sat, 24 Apr 2021 20:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode300/</guid>
			<description>Given an integer array nums, return the length of the longest strictly increasing subsequence.
A subsequence is a sequence that can be derived from an array by deleting some or no elements without changing the order of the remaining elements. For example, [3,6,2,7] is a subsequence of the array [0,3,1,6,2,2,7].
 Input: nums = [10,9,2,5,3,7,101,18] Output: 4 Explanation: The longest increasing subsequence is [2,3,7,101], therefore the length is 4.  Input: nums = [0,1,0,3,2,3] Output: 4  Input: nums = [7,7,7,7,7,7,7] Output: 1  Bu soruda bize bir liste veriliyor.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>Given an integer array nums, return the length of the longest strictly increasing subsequence.</p>
<p>A subsequence is a sequence that can be derived from an array by deleting some or no elements without changing the order of the remaining elements. For example, [3,6,2,7] is a subsequence of the array [0,3,1,6,2,2,7].</p>
<!-- raw HTML omitted -->
<pre><code>
Input: nums = [10,9,2,5,3,7,101,18]
Output: 4
Explanation: The longest increasing subsequence is [2,3,7,101], therefore the length is 4.

</code></pre><!-- raw HTML omitted -->
<pre><code>
Input: nums = [0,1,0,3,2,3]
Output: 4

</code></pre><!-- raw HTML omitted -->
<pre><code>
Input: nums = [7,7,7,7,7,7,7]
Output: 1

</code></pre><!-- raw HTML omitted -->
<ul>
<li>Bu soruda bize bir liste veriliyor.Ve sıralı olarak artarak giden maksimum kaç sayı olduğu soruluyor.</li>
<li>Örneğin [10,9,2,5,3,7,18] listesinde [2,3,7,18] artarak ilerleyen sayı kümesi elemanı da 4.</li>
<li>Bu soruyu dinamik programlama ile çözebiliriz.</li>
<li>En sondan başlayarak birer birer tüm sayıları gezelim.</li>
<li>[18] artarak ilerleyen sayı kümesi elemanı 1 indexi 6 olduğu için lis[6] = 1</li>
<li>[7,18] artarak ilerleyen sayı kümesi elemanı 2 peki bu 2 yi nasıl hesaplarız lis[5] = max(1,1+lis[6]) yani lis[5] = 2</li>
<li>[3,7,18] artarak ilerleyen sayı kümesi elemanı 3 peki bu 3 ü nasıl hesaplarız lis[4] = max(1,1+lis[5],1+lis[6]) yani lis[4] = 3</li>
<li>[5,3,7,18] artarak ilerleyen sayı kümesi elemanı 3 peki bu 3 ü nasıl hesaplarız buradaki dikkat edilmesi gereken şey lis[4] bu karşılaştırmaya koyulmadı çünkü 3 5 ten küçük ve istediğimiz listeye uymuyor o yüzden lis[3] = max(1,1+lis[5],1+lis[6]) yani lis[3] = 3</li>
<li>Bu şekilde 0. indexe kadar karşılaştırma yapılarak gidilir ve her index için artarak giden maksimum kaç sayı olduğu bulunur.Sonra da bunlardan en büyüğü dönülür.</li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python">    <span class="k">def</span> <span class="nf">lengthOfLIS</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">nums</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
        <span class="n">LIS</span> <span class="o">=</span> <span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">*</span> <span class="nb">len</span><span class="p">(</span><span class="n">nums</span><span class="p">)</span>
        
        <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">nums</span><span class="p">)</span> <span class="o">-</span> <span class="mi">1</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span><span class="p">):</span>
            <span class="k">for</span> <span class="n">j</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">,</span><span class="nb">len</span><span class="p">(</span><span class="n">nums</span><span class="p">)):</span>
                <span class="k">if</span> <span class="n">nums</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">&lt;</span> <span class="n">nums</span> <span class="p">[</span><span class="n">j</span><span class="p">]:</span>
                    <span class="n">LIS</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="n">LIS</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="mi">1</span> <span class="o">+</span> <span class="n">LIS</span><span class="p">[</span><span class="n">j</span><span class="p">])</span>
        <span class="k">return</span> <span class="nb">max</span><span class="p">(</span><span class="n">LIS</span><span class="p">)</span>

</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 152 Maximum Product Subarray</title>
			<link>https://www.dincerbakkal.com/posts/leetcode152/</link>
			<pubDate>Fri, 23 Apr 2021 20:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode152/</guid>
			<description>Given an integer array nums, find a contiguous non-empty subarray within the array that has the largest product, and return the product.
It is guaranteed that the answer will fit in a 32-bit integer.
A subarray is a contiguous subsequence of the array.
 Input: nums = [2,3,-2,4] Output: 6 Explanation: [2,3] has the largest product 6.  Input: nums = [-2,0,-1] Output: 0 Explanation: The result cannot be 2, because [-2,-1] is not a subarray.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>Given an integer array nums, find a contiguous non-empty subarray within the array that has the largest product, and return the product.</p>
<p>It is guaranteed that the answer will fit in a 32-bit integer.</p>
<p>A subarray is a contiguous subsequence of the array.</p>
<!-- raw HTML omitted -->
<pre><code>
Input: nums = [2,3,-2,4]
Output: 6
Explanation: [2,3] has the largest product 6.

</code></pre><!-- raw HTML omitted -->
<pre><code>
Input: nums = [-2,0,-1]
Output: 0
Explanation: The result cannot be 2, because [-2,-1] is not a subarray.

</code></pre><!-- raw HTML omitted -->
<ul>
<li>Bu soruda bize bir liste veriliyor.Ve listede çarpımları en yüksek olabilecek şekilde bir altkümenin çarpım sonucunu soruyor.</li>
<li>Tüm sayılar pozitif olsa listenin kendisini dönerdik ama liste içindeki negatif sayılar işi bozuyor.</li>
<li>Yapmamız gereken şey her önceki küme için hem minimum çarpıım hem de maksimum çarpımı elimizde tutarak ilerlemek.</li>
<li>Bunun nedeni eğer listedeki bir sonraki sayı pozitif ise maximum çarpanı çarparak ilerleriz ama bir sonraki sayı negatif ise elimizdeki pozitif maksimum çarpmamız bize en yüksek sayıyı vermez aksine elimizdeki minimum negatif ise negatiflerin çarpımı pozitifi verir.</li>
<li>Elimizdeki liste [2,3,-2] olsun. Bunun maksimum çarpanı 2<em>3 = 6 dır minimum çarpanı ise 3</em>(-2) = -6 dır.</li>
<li>Şimdi eğer listede bir adım ilerlersek [2,3,-2,4] elimize 4 gelir. Bu durumda [2,3,-2] listenin max = 6 idi 4 ile çarparız 24 buluruz.Peki eğer liste [2,3,-2,-4] olsaydı işte o zaman çarpacağımız negatif olacağı için önceki listenin min olan -6 ile çarpımı -6 * -4 = 24 bize maksimumu verirdi.</li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python">    <span class="k">def</span> <span class="nf">maxProduct</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">nums</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
        <span class="n">res</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="n">nums</span><span class="p">)</span>
        <span class="n">curMin</span><span class="p">,</span> <span class="n">curMax</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">1</span>
        
        <span class="k">for</span> <span class="n">n</span> <span class="ow">in</span> <span class="n">nums</span><span class="p">:</span>
            <span class="n">tmp</span><span class="o">=</span><span class="n">curMax</span> <span class="o">*</span> <span class="n">n</span>
            <span class="n">curMax</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="n">n</span> <span class="o">*</span> <span class="n">curMax</span><span class="p">,</span><span class="n">n</span> <span class="o">*</span> <span class="n">curMin</span><span class="p">,</span> <span class="n">n</span><span class="p">)</span>
            <span class="n">curMin</span> <span class="o">=</span> <span class="nb">min</span><span class="p">(</span><span class="n">tmp</span><span class="p">,</span> <span class="n">n</span> <span class="o">*</span> <span class="n">curMin</span><span class="p">,</span> <span class="n">n</span><span class="p">)</span>
            <span class="n">res</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="n">res</span><span class="p">,</span><span class="n">curMax</span><span class="p">)</span>
        <span class="k">return</span> <span class="n">res</span>

</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 213 House Robber II</title>
			<link>https://www.dincerbakkal.com/posts/leetcode213/</link>
			<pubDate>Thu, 22 Apr 2021 20:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode213/</guid>
			<description>You are a professional robber planning to rob houses along a street. Each house has a certain amount of money stashed. All houses at this place are arranged in a circle. That means the first house is the neighbor of the last one. Meanwhile, adjacent houses have a security system connected, and it will automatically contact the police if two adjacent houses were broken into on the same night.
Given an integer array nums representing the amount of money of each house, return the maximum amount of money you can rob tonight without alerting the police.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>You are a professional robber planning to rob houses along a street. Each house has a certain amount of money stashed. All houses at this place are arranged in a circle. That means the first house is the neighbor of the last one. Meanwhile, adjacent houses have a security system connected, and it will automatically contact the police if two adjacent houses were broken into on the same night.</p>
<p>Given an integer array nums representing the amount of money of each house, return the maximum amount of money you can rob tonight without alerting the police.</p>
<!-- raw HTML omitted -->
<pre><code>
Input: nums = [2,3,2]
Output: 3
Explanation: You cannot rob house 1 (money = 2) and then rob house 3 (money = 2), because they are adjacent houses.

</code></pre><!-- raw HTML omitted -->
<pre><code>
Input: nums = [1,2,3,1]
Output: 4
Explanation: Rob house 1 (money = 1) and then rob house 3 (money = 3).
Total amount you can rob = 1 + 3 = 4.

</code></pre><!-- raw HTML omitted -->
<pre><code>
Input: nums = [0]
Output: 0

</code></pre><!-- raw HTML omitted -->
<ul>
<li>Bu soruda bizden hırsızlık yapmamız isteniyor. :D Verilen listedeki değerler her evde bulunan para miktarı. Yalnız yan yana 2 ev soyulunca alarm devreye giriyor. Evleri soyarak en çok ne kadar para toplayabileceğimiz soruluyor.198. sorunun aynısı sadece bir fark var.Bu soruda evler çember halinde yani birinci ve sonuncu evler yanyana.</li>
<li>Soruyu temel olarak 198. soru gibi düşünebiliriz.</li>
<li>Oradaki algoritmayı helper algoritma olarak yazarsak eğer düşünmemiz gereken 1. evin olmadığı bir listede mi yoksa sonuncu evin olmadığı bir listede mi daha yüksek miktarlı soygun yapılır?</li>
<li>Ayrıca listede tek ev bulunması durumunu da düşünerek bu 3 durumdan hangisi en yüksek değerli ise o dönülür.</li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python">    <span class="k">def</span> <span class="nf">rob</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">nums</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
        <span class="k">return</span> <span class="nb">max</span><span class="p">(</span><span class="n">nums</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="bp">self</span><span class="o">.</span><span class="n">helper</span><span class="p">(</span><span class="n">nums</span><span class="p">[</span><span class="mi">1</span><span class="p">:]),</span> <span class="bp">self</span><span class="o">.</span><span class="n">helper</span><span class="p">(</span><span class="n">nums</span><span class="p">[:</span><span class="o">-</span><span class="mi">1</span><span class="p">]))</span>
    
    <span class="k">def</span> <span class="nf">helper</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">nums</span><span class="p">):</span>
        <span class="n">rob1</span><span class="p">,</span><span class="n">rob2</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span><span class="mi">0</span>
        
        <span class="k">for</span> <span class="n">n</span> <span class="ow">in</span> <span class="n">nums</span><span class="p">:</span>
            <span class="n">newRob</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="n">rob1</span> <span class="o">+</span> <span class="n">n</span><span class="p">,</span> <span class="n">rob2</span><span class="p">)</span>
            <span class="n">rob1</span> <span class="o">=</span> <span class="n">rob2</span>
            <span class="n">rob2</span> <span class="o">=</span> <span class="n">newRob</span>
        <span class="k">return</span> <span class="n">rob2</span>

</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 322 Coin Change</title>
			<link>https://www.dincerbakkal.com/posts/leetcode322/</link>
			<pubDate>Thu, 22 Apr 2021 20:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode322/</guid>
			<description>You are given an integer array coins representing coins of different denominations and an integer amount representing a total amount of money.
Return the fewest number of coins that you need to make up that amount. If that amount of money cannot be made up by any combination of the coins, return -1.
You may assume that you have an infinite number of each kind of coin.
 Input: coins = [1,2,5], amount = 11 Output: 3 Explanation: 11 = 5 + 5 + 1  Input: coins = [2], amount = 3 Output: -1  Input: coins = [1], amount = 0 Output: 0  Input: coins = [1], amount = 1 Output: 1  Bu soruda bize bir kaç demir para (coins = [1,2,5]) ve bir sayı veriliyor.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>You are given an integer array coins representing coins of different denominations and an integer amount representing a total amount of money.</p>
<p>Return the fewest number of coins that you need to make up that amount. If that amount of money cannot be made up by any combination of the coins, return -1.</p>
<p>You may assume that you have an infinite number of each kind of coin.</p>
<!-- raw HTML omitted -->
<pre><code>
Input: coins = [1,2,5], amount = 11
Output: 3
Explanation: 11 = 5 + 5 + 1

</code></pre><!-- raw HTML omitted -->
<pre><code>
Input: coins = [2], amount = 3
Output: -1

</code></pre><!-- raw HTML omitted -->
<pre><code>
Input: coins = [1], amount = 0
Output: 0

</code></pre><!-- raw HTML omitted -->
<pre><code>
Input: coins = [1], amount = 1
Output: 1

</code></pre><!-- raw HTML omitted -->
<ul>
<li>Bu soruda bize bir kaç demir para (coins = [1,2,5]) ve bir sayı veriliyor.Ve demir en az kaç demir para kullanarak bu sayıyı bulabileceğimiz soruluyor.Eğer bu demir paralardan istenen sayı elde edilemiyorsa -1 dönmemiz isteniyor.</li>
<li>Soru güzel bir soru.Dinamik programlama tekniği ile çözebiliriz.</li>
<li>Bizden 7 elde etmemiz istensin.Ve [1,2,5] demir paraları verilmiş olsun.7 tane 1 kullanabiliriz.Yada 3 tane 1 ve 1 tane 1 ile 4 parada 7 elde edebiliriz.Yasa sadece 5 ve 2 kullanarak sadece 2 parada 7 elde ederiz.Peki bunu nasıl bulacağız.</li>
<li>İlk olarak tüm istenen değerler için kaç demir para kullanılacağını yüksek değerler girerek oluştururuz.Çünkü karşılaştırma yaparak hangisi daha az demir para kullanıyorsa onu bırakacağız.</li>
<li>Burada yakalamamız gereken desen şu, her istenen değeri elimizdeki paralarla en düşük olacak şekilde elde etmek.</li>
<li>0&rsquo;dan 7&rsquo;ye kadar minimum paraları nasıl elde edebiliriz bakalım.</li>
<li>Elimizde sadece [1] olsun</li>
<li>Para sayısı   0 1 2 3 4 5 6 7</li>
<li>İstenen değer 0 1 2 3 4 5 6 7</li>
<li>Burada 2 ile oluşturmaya çalışacağız.0 ve 1 değişmez.Ama 2 ye geldiğimizde 2 tane 1 ile de oluşturabiliriz yada sadece 2 ile de oluşturabiliriz.Karar vermemiz gerekir.
numOfCoins[amount] = min(numOfCoins[amount],1+numOfCoins[amount-c])</li>
<li>Elimizde      [1,2] olsun</li>
<li>Para sayısı   0 1 1 2 2 3 3 4</li>
<li>İstenen değer 0 1 2 3 4 5 6 7</li>
<li>Burada 5 ile sayılar nasıl değişti görelim.0,1,2,3,4 hepsi 5 ten küçük olduğu için değişmedi.İstenen değer 5 ise ve elimizde 5lik bir para var ise min(numOfCoins[5],1+numOfCoins[5-5])
yani min(3(bir önceki durumda 3 tane para ile 5 oluşturmuştuk),1 +numOfCoins[0])</li>
<li>Elimizde    [1,2,5] olsun</li>
<li>Para sayısı   0 1 1 2 2 1 2 2</li>
<li>İstenen değer 0 1 2 3 4 5 6 7</li>
<li>Bu şekilde 0&rsquo;dan bizden istenen değer(amount) kadar tüm listeyi doldururuz.Sonrada istenen değeri döneriz.</li>
<li>Eğer elimizdeki değer programın başında oluşturduğumuz yüksek değer ise bu durumda elimizdeki paralardan bu sayıyı oluşturamamışızdır -1 döneriz.</li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python">    <span class="k">def</span> <span class="nf">coinChange</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">coins</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">],</span> <span class="n">amount</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
        <span class="n">numOfCoins</span> <span class="o">=</span> <span class="p">[</span><span class="n">amount</span> <span class="o">+</span> <span class="mi">1</span><span class="p">]</span> <span class="o">*</span> <span class="p">(</span><span class="n">amount</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span>
        <span class="n">numOfCoins</span> <span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="mi">0</span>

        <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="n">coins</span><span class="p">:</span>
            <span class="k">for</span> <span class="n">amount</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">numOfCoins</span><span class="p">)):</span>
                <span class="k">if</span> <span class="n">c</span> <span class="o">&lt;=</span><span class="n">amount</span><span class="p">:</span>
                    <span class="n">numOfCoins</span><span class="p">[</span><span class="n">amount</span><span class="p">]</span> <span class="o">=</span> <span class="nb">min</span><span class="p">(</span><span class="n">numOfCoins</span><span class="p">[</span><span class="n">amount</span><span class="p">],</span><span class="mi">1</span><span class="o">+</span><span class="n">numOfCoins</span><span class="p">[</span><span class="n">amount</span><span class="o">-</span><span class="n">c</span><span class="p">])</span>
                    
        <span class="k">if</span> <span class="n">numOfCoins</span><span class="p">[</span><span class="n">amount</span><span class="p">]</span> <span class="o">!=</span> <span class="n">amount</span> <span class="o">+</span> <span class="mi">1</span><span class="p">:</span>
            <span class="k">return</span> <span class="n">numOfCoins</span><span class="p">[</span><span class="n">amount</span><span class="p">]</span>
        <span class="k">else</span><span class="p">:</span>
            <span class="k">return</span> <span class="o">-</span><span class="mi">1</span>

</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 198 House Robber</title>
			<link>https://www.dincerbakkal.com/posts/leetcode198/</link>
			<pubDate>Wed, 21 Apr 2021 20:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode198/</guid>
			<description>You are a professional robber planning to rob houses along a street. Each house has a certain amount of money stashed, the only constraint stopping you from robbing each of them is that adjacent houses have security systems connected and it will automatically contact the police if two adjacent houses were broken into on the same night.
Given an integer array nums representing the amount of money of each house, return the maximum amount of money you can rob tonight without alerting the police.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>You are a professional robber planning to rob houses along a street. Each house has a certain amount of money stashed, the only constraint stopping you from robbing each of them is that adjacent houses have security systems connected and it will automatically contact the police if two adjacent houses were broken into on the same night.</p>
<p>Given an integer array nums representing the amount of money of each house, return the maximum amount of money you can rob tonight without alerting the police.</p>
<!-- raw HTML omitted -->
<pre><code>
Input: nums = [1,2,3,1]
Output: 4
Explanation: Rob house 1 (money = 1) and then rob house 3 (money = 3).
Total amount you can rob = 1 + 3 = 4.

</code></pre><!-- raw HTML omitted -->
<pre><code>
Input: nums = [2,7,9,3,1]
Output: 12
Explanation: Rob house 1 (money = 2), rob house 3 (money = 9) and rob house 5 (money = 1).
Total amount you can rob = 2 + 9 + 1 = 12.

</code></pre><!-- raw HTML omitted -->
<ul>
<li>
<p>Bu soruda bizden hırsızlık yapmamız isteniyor. :D Verilen listedeki değerler her evde bulunan para miktarı. Yalnız yan yana 2 ev soyulunca alarm devreye giriyor. Evleri soyarak en çok ne kadar para toplayabileceğimiz soruluyor.</p>
</li>
<li>
<p>Elimizde  nums = [1,2,3,1,5] listesi olsun.</p>
</li>
<li>
<p>Şimdi burada bir pattern yakalamamız lazım.</p>
</li>
<li>
<p>1 Ev var  nums[0] = 1</p>
</li>
<li>
<p>2 Ev var  max(nums[0] = 1, nums[1] = 2) büyük olan kalır</p>
</li>
<li>
<p>3 Ev var  max(nums[1] = 2, nums[0] + nums[3] = 4) büyük olan kalır</p>
</li>
<li>
<p>4 Ev var  max(nums[0] + nums[3] = 4, 2 ev var hali = 2 + nums[4] = 3) büyük olan kalır</p>
</li>
<li>
<p>5 Ev var  max(nums[0] + nums[3] = 4, 3 ev var hali = 4 + nums[5] = 9) büyük olan kalır</p>
</li>
<li>
<p>Görüldüğü gibi aslında seçim yapmamız gereken şey elimizdeki son ev ve 2 önceki evleri maksimum olacak şekilde mi soygun yapmak yoksa son ev hariç kalan evlerin maksimum olacak şekilde mi soymak ?</p>
</li>
<li>
<p>f(n) = max(nums[n] + f(n-2), f(n-1)) bu şekilde bir fonksiyon oluşur.</p>
</li>
<li>
<p>2 ev için f(2) = max(nums[2] + f(0), f(1)) olur f(1) = max(nums[0],nums[1]) kök fonksiyon oluştu.</p>
</li>
<li>
<p>Yapacağımız şey 2 değişken oluşturarak bu değerleri güncelleyerek maksimum değeri bulmak.</p>
</li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python">    <span class="k">def</span> <span class="nf">rob</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">nums</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
        <span class="n">rob1</span><span class="p">,</span><span class="n">rob2</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span><span class="mi">0</span>

        <span class="c1">#[rob1,rob2,n,n+1,n+2....]</span>
        <span class="k">for</span> <span class="n">n</span> <span class="ow">in</span> <span class="n">nums</span><span class="p">:</span>
            <span class="n">temp</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="n">rob1</span> <span class="o">+</span> <span class="n">nums</span><span class="p">[</span><span class="n">i</span><span class="p">],</span><span class="n">rob2</span><span class="p">)</span>
            <span class="n">rob1</span> <span class="o">=</span> <span class="n">rob2</span>
            <span class="n">rob2</span> <span class="o">=</span> <span class="n">temp</span>
        
        <span class="k">return</span> <span class="n">rob2</span>

</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 320 Generalized Abbreviation</title>
			<link>https://www.dincerbakkal.com/posts/leetcode320/</link>
			<pubDate>Tue, 20 Apr 2021 20:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode320/</guid>
			<description>A word&amp;rsquo;s generalized abbreviation can be constructed by taking any number of non-overlapping substrings and replacing them with their respective lengths. For example, &amp;ldquo;abcde&amp;rdquo; can be abbreviated into &amp;ldquo;a3e&amp;rdquo; (&amp;ldquo;bcd&amp;rdquo; turned into &amp;ldquo;3&amp;rdquo;), &amp;ldquo;1bcd1&amp;rdquo; (&amp;ldquo;a&amp;rdquo; and &amp;ldquo;e&amp;rdquo; both turned into &amp;ldquo;1&amp;rdquo;), and &amp;ldquo;23&amp;rdquo; (&amp;ldquo;ab&amp;rdquo; turned into &amp;ldquo;2&amp;rdquo; and &amp;ldquo;cde&amp;rdquo; turned into &amp;ldquo;3&amp;rdquo;).
Given a string word, return a list of all the possible generalized abbreviations of word. Return the answer in any order.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>A word&rsquo;s generalized abbreviation can be constructed by taking any number of non-overlapping substrings and replacing them with their respective lengths. For example, &ldquo;abcde&rdquo; can be abbreviated into &ldquo;a3e&rdquo; (&ldquo;bcd&rdquo; turned into &ldquo;3&rdquo;), &ldquo;1bcd1&rdquo; (&ldquo;a&rdquo; and &ldquo;e&rdquo; both turned into &ldquo;1&rdquo;), and &ldquo;23&rdquo; (&ldquo;ab&rdquo; turned into &ldquo;2&rdquo; and &ldquo;cde&rdquo; turned into &ldquo;3&rdquo;).</p>
<p>Given a string word, return a list of all the possible generalized abbreviations of word. Return the answer in any order.</p>
<!-- raw HTML omitted -->
<pre><code>
Input: word = &quot;word&quot;
Output: [&quot;4&quot;,&quot;3d&quot;,&quot;2r1&quot;,&quot;2rd&quot;,&quot;1o2&quot;,&quot;1o1d&quot;,&quot;1or1&quot;,&quot;1ord&quot;,&quot;w3&quot;,&quot;w2d&quot;,&quot;w1r1&quot;,&quot;w1rd&quot;,&quot;wo2&quot;,&quot;wo1d&quot;,&quot;wor1&quot;,&quot;word&quot;]

</code></pre><!-- raw HTML omitted -->
<pre><code>
Input: word = &quot;a&quot;
Output: [&quot;1&quot;,&quot;a&quot;]

</code></pre><!-- raw HTML omitted -->
<ul>
<li>Eklenecek</li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python">    <span class="k">def</span> <span class="nf">generateAbbreviations</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">word</span><span class="p">):</span>
        <span class="s2">&#34;&#34;&#34;
</span><span class="s2">        :type word: str
</span><span class="s2">        :rtype: List[str]
</span><span class="s2">        &#34;&#34;&#34;</span>
        <span class="k">def</span> <span class="nf">generateAbbreviationsHelper</span><span class="p">(</span><span class="n">word</span><span class="p">,</span> <span class="n">i</span><span class="p">,</span> <span class="n">cur</span><span class="p">,</span> <span class="n">res</span><span class="p">):</span>
            <span class="k">if</span> <span class="n">i</span> <span class="o">==</span> <span class="nb">len</span><span class="p">(</span><span class="n">word</span><span class="p">):</span>
                <span class="n">res</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&#34;&#34;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">cur</span><span class="p">))</span>
                <span class="k">return</span>
            <span class="n">cur</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">word</span><span class="p">[</span><span class="n">i</span><span class="p">])</span>
            <span class="n">generateAbbreviationsHelper</span><span class="p">(</span><span class="n">word</span><span class="p">,</span> <span class="n">i</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="n">cur</span><span class="p">,</span> <span class="n">res</span><span class="p">)</span>
            <span class="n">cur</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
            <span class="k">if</span> <span class="ow">not</span> <span class="n">cur</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">cur</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">][</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">isdigit</span><span class="p">():</span>
                <span class="k">for</span> <span class="n">l</span> <span class="ow">in</span> <span class="n">xrange</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">word</span><span class="p">)</span> <span class="o">-</span> <span class="n">i</span> <span class="o">+</span> <span class="mi">1</span><span class="p">):</span>
                    <span class="n">cur</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">l</span><span class="p">))</span>
                    <span class="n">generateAbbreviationsHelper</span><span class="p">(</span><span class="n">word</span><span class="p">,</span> <span class="n">i</span> <span class="o">+</span> <span class="n">l</span><span class="p">,</span> <span class="n">cur</span><span class="p">,</span> <span class="n">res</span><span class="p">)</span>
                    <span class="n">cur</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>

        <span class="n">res</span><span class="p">,</span> <span class="n">cur</span> <span class="o">=</span> <span class="p">[],</span> <span class="p">[]</span>
        <span class="n">generateAbbreviationsHelper</span><span class="p">(</span><span class="n">word</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">cur</span><span class="p">,</span> <span class="n">res</span><span class="p">)</span>
        <span class="k">return</span> <span class="n">res</span>

</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 17 Letter Combinations of a Phone Number</title>
			<link>https://www.dincerbakkal.com/posts/leetcode017/</link>
			<pubDate>Tue, 20 Apr 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode017/</guid>
			<description>Given a string containing digits from 2-9 inclusive, return all possible letter combinations that the number could represent. Return the answer in any order.
A mapping of digit to letters (just like on the telephone buttons) is given below. Note that 1 does not map to any letters.
  Input: digits = &amp;quot;23&amp;quot; Output: [&amp;quot;ad&amp;quot;,&amp;quot;ae&amp;quot;,&amp;quot;af&amp;quot;,&amp;quot;bd&amp;quot;,&amp;quot;be&amp;quot;,&amp;quot;bf&amp;quot;,&amp;quot;cd&amp;quot;,&amp;quot;ce&amp;quot;,&amp;quot;cf&amp;quot;]  Input: digits = &amp;quot;&amp;quot; Output: []  Input: digits = &amp;quot;2&amp;quot; Output: [&amp;quot;a&amp;quot;,&amp;quot;b&amp;quot;,&amp;quot;c&amp;quot;]  Soruda bizden telefonlarda olan kodlama sistemine göre verilen rakamların kaç farklı harf kombinasyonu olduğunu bulmamızı istiyor.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>Given a string containing digits from 2-9 inclusive, return all possible letter combinations that the number could represent. Return the answer in any order.</p>
<p>A mapping of digit to letters (just like on the telephone buttons) is given below. Note that 1 does not map to any letters.</p>
<figure><img src="/image/017.png"
         alt="image"/>
</figure>

<!-- raw HTML omitted -->
<pre><code>
Input: digits = &quot;23&quot;
Output: [&quot;ad&quot;,&quot;ae&quot;,&quot;af&quot;,&quot;bd&quot;,&quot;be&quot;,&quot;bf&quot;,&quot;cd&quot;,&quot;ce&quot;,&quot;cf&quot;]

</code></pre><!-- raw HTML omitted -->
<pre><code>
Input: digits = &quot;&quot;
Output: []

</code></pre><!-- raw HTML omitted -->
<pre><code>
Input: digits = &quot;2&quot;
Output: [&quot;a&quot;,&quot;b&quot;,&quot;c&quot;]

</code></pre><!-- raw HTML omitted -->
<ul>
<li>Soruda bizden telefonlarda olan kodlama sistemine göre verilen rakamların kaç farklı harf kombinasyonu olduğunu bulmamızı istiyor.</li>
<li>Görece kolay bir soru bruteforce ile tüm harf kombinasyonlarını bulabiliriz.</li>
<li>Yapacağımız ilk şey sayıların karşılığı olan harfleri bir listede tutmak.</li>
<li>Daha sonra backtrack adında yazdığımız yardımcı fonksiyonu rekursif olarak çağırarak kombinasyonları buluruz.</li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python">        <span class="k">def</span> <span class="nf">letterCombinations</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">digits</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
        <span class="n">res</span> <span class="o">=</span> <span class="p">[]</span>
        <span class="n">digitToChar</span> <span class="o">=</span> <span class="p">{</span> <span class="s2">&#34;2&#34;</span> <span class="p">:</span> <span class="s2">&#34;abc&#34;</span><span class="p">,</span>
                        <span class="s2">&#34;3&#34;</span> <span class="p">:</span> <span class="s2">&#34;def&#34;</span><span class="p">,</span>
                        <span class="s2">&#34;4&#34;</span> <span class="p">:</span> <span class="s2">&#34;ghi&#34;</span><span class="p">,</span>
                        <span class="s2">&#34;5&#34;</span> <span class="p">:</span> <span class="s2">&#34;jkl&#34;</span><span class="p">,</span>
                        <span class="s2">&#34;6&#34;</span> <span class="p">:</span> <span class="s2">&#34;mno&#34;</span><span class="p">,</span>
                        <span class="s2">&#34;7&#34;</span> <span class="p">:</span> <span class="s2">&#34;qprs&#34;</span><span class="p">,</span>
                        <span class="s2">&#34;8&#34;</span> <span class="p">:</span> <span class="s2">&#34;tuv&#34;</span><span class="p">,</span>
                        <span class="s2">&#34;9&#34;</span> <span class="p">:</span> <span class="s2">&#34;wxyz&#34;</span><span class="p">}</span>
        
        <span class="k">def</span> <span class="nf">backtrack</span> <span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="n">curStr</span><span class="p">):</span>
            <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">curStr</span><span class="p">)</span> <span class="o">==</span> <span class="nb">len</span><span class="p">(</span><span class="n">digits</span><span class="p">):</span>
                <span class="n">res</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">curStr</span><span class="p">)</span>
                <span class="k">return</span>
            
            <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="n">digitToChar</span><span class="p">[</span><span class="n">digits</span><span class="p">[</span><span class="n">i</span><span class="p">]]:</span>
                <span class="n">backtrack</span><span class="p">(</span><span class="n">i</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="n">curStr</span> <span class="o">+</span> <span class="n">c</span><span class="p">)</span>
        
        <span class="k">if</span> <span class="n">digits</span><span class="p">:</span>
            <span class="n">backtrack</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="s2">&#34;&#34;</span><span class="p">)</span>
        
        <span class="k">return</span> <span class="n">res</span>

</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 131 Palindrome Partitioning</title>
			<link>https://www.dincerbakkal.com/posts/leetcode131/</link>
			<pubDate>Mon, 19 Apr 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode131/</guid>
			<description>Given a string s, partition s such that every substring of the partition is a palindrome. Return all possible palindrome partitioning of s.
A palindrome string is a string that reads the same backward as forward.
 Input: s = &amp;quot;aab&amp;quot; Output: [[&amp;quot;a&amp;quot;,&amp;quot;a&amp;quot;,&amp;quot;b&amp;quot;],[&amp;quot;aa&amp;quot;,&amp;quot;b&amp;quot;]]  Input: s = &amp;quot;a&amp;quot; Output: [[&amp;quot;a&amp;quot;]]  Soruda bize bir string listesi veriliyor.Ve bu listeden oluşturulabilecek palindrome string parçalarını bulmamız isteniyor. Palindrome düz ve ters aynı şekilde okunabilen kelime demek.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>Given a string s, partition s such that every substring of the partition is a palindrome. Return all possible palindrome partitioning of s.</p>
<p>A palindrome string is a string that reads the same backward as forward.</p>
<!-- raw HTML omitted -->
<pre><code>
Input: s = &quot;aab&quot;
Output: [[&quot;a&quot;,&quot;a&quot;,&quot;b&quot;],[&quot;aa&quot;,&quot;b&quot;]]

</code></pre><!-- raw HTML omitted -->
<pre><code>
Input: s = &quot;a&quot;
Output: [[&quot;a&quot;]]

</code></pre><!-- raw HTML omitted -->
<ul>
<li>Soruda bize bir string listesi veriliyor.Ve bu listeden oluşturulabilecek palindrome string parçalarını bulmamız isteniyor.</li>
<li>Palindrome düz ve ters aynı şekilde okunabilen kelime demek.Örneğin &ldquo;kaçak&rdquo;.</li>
<li>Bu soruyu çözmek için backtracking ile bu stringten oluşturulabilecek her harf kümesini buluruz.</li>
<li>dfs çağrılıp ilk for döngüsü içine girildiğinde 3 alt küme oluşur. [a],[aa],[aab]</li>
<li>Bunlardan palindrom olanları bulunur sonuç kümesine eklenir.Palindrom olmayandan devam edilmez.</li>
<li>Çağrılar sonucu oluşan parçalar aşağıdaki gibidir.</li>
</ul>
<pre><code>[]
['a'] tüm liste dolaşılmadı
['a', 'a'] tüm liste dolaşılmadı
['a', 'a', 'b']  sonuç listesine ekle
['a', 'ab'] palindrom olmadığı için kesildi
['aa'] tüm liste dolaşılmadı
['aa', 'b']  sonuç listesine ekle
['aab'] palindrom olmadığı için kesildi

</code></pre><!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python">    <span class="k">def</span> <span class="nf">partition</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">s</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">List</span><span class="p">[</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]]:</span>
        <span class="n">res</span> <span class="o">=</span> <span class="p">[]</span>
        <span class="n">part</span> <span class="o">=</span> <span class="p">[]</span>
        
        <span class="k">def</span> <span class="nf">dfs</span><span class="p">(</span><span class="n">i</span><span class="p">):</span>
            <span class="k">if</span> <span class="n">i</span><span class="o">&gt;=</span> <span class="nb">len</span><span class="p">(</span><span class="n">s</span><span class="p">):</span> <span class="c1">#tüm liste dolaşıldı ise ekle palindrom olmayanlar zaten i 3 olamaz.</span>
                <span class="n">res</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">part</span><span class="o">.</span><span class="n">copy</span><span class="p">())</span>
                <span class="k">return</span>
            <span class="k">for</span> <span class="n">j</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">s</span><span class="p">)):</span>
                <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">isPali</span><span class="p">(</span><span class="n">s</span><span class="p">,</span><span class="n">i</span><span class="p">,</span><span class="n">j</span><span class="p">):</span>
                    <span class="n">part</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">s</span><span class="p">[</span><span class="n">i</span><span class="p">:</span><span class="n">j</span><span class="o">+</span><span class="mi">1</span><span class="p">])</span>
                    <span class="n">dfs</span><span class="p">(</span><span class="n">j</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span>
                    <span class="n">part</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
                    
        <span class="n">dfs</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
        <span class="k">return</span> <span class="n">res</span>
    
    <span class="k">def</span> <span class="nf">isPali</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">s</span><span class="p">,</span> <span class="n">l</span><span class="p">,</span> <span class="n">r</span><span class="p">):</span>
        <span class="k">while</span> <span class="n">l</span> <span class="o">&lt;</span> <span class="n">r</span><span class="p">:</span>
            <span class="k">if</span> <span class="n">s</span><span class="p">[</span><span class="n">l</span><span class="p">]</span> <span class="o">!=</span> <span class="n">s</span><span class="p">[</span><span class="n">r</span><span class="p">]:</span>
                <span class="k">return</span> <span class="kc">False</span>
            <span class="n">l</span><span class="p">,</span><span class="n">r</span> <span class="o">=</span> <span class="n">l</span> <span class="o">+</span><span class="mi">1</span><span class="p">,</span> <span class="n">r</span><span class="o">-</span><span class="mi">1</span>
        <span class="k">return</span> <span class="kc">True</span>

</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 494 Target Sum</title>
			<link>https://www.dincerbakkal.com/posts/leetcode494/</link>
			<pubDate>Sun, 18 Apr 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode494/</guid>
			<description>You are given an integer array nums and an integer target.
You want to build an expression out of nums by adding one of the symbols &amp;lsquo;+&amp;rsquo; and &amp;lsquo;-&amp;rsquo; before each integer in nums and then concatenate all the integers.
For example, if nums = [2, 1], you can add a &amp;lsquo;+&amp;rsquo; before 2 and a &amp;lsquo;-&amp;rsquo; before 1 and concatenate them to build the expression &amp;ldquo;+2-1&amp;rdquo;. Return the number of different expressions that you can build, which evaluates to target.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>You are given an integer array nums and an integer target.</p>
<p>You want to build an expression out of nums by adding one of the symbols &lsquo;+&rsquo; and &lsquo;-&rsquo; before each integer in nums and then concatenate all the integers.</p>
<p>For example, if nums = [2, 1], you can add a &lsquo;+&rsquo; before 2 and a &lsquo;-&rsquo; before 1 and concatenate them to build the expression &ldquo;+2-1&rdquo;.
Return the number of different expressions that you can build, which evaluates to target.</p>
<!-- raw HTML omitted -->
<pre><code>
Input: nums = [1,1,1,1,1], target = 3
Output: 5
Explanation: There are 5 ways to assign symbols to make the sum of nums be target 3.
-1 + 1 + 1 + 1 + 1 = 3
+1 - 1 + 1 + 1 + 1 = 3
+1 + 1 - 1 + 1 + 1 = 3
+1 + 1 + 1 - 1 + 1 = 3
+1 + 1 + 1 + 1 - 1 = 3

</code></pre><!-- raw HTML omitted -->
<pre><code>
Input: nums = [1], target = 1
Output: 1

</code></pre><!-- raw HTML omitted -->
<ul>
<li>Soruda bize bir sayı listesi ve bu sayıların pozitif ve negatif değerlerinin farklı kombinasyonları ile bulunması istenen target değeri veriliyor.</li>
<li>Bu sorunun birden fazla çözüm yöntemi var.</li>
<li>Backtracking ile çözmek istersek yapmamız gereken bir helper fonksiyonu oluşturmak ve bu fonksiyonu pozitif ve negatif sayıları çağıracak şekilde tekrar tekrar çağırmak.</li>
<li>Örneğin [1,1,1,1,1] listesinden 3 elde edilmek isteniyor.</li>
<li>Birinci değer [+1] yada [-1] alabilir.Bunu ağaçtaki ilk adım olarak düşünebiliriz. Daha sonra bir alt dala inersek  [+1,+1],[+1,-1],[-1,+1],[-1,-1] elde ederiz.</li>
<li>Bu şekilde ağacın 32 farklı kombinasyonlu sonucu bulunur.Bunlar arasında toplamı 3 &lsquo;e eşit olanları da kontrol ederek bulabiliriz.</li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python">    <span class="k">def</span> <span class="nf">findTargetSumWays</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">nums</span><span class="p">,</span> <span class="n">S</span><span class="p">):</span>
        <span class="s2">&#34;&#34;&#34;
</span><span class="s2">        :type nums: List[int]
</span><span class="s2">        :type S: int
</span><span class="s2">        :rtype: int
</span><span class="s2">        &#34;&#34;&#34;</span>
        <span class="k">def</span> <span class="nf">helper</span><span class="p">(</span><span class="n">index</span><span class="p">,</span> <span class="n">acc</span><span class="p">):</span>
            <span class="k">if</span> <span class="n">index</span> <span class="o">==</span> <span class="nb">len</span><span class="p">(</span><span class="n">nums</span><span class="p">):</span>
                <span class="k">if</span> <span class="n">acc</span> <span class="o">==</span> <span class="n">S</span><span class="p">:</span>
                    <span class="k">return</span> <span class="mi">1</span>
                <span class="k">else</span><span class="p">:</span>
                    <span class="k">return</span> <span class="mi">0</span>
            <span class="k">return</span> <span class="n">helper</span><span class="p">(</span><span class="n">index</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="n">acc</span> <span class="o">+</span> <span class="n">nums</span><span class="p">[</span><span class="n">index</span><span class="p">])</span> <span class="o">+</span> <span class="n">helper</span><span class="p">(</span><span class="n">index</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="n">acc</span> <span class="o">-</span> <span class="n">nums</span><span class="p">[</span><span class="n">index</span><span class="p">])</span>
        <span class="k">return</span> <span class="n">helper</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>

</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 22 Generate Parentheses</title>
			<link>https://www.dincerbakkal.com/posts/leetcode022/</link>
			<pubDate>Sat, 17 Apr 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode022/</guid>
			<description>Soru Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses.
Örnek 1 Input: n = 3 Output: [&amp;quot;((()))&amp;quot;,&amp;quot;(()())&amp;quot;,&amp;quot;(())()&amp;quot;,&amp;quot;()(())&amp;quot;,&amp;quot;()()()&amp;quot;] Örnek 2 Input: n = 1 Output: [&amp;quot;()&amp;quot;] Çözüm  n çift parantez kullanarak oluşturulabilecek tüm geçerli parantez kombinasyonlarını üretmenizi isteyen bir problem. Burada geçerli bir kombinasyon, her açılan parantezin bir kapanış parantezi ile eşleşmesi ve herhangi bir zamanda açık parantez sayısının kapanan parantez sayısını geçmemesi gerektiğini ifade eder.</description>
			<content type="html"><![CDATA[<h3 id="soru">Soru</h3>
<p>Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses.</p>
<h3 id="örnek-1">Örnek 1</h3>
<pre><code>Input: n = 3
Output: [&quot;((()))&quot;,&quot;(()())&quot;,&quot;(())()&quot;,&quot;()(())&quot;,&quot;()()()&quot;]
</code></pre><h3 id="örnek-2">Örnek 2</h3>
<pre><code>Input: n = 1
Output: [&quot;()&quot;]
</code></pre><h3 id="çözüm">Çözüm</h3>
<ul>
<li>n çift parantez kullanarak oluşturulabilecek tüm geçerli parantez kombinasyonlarını üretmenizi isteyen bir problem. Burada geçerli bir kombinasyon, her açılan parantezin bir kapanış parantezi ile eşleşmesi ve herhangi bir zamanda açık parantez sayısının kapanan parantez sayısını geçmemesi gerektiğini ifade eder.</li>
<li>Girdi: Bir tam sayı n, kaç çift parantez kullanılacağını belirtir.</li>
<li>Çıktı: Tüm geçerli parantez kombinasyonlarını içeren bir string listesi.</li>
<li>Bu problem genellikle derinlik öncelikli arama (DFS) veya geriye dönük arama (backtracking) yöntemiyle çözülür. Rekürsif bir fonksiyon, şu anda oluşturulmuş parantez dizisine dayanarak, adım adım tüm geçerli kombinasyonları oluşturur.</li>
<li>Çalışma Mekanizması:</li>
<li>Rekürsif Backtracking Fonksiyonu: backtrack adında bir iç fonksiyon tanımlanır. Bu fonksiyon, şu ana kadar oluşturulan string s ve açık (left) ile kapalı (right) parantez sayılarını parametre olarak alır.</li>
<li>Son Durum Kontrolü: Eğer s&rsquo;nin uzunluğu 2*n&rsquo;ye eşitse, bu string sonuç listesine eklenir.</li>
<li>Açık Parantez Ekleme: Eğer açık parantez sayısı n&rsquo;den azsa, bir açık parantez eklenir ve backtrack tekrar çağrılır.</li>
<li>Kapanış Parantez Ekleme: Eğer kapalı parantez sayısı açık parantez sayısından azsa, bir kapalı parantez eklenir ve backtrack tekrar çağrılır.</li>
<li>Sonuç: Tüm rekürsif çağrılar tamamlandığında, result listesi döndürülür.</li>
</ul>
<h2 id="code">Code</h2>
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python">    <span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">generateParenthesis</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">n</span><span class="p">):</span>
        <span class="k">def</span> <span class="nf">backtrack</span><span class="p">(</span><span class="n">s</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">,</span> <span class="n">left</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">right</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
            <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">s</span><span class="p">)</span> <span class="o">==</span> <span class="mi">2</span> <span class="o">*</span> <span class="n">n</span><span class="p">:</span>
                <span class="c1"># String uzunluğu maksimuma ulaştıysa sonuç listesine ekle</span>
                <span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">s</span><span class="p">)</span>
                <span class="k">return</span>
            <span class="k">if</span> <span class="n">left</span> <span class="o">&lt;</span> <span class="n">n</span><span class="p">:</span>
                <span class="c1"># Daha fazla açık parantez eklenebilir</span>
                <span class="n">backtrack</span><span class="p">(</span><span class="n">s</span> <span class="o">+</span> <span class="s1">&#39;(&#39;</span><span class="p">,</span> <span class="n">left</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="n">right</span><span class="p">)</span>
            <span class="k">if</span> <span class="n">right</span> <span class="o">&lt;</span> <span class="n">left</span><span class="p">:</span>
                <span class="c1"># Geçerli diziye daha fazla kapanış parantezi eklenmesi mümkün</span>
                <span class="n">backtrack</span><span class="p">(</span><span class="n">s</span> <span class="o">+</span> <span class="s1">&#39;)&#39;</span><span class="p">,</span> <span class="n">left</span><span class="p">,</span> <span class="n">right</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span>

        <span class="n">result</span> <span class="o">=</span> <span class="p">[]</span>
        <span class="n">backtrack</span><span class="p">()</span>
        <span class="k">return</span> <span class="n">result</span>

</code></pre></div><h3 id="complexity">Complexity</h3>
<ul>
<li>Time complexity (Zaman Karmaşıklığı) : O(4^n / √n), Catalan sayısına dayalı bir büyüme oranı gösterir, bu nedenle oldukça hızlı büyür ancak pratikte genellikle yönetilebilir.</li>
<li>Space complexity (Alan Karmaşıklığı) : O(n), rekürsif çağrı yığını için kullanılan alan, maksimum rekürsif derinlikle orantılıdır.</li>
</ul>
]]></content>
		</item>
		
		<item>
			<title>Leetcode 739 Daily Temperatures</title>
			<link>https://www.dincerbakkal.com/posts/leetcode739/</link>
			<pubDate>Sat, 17 Apr 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode739/</guid>
			<description>Soru Given an array of integers temperatures represents the daily temperatures, return an array answer such that answer[i] is the number of days you have to wait after the ith day to get a warmer temperature. If there is no future day for which this is possible, keep answer[i] == 0 instead.
Örnek 1 Input: temperatures = [73,74,75,71,69,72,76,73] Output: [1,1,4,2,1,1,0,0] Örnek 2 Input: temperatures = [30,40,50,60] Output: [1,1,1,0] Örnek 3 Input: temperatures = [30,60,90] Output: [1,1,0] Çözüm  Hava sıcaklıklarının bir listesi verildiğinde, her gün için daha sıcak bir sıcaklık görülene kadar kaç gün beklemeniz gerektiğini hesaplamanızı ister.</description>
			<content type="html"><![CDATA[<h3 id="soru">Soru</h3>
<p>Given an array of integers temperatures represents the daily temperatures, return an array answer such that answer[i] is the number of days you have to wait after the ith day to get a warmer temperature. If there is no future day for which this is possible, keep answer[i] == 0 instead.</p>
<h3 id="örnek-1">Örnek 1</h3>
<pre><code>Input: temperatures = [73,74,75,71,69,72,76,73]
Output: [1,1,4,2,1,1,0,0]
</code></pre><h3 id="örnek-2">Örnek 2</h3>
<pre><code>Input: temperatures = [30,40,50,60]
Output: [1,1,1,0]
</code></pre><h3 id="örnek-3">Örnek 3</h3>
<pre><code>Input: temperatures = [30,60,90]
Output: [1,1,0]
</code></pre><h3 id="çözüm">Çözüm</h3>
<ul>
<li>Hava sıcaklıklarının bir listesi verildiğinde, her gün için daha sıcak bir sıcaklık görülene kadar kaç gün beklemeniz gerektiğini hesaplamanızı ister. Eğer bir gün için daha sıcak bir gün yoksa, sonuç 0 olmalıdır.</li>
<li>Girdi: Günlük sıcaklıkları içeren bir tam sayı dizisi T.</li>
<li>Çıktı: Her gün için daha sıcak bir gün görülene kadar geçecek gün sayısını içeren bir tam sayı dizisi.</li>
<li>Bu problem genellikle bir yığın (stack) kullanılarak çözülür. Yığın, daha sıcak bir gün bulunana kadar bekleyen günlerin indekslerini saklar. Her gün için, yığında saklanan önceki günlerle karşılaştırılır ve eğer mevcut günün sıcaklığı daha yüksekse, yığındaki günler için daha sıcak bir gün bulunmuş olur ve bu günler yığından çıkarılır.</li>
<li>Çalışma Mekanizması:</li>
<li>Sonuç Dizisi ve Yığın İnitialize Edilmesi: Sonuç dizisi sıfırlarla başlatılır. Yığın, bekleyen günlerin indekslerini saklamak için kullanılır.</li>
<li>Döngü ile İşlem: Her gün için, yığının en üstündeki gün ile mevcut günün sıcaklığı karşılaştırılır.</li>
<li>Yığın Kontrolü ve Güncelleme: Eğer mevcut gün sıcaklığı, yığının en üstündeki günden yüksekse, bu gün için daha sıcak bir gün bulunmuş olur. Yığın güncellenir ve sonuç dizisine kaç gün beklediği yazılır.</li>
<li>Mevcut Günün Ekleme: Her günün indeksi, daha sıcak bir gün bulunana kadar yığına eklenir.</li>
<li>Sonuç Dönüşü: Tüm günler için işlem tamamlandığında, sonuç dizisi döndürülür.</li>
</ul>
<h2 id="code">Code</h2>
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python">   <span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">dailyTemperatures</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">T</span><span class="p">):</span>
        <span class="n">result</span> <span class="o">=</span> <span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">*</span> <span class="nb">len</span><span class="p">(</span><span class="n">T</span><span class="p">)</span>  <span class="c1"># Sonuç dizisini sıfırlarla başlat</span>
        <span class="n">stack</span> <span class="o">=</span> <span class="p">[]</span>  <span class="c1"># İndeksleri saklamak için yığın kullan</span>

        <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">T</span><span class="p">)):</span>
            <span class="c1"># Mevcut sıcaklık, yığında bekleyen günlerin sıcaklığından yüksekse</span>
            <span class="k">while</span> <span class="n">stack</span> <span class="ow">and</span> <span class="n">T</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">&gt;</span> <span class="n">T</span><span class="p">[</span><span class="n">stack</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]]:</span>
                <span class="n">index</span> <span class="o">=</span> <span class="n">stack</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>  <span class="c1"># Daha sıcak bir gün bulunan günün indeksini al</span>
                <span class="n">result</span><span class="p">[</span><span class="n">index</span><span class="p">]</span> <span class="o">=</span> <span class="n">i</span> <span class="o">-</span> <span class="n">index</span>  <span class="c1"># Kaç gün beklediğini hesapla ve sonuca yaz</span>
            <span class="n">stack</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">i</span><span class="p">)</span>  <span class="c1"># Mevcut günün indeksini yığına ekle</span>

        <span class="k">return</span> <span class="n">result</span>

</code></pre></div><h3 id="complexity">Complexity</h3>
<ul>
<li>Time complexity (Zaman Karmaşıklığı) : O(n), burada n sıcaklık dizisinin uzunluğudur. Her eleman için yığın işlemi en fazla bir kez gerçekleşir.</li>
<li>Space complexity (Alan Karmaşıklığı) : O(n), en kötü durumda tüm günler yığına eklenir.</li>
</ul>
]]></content>
		</item>
		
		<item>
			<title>Leetcode 853 Car Fleet</title>
			<link>https://www.dincerbakkal.com/posts/leetcode853/</link>
			<pubDate>Sat, 17 Apr 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode853/</guid>
			<description>Soru There are n cars at given miles away from the starting mile 0, traveling to reach the mile target.
You are given two integer array position and speed, both of length n, where position[i] is the starting mile of the ith car and speed[i] is the speed of the ith car in miles per hour.
A car cannot pass another car, but it can catch up and then travel next to it at the speed of the slower car.</description>
			<content type="html"><![CDATA[<h3 id="soru">Soru</h3>
<p>There are n cars at given miles away from the starting mile 0, traveling to reach the mile target.</p>
<p>You are given two integer array position and speed, both of length n, where position[i] is the starting mile of the ith car and speed[i] is the speed of the ith car in miles per hour.</p>
<p>A car cannot pass another car, but it can catch up and then travel next to it at the speed of the slower car.</p>
<p>A car fleet is a car or cars driving next to each other. The speed of the car fleet is the minimum speed of any car in the fleet.</p>
<p>If a car catches up to a car fleet at the mile target, it will still be considered as part of the car fleet.</p>
<p>Return the number of car fleets that will arrive at the destination.</p>
<h3 id="örnek-1">Örnek 1</h3>
<pre><code>Input: target = 12, position = [10,8,0,5,3], speed = [2,4,1,1,3]

Output: 3

Explanation:

The cars starting at 10 (speed 2) and 8 (speed 4) become a fleet, meeting each other at 12. The fleet forms at target.
The car starting at 0 (speed 1) does not catch up to any other car, so it is a fleet by itself.
The cars starting at 5 (speed 1) and 3 (speed 3) become a fleet, meeting each other at 6. The fleet moves at speed 1 until it reaches target.
</code></pre><h3 id="örnek-2">Örnek 2</h3>
<pre><code>Input: target = 10, position = [3], speed = [3]

Output: 1

Explanation:

There is only one car, hence there is only one fleet.
</code></pre><h3 id="örnek-3">Örnek 3</h3>
<pre><code>Input: target = 100, position = [0,2,4], speed = [4,2,1]

Output: 1

Explanation:

The cars starting at 0 (speed 4) and 2 (speed 2) become a fleet, meeting each other at 4. The car starting at 4 (speed 1) travels to 5.
Then, the fleet at 4 (speed 2) and the car at position 5 (speed 1) become one fleet, meeting each other at 6. The fleet moves at speed 1 until it reaches target.
</code></pre><h3 id="çözüm">Çözüm</h3>
<ul>
<li>Bir hedefe doğru ilerleyen bir dizi arabanın ne kadarlık bir filo oluşturabileceğini hesaplamanızı isteyen bir problem. Arabalar farklı hızlarda hareket ediyor ve eğer bir araba daha yavaş bir arabayı yakalarsa, bu iki araba birlikte hareket eder ve bir filo oluştururlar. Sorun, her bir arabanın başlangıç pozisyonunu, hızını ve hedefe olan mesafeyi içerir ve sizden arabaların hedefe varmadan önce kaç farklı filo oluşturacağını hesaplamanızı ister.</li>
<li>Girdi:
target: Hedefin pozisyonu.
position: Arabaların başlangıç pozisyonlarını içeren bir tam sayı dizisi.
speed: Arabaların hızlarını içeren bir tam sayı dizisi.</li>
<li>Çıktı: Hedefe varmadan önce oluşan toplam filo sayısı.</li>
<li>Bu problem, arabaları başlangıç pozisyonlarına göre sıralayarak ve her bir arabanın hedefe ulaşma süresini hesaplayarak çözülebilir. Arabaları geriden ileriye doğru incelerken, eğer bir araba önceki arabayı yakalayacak kadar hızlı değilse, bu durumda yeni bir filo oluşur.</li>
<li>Çalışma Mekanizması:</li>
<li>Arabaları Sırala: Arabaları pozisyonlarına göre sırala, böylece en arkadakinden başlayarak ileriye doğru işlem yapabilirsin.</li>
<li>Ulaşma Sürelerini Hesapla: Her bir araba için hedefe ulaşma süresini hesapla.</li>
<li>Filoları Say: En arkadaki arabadan başlayarak, eğer bir araba öncekine yetişemiyorsa (yani süresi daha uzunsa) yeni bir filo sayılır ve bu arabanın süresi esas alınır.</li>
<li>Sonuç Dönüşü: Filo sayısını döndür.</li>
<li>Bu çözüm, verilen hedefe doğru ilerlerken arabaların oluşturduğu filo sayısını verimli ve etkili bir şekilde hesaplar. Her bir arabanın diğerlerine göre ne zaman bağımsız hareket etmeye başlayacağını süre hesaplamaları ile belirler.</li>
</ul>
<h2 id="code">Code</h2>
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python">   <span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">carFleet</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">target</span><span class="p">,</span> <span class="n">position</span><span class="p">,</span> <span class="n">speed</span><span class="p">):</span>
        <span class="c1"># Pozisyon ve hızları birlikte ele almak için tuple listesi oluştur</span>
        <span class="n">cars</span> <span class="o">=</span> <span class="nb">sorted</span><span class="p">(</span><span class="nb">zip</span><span class="p">(</span><span class="n">position</span><span class="p">,</span> <span class="n">speed</span><span class="p">))</span>
        
        <span class="c1"># Her arabanın hedefe ulaşma süresini hesapla ve bir listeye kaydet</span>
        <span class="n">times</span> <span class="o">=</span> <span class="p">[(</span><span class="n">target</span> <span class="o">-</span> <span class="n">p</span><span class="p">)</span> <span class="o">/</span> <span class="n">s</span> <span class="k">for</span> <span class="n">p</span><span class="p">,</span> <span class="n">s</span> <span class="ow">in</span> <span class="n">cars</span><span class="p">]</span>
        
        <span class="n">fleets</span> <span class="o">=</span> <span class="mi">0</span>
        <span class="k">while</span> <span class="n">times</span><span class="p">:</span>
            <span class="n">lead_time</span> <span class="o">=</span> <span class="n">times</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>  <span class="c1"># En arkadaki arabanın süresini al</span>
            <span class="n">fleets</span> <span class="o">+=</span> <span class="mi">1</span>
            <span class="c1"># Sonraki arabaların süresi, bu süreden daha büyükse yeni filo</span>
            <span class="k">while</span> <span class="n">times</span> <span class="ow">and</span> <span class="n">times</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">&lt;=</span> <span class="n">lead_time</span><span class="p">:</span>
                <span class="n">times</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
        
        <span class="k">return</span> <span class="n">fleets</span>


</code></pre></div><h3 id="complexity">Complexity</h3>
<ul>
<li>Time complexity (Zaman Karmaşıklığı) : O(n log n), burada n araba sayısıdır. Arabaları sıralamak için n log n zaman gerekir ve sonrasında n kadar süre hesaplaması ve karşılaştırması yapılır.</li>
<li>Space complexity (Alan Karmaşıklığı) : O(n), arabaların ve sürelerinin saklanması için gereken alan.</li>
</ul>
]]></content>
		</item>
		
		<item>
			<title>Leetcode 216 Combination Sum III</title>
			<link>https://www.dincerbakkal.com/posts/leetcode216/</link>
			<pubDate>Fri, 16 Apr 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode216/</guid>
			<description>Find all valid combinations of k numbers that sum up to n such that the following conditions are true:
Only numbers 1 through 9 are used. Each number is used at most once. Return a list of all possible valid combinations. The list must not contain the same combination twice, and the combinations may be returned in any order.
Input: k = 3, n = 7 Output: [[1,2,4]] Explanation: 1 + 2 + 4 = 7 There are no other valid combinations.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>Find all valid combinations of k numbers that sum up to n such that the following conditions are true:</p>
<p>Only numbers 1 through 9 are used.
Each number is used at most once.
Return a list of all possible valid combinations. The list must not contain the same combination twice, and the combinations may be returned in any order.</p>
<!-- raw HTML omitted -->
<pre><code>Input: k = 3, n = 7
Output: [[1,2,4]]
Explanation:
1 + 2 + 4 = 7
There are no other valid combinations.
</code></pre><!-- raw HTML omitted -->
<pre><code>Input: k = 3, n = 9
Output: [[1,2,6],[1,3,5],[2,3,4]]
Explanation:
1 + 2 + 6 = 9
1 + 3 + 5 = 9
2 + 3 + 4 = 9
There are no other valid combinations.
</code></pre><!-- raw HTML omitted -->
<pre><code>Input: k = 4, n = 1
Output: []
Explanation: There are no valid combinations. [1,2,1] is not valid because 1 is used twice.

</code></pre><!-- raw HTML omitted -->
<pre><code>Input: k = 3, n = 2
Output: []
Explanation: There are no valid combinations.
</code></pre><!-- raw HTML omitted -->
<pre><code>Input: k = 9, n = 45
Output: [[1,2,3,4,5,6,7,8,9]]
Explanation:
1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 = 45
​​​​​​​There are no other valid combinations.
</code></pre><!-- raw HTML omitted -->
<ul>
<li>Soruda bize k ve n sayıları veriliyor.1-9 arası rakamların kombinasyonlarını kullanarak n sayısını bulmamız isteniyor.k kombinasyonda kaç rakam kullanabiliriz n sayısı ise bu rakamların toplamı olan sayı.Ve 1-9 arası rakamları sadece bir kere kullanabiliriz.</li>
<li>n = 3 k = 7 olsun bu durumda cevap sadece (1,2,4) olur.Sadece bu kombinasyonun sonucu 7 sayısını verir.</li>
<li>Oluşturacağımız backtrack fonksiyonunu rekürsif olarak çağırarak kombinasyonları arayabiliriz.</li>
<li>İlk olarak (1) buluruz sonrasında (1,2),(1,3),(1,4)&hellip; (1,9) alt çağrılarını yaparız.Devamında bu kollarda (1,2,3),(1,2,4),(1,2,5) şeklinde devam eder.</li>
</ul>
<figure><img src="/image/216.jpg"
         alt="image"/>
</figure>

<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python">    <span class="k">def</span> <span class="nf">combinationSum3</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">k</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span> <span class="n">n</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">List</span><span class="p">[</span><span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">]]:</span>
        <span class="n">results</span> <span class="o">=</span> <span class="p">[]</span>
        <span class="k">def</span> <span class="nf">backtrack</span><span class="p">(</span><span class="n">remain</span><span class="p">,</span> <span class="n">comb</span><span class="p">,</span> <span class="n">next_start</span><span class="p">):</span>
            <span class="k">if</span> <span class="n">remain</span> <span class="o">==</span> <span class="mi">0</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">comb</span><span class="p">)</span> <span class="o">==</span> <span class="n">k</span><span class="p">:</span>
                <span class="c1"># make a copy of current combination</span>
                <span class="c1"># Otherwise the combination would be reverted in other branch of backtracking.</span>
                <span class="n">results</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="n">comb</span><span class="p">))</span>
                <span class="k">return</span>
            <span class="k">elif</span> <span class="n">remain</span> <span class="o">&lt;</span> <span class="mi">0</span> <span class="ow">or</span> <span class="nb">len</span><span class="p">(</span><span class="n">comb</span><span class="p">)</span> <span class="o">==</span> <span class="n">k</span><span class="p">:</span>
                <span class="c1"># exceed the scope, no need to explore further.</span>
                <span class="k">return</span>

            <span class="c1"># Iterate through the reduced list of candidates.</span>
            <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">next_start</span><span class="p">,</span> <span class="mi">9</span><span class="p">):</span>
                <span class="n">comb</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span>
                <span class="n">backtrack</span><span class="p">(</span><span class="n">remain</span><span class="o">-</span><span class="n">i</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="n">comb</span><span class="p">,</span> <span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span>
                <span class="c1"># backtrack the current choice</span>
                <span class="n">comb</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>

        <span class="n">backtrack</span><span class="p">(</span><span class="n">n</span><span class="p">,</span> <span class="p">[],</span> <span class="mi">0</span><span class="p">)</span>

        <span class="k">return</span> <span class="n">results</span>

</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 40 Combination Sum II</title>
			<link>https://www.dincerbakkal.com/posts/leetcode040/</link>
			<pubDate>Thu, 15 Apr 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode040/</guid>
			<description>Given a collection of candidate numbers (candidates) and a target number (target), find all unique combinations in candidates where the candidate numbers sum to target.
Each number in candidates may only be used once in the combination.
Note: The solution set must not contain duplicate combinations.
Input: candidates = [10,1,2,7,6,1,5], target = 8 Output: [ [1,1,6], [1,2,5], [1,7], [2,6] ] Input: candidates = [2,5,2,1,2], target = 5 Output: [ [1,2,2], [5] ]  Soruda bize candidates listesi içinde sayılar ve bir target sayı veriliyor.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>Given a collection of candidate numbers (candidates) and a target number (target), find all unique combinations in candidates where the candidate numbers sum to target.</p>
<p>Each number in candidates may only be used once in the combination.</p>
<p>Note: The solution set must not contain duplicate combinations.</p>
<!-- raw HTML omitted -->
<pre><code>Input: candidates = [10,1,2,7,6,1,5], target = 8
Output: 
[
[1,1,6],
[1,2,5],
[1,7],
[2,6]
]
</code></pre><!-- raw HTML omitted -->
<pre><code>Input: candidates = [2,5,2,1,2], target = 5
Output: 
[
[1,2,2],
[5]
]
</code></pre><!-- raw HTML omitted -->
<ul>
<li>Soruda bize candidates listesi içinde sayılar ve bir target sayı veriliyor.Bu liste içindeki sayıları toplayarak target bulmamız isteniyor.</li>
<li>Daha önce çözülen 39. probleme benzer şekilde çözülebilir.Burada dikkat edilmesi gereken bize verilen listede aynı sayıdan birden fazla olabilir ve bulduğumuz kombinasyonlar benzersiz olmalı.</li>
<li>Örneğin listede 2 tane 1 var [1,2,3,1] bizden 4 isteniyor.[1,3] ve [3,1] sonuç listemizde olamaz sadece biri olabilir.</li>
<li>İlk olarak listeyi küçükten büyüğe sıralarız bu şekilde eşit sayılar yanyana gelmiş olur.</li>
<li>Sonrasında prev diye bir değişken oluşturup indexteki sayının bir önceki sayıyı burada tutarız.Bu sayede elimizdeki sayı ile önceki sayıyı karşılaştırırız aynı ise atlarız.</li>
<li>Tabi burada başka bir pratik çözüm listeyi sıraldıktan sonra set bir listeye atmak.Set listelerde aynı değerden tutulmadığı için işimizi kolaylaştırır.</li>
<li>Devamında arama için oluşturduğumuz backtrack fonksiyonunu rekürsif olarak çağrırız.</li>
<li>Her çağrıda kontrollerimizi yaparız.</li>
<li>Bir önceki örnekten farklı olarak kombinasyona eklediğimiz sayıları targettan çıkararak targetı sıfırlamaya çalışırız.</li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python">    <span class="k">def</span> <span class="nf">combinationSum2</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">candidates</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">],</span> <span class="n">target</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">List</span><span class="p">[</span><span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">]]:</span>
        <span class="n">candidates</span><span class="o">.</span><span class="n">sort</span><span class="p">()</span>
        
        <span class="n">res</span> <span class="o">=</span> <span class="p">[]</span>
        
        <span class="k">def</span> <span class="nf">backtrack</span><span class="p">(</span><span class="n">cur</span><span class="p">,</span><span class="n">pos</span><span class="p">,</span><span class="n">target</span><span class="p">):</span>
            <span class="k">if</span> <span class="n">target</span><span class="o">==</span><span class="mi">0</span><span class="p">:</span>
                <span class="n">res</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">cur</span><span class="o">.</span><span class="n">copy</span><span class="p">())</span>
            <span class="k">if</span> <span class="n">target</span> <span class="o">&lt;=</span> <span class="mi">0</span><span class="p">:</span>
                <span class="k">return</span>
            
            <span class="n">prev</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span>
            
            <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">pos</span><span class="p">,</span><span class="nb">len</span><span class="p">(</span><span class="n">candidates</span><span class="p">)):</span>
                <span class="k">if</span> <span class="n">candidates</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">==</span> <span class="n">prev</span><span class="p">:</span>
                    <span class="k">continue</span>
                
                <span class="n">cur</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">candidates</span><span class="p">[</span><span class="n">i</span><span class="p">])</span>
                <span class="n">backtrack</span><span class="p">(</span><span class="n">cur</span><span class="p">,</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">,</span><span class="n">target</span> <span class="o">-</span> <span class="n">candidates</span><span class="p">[</span><span class="n">i</span><span class="p">])</span>
                <span class="n">cur</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
                <span class="n">prev</span> <span class="o">=</span> <span class="n">candidates</span><span class="p">[</span><span class="n">i</span><span class="p">]</span>
        
        <span class="n">backtrack</span><span class="p">([],</span> <span class="mi">0</span><span class="p">,</span> <span class="n">target</span><span class="p">)</span>
        <span class="k">return</span> <span class="n">res</span>

</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 39 Combination Sum</title>
			<link>https://www.dincerbakkal.com/posts/leetcode039/</link>
			<pubDate>Wed, 14 Apr 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode039/</guid>
			<description>Given an array of distinct integers candidates and a target integer target, return a list of all unique combinations of candidates where the chosen numbers sum to target. You may return the combinations in any order.
The same number may be chosen from candidates an unlimited number of times. Two combinations are unique if the frequency of at least one of the chosen numbers is different.
It is guaranteed that the number of unique combinations that sum up to target is less than 150 combinations for the given input.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>Given an array of distinct integers candidates and a target integer target, return a list of all unique combinations of candidates where the chosen numbers sum to target. You may return the combinations in any order.</p>
<p>The same number may be chosen from candidates an unlimited number of times. Two combinations are unique if the frequency of at least one of the chosen numbers is different.</p>
<p>It is guaranteed that the number of unique combinations that sum up to target is less than 150 combinations for the given input.</p>
<!-- raw HTML omitted -->
<pre><code>Input: candidates = [2,3,6,7], target = 7
Output: [[2,2,3],[7]]
Explanation:
2 and 3 are candidates, and 2 + 2 + 3 = 7. Note that 2 can be used multiple times.
7 is a candidate, and 7 = 7.
These are the only two combinations.
</code></pre><!-- raw HTML omitted -->
<pre><code>Input: candidates = [2,3,5], target = 8
Output: [[2,2,2,2],[2,3,3],[3,5]]
</code></pre><!-- raw HTML omitted -->
<pre><code>Input: candidates = [2], target = 1
Output: []
</code></pre><!-- raw HTML omitted -->
<pre><code>Input: candidates = [1], target = 1
Output: [[1]]
</code></pre><!-- raw HTML omitted -->
<pre><code>Input: candidates = [1], target = 2
Output: [[1,1]]
</code></pre><!-- raw HTML omitted -->
<figure><img src="/image/039.jpg"
         alt="image"/>
</figure>

<ul>
<li>Soruda bize candidates listesi içinde sayılar ve bir target sayı veriliyor.Bu liste içindeki sayıları toplayarak target bulmamız isteniyor.</li>
<li>Yukarıdaki resimde algoritma mantığı görülebilir.</li>
<li>Elimizde [2,3,6,7] şeklinde bir liste ve bizden 7 toplamını bulmamız istensin.Rekursif olarak çağıracağımız fonksiyon ile istenen kombinasyonları arayalım.</li>
<li>Resimde görüleceği gibi fonksiyon ilk çağrıldığında  [2] içeren ve 2 içermeyen [] iki liste oluşur.</li>
<li>[2] olan liste için fonksiyon tekrar çağrıldığında [2,2] ve [2] şeklinde bir alt dal oluşur.</li>
<li>Buradaki amaç aynı listelerin oluşmaması için kullanılan sayının tekrar aynı şekilde kullanılmamasıdır.</li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python">    <span class="k">def</span> <span class="nf">combinationSum</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">candidates</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">],</span> <span class="n">target</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">List</span><span class="p">[</span><span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">]]:</span>
        <span class="n">res</span> <span class="o">=</span> <span class="p">[]</span>
        
        <span class="k">def</span> <span class="nf">dfs</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="n">cur</span><span class="p">,</span> <span class="n">total</span><span class="p">):</span>
            <span class="k">if</span> <span class="n">total</span> <span class="o">==</span> <span class="n">target</span><span class="p">:</span> <span class="c1">#liste toplamı target eşit ise listeyi res at ve return</span>
                <span class="n">res</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">cur</span><span class="o">.</span><span class="n">copy</span><span class="p">())</span>
                <span class="k">return</span>
            <span class="k">if</span> <span class="n">i</span><span class="o">&gt;=</span> <span class="nb">len</span><span class="p">(</span><span class="n">candidates</span><span class="p">)</span> <span class="ow">or</span> <span class="n">total</span> <span class="o">&gt;</span> <span class="n">target</span><span class="p">:</span> <span class="c1"># elindeki sayılar biterse yada toplam targettan </span>
                <span class="k">return</span>                                <span class="c1">#büyük olursa return</span>
            
            <span class="n">cur</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">candidates</span><span class="p">[</span><span class="n">i</span><span class="p">])</span> <span class="c1">#index sayıyı listeye ekle-toplama ekle ve dfs aynı index ile çağır</span>
            <span class="n">dfs</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="n">cur</span><span class="p">,</span> <span class="n">total</span> <span class="o">+</span> <span class="n">candidates</span><span class="p">[</span><span class="n">i</span><span class="p">])</span>  
            <span class="n">cur</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>                 <span class="c1">#index sayıyı listeden çıkar ve dfs indexi 1 arttırarak çağır</span>
            <span class="n">dfs</span><span class="p">(</span><span class="n">i</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="n">cur</span><span class="p">,</span> <span class="n">total</span><span class="p">)</span>    
        
        <span class="n">dfs</span><span class="p">(</span><span class="mi">0</span><span class="p">,[],</span><span class="mi">0</span><span class="p">)</span>
        <span class="k">return</span> <span class="n">res</span>

</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 77 Combinations</title>
			<link>https://www.dincerbakkal.com/posts/leetcode077/</link>
			<pubDate>Tue, 13 Apr 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode077/</guid>
			<description>Given two integers n and k, return all possible combinations of k numbers out of the range [1, n].
You may return the answer in any order.
Input: n = 4, k = 2 Output: [ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4], ] Input: n = 1, k = 1 Output: [[1]]  Soruda bize n ve k değerleri veriliyor.Bizden istenen 1-n arasındaki sayıların k&amp;rsquo;li kombinasyonu. Bu soruda 90. sorudaki çözüm şeklini izleyebiliriz.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>Given two integers n and k, return all possible combinations of k numbers out of the range [1, n].</p>
<p>You may return the answer in any order.</p>
<!-- raw HTML omitted -->
<pre><code>Input: n = 4, k = 2
Output:
[
  [2,4],
  [3,4],
  [2,3],
  [1,2],
  [1,3],
  [1,4],
]
</code></pre><!-- raw HTML omitted -->
<pre><code>Input: n = 1, k = 1
Output: [[1]]
</code></pre><!-- raw HTML omitted -->
<ul>
<li>Soruda bize n ve k değerleri veriliyor.Bizden istenen 1-n arasındaki sayıların k&rsquo;li kombinasyonu.</li>
<li>Bu soruda 90. sorudaki çözüm şeklini izleyebiliriz.</li>
<li>Tek fark 90. soruda verilen listenin uzunluğu kadar bir kombinasyon ararken bu sefer k uzunluğunda bir kombinasyon arayacağız ve bulduğumuzda sonuç listesine ekleyeceğiz.</li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python">    <span class="k">def</span> <span class="nf">combine</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">n</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span> <span class="n">k</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">List</span><span class="p">[</span><span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">]]:</span>
        <span class="k">def</span> <span class="nf">helper</span><span class="p">(</span><span class="n">nums</span><span class="p">,</span> <span class="n">k</span><span class="p">,</span> <span class="n">results</span><span class="p">,</span> <span class="n">combination</span><span class="p">,</span> <span class="n">start</span><span class="p">):</span>
            <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">combination</span><span class="p">)</span> <span class="o">==</span> <span class="n">k</span><span class="p">:</span>
                <span class="n">results</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="n">combination</span><span class="p">))</span>
                <span class="k">return</span>
        
            <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">nums</span><span class="p">)):</span>
                <span class="n">num</span> <span class="o">=</span> <span class="n">nums</span><span class="p">[</span><span class="n">i</span><span class="p">]</span>
            
                <span class="n">combination</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">num</span><span class="p">)</span>
                <span class="n">helper</span><span class="p">(</span><span class="n">nums</span><span class="p">,</span> <span class="n">k</span><span class="p">,</span> <span class="n">results</span><span class="p">,</span> <span class="n">combination</span><span class="p">,</span> <span class="n">i</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span>
                <span class="n">combination</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
                
        <span class="n">results</span> <span class="o">=</span> <span class="p">[]</span>
        
        <span class="n">nums</span> <span class="o">=</span> <span class="p">[</span><span class="n">i</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="n">n</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)]</span>
        
        <span class="n">helper</span><span class="p">(</span><span class="n">nums</span><span class="p">,</span> <span class="n">k</span><span class="p">,</span> <span class="n">results</span><span class="p">,</span> <span class="p">[],</span> <span class="mi">0</span><span class="p">)</span>
                
        <span class="k">return</span> <span class="n">results</span>

</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 46 Permutations</title>
			<link>https://www.dincerbakkal.com/posts/leetcode046/</link>
			<pubDate>Mon, 12 Apr 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode046/</guid>
			<description>Given an array nums of distinct integers, return all the possible permutations. You can return the answer in any order.
Input: nums = [1,2,3] Output: [[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]] Input: nums = [0,1] Output: [[0,1],[1,0]] Input: nums = [1] Output: [[1]]  Soruda bize sayılardan oluşan bir liste veriliyor.Bu listedeki sayıların permutasyonlarını bulmamız isteniyor. Burada 90. sorudaki gibi bir yardımcı fonksiyon yazıp bu fonksiyonu tekrar tekrar çağırarak sonuçlara ulaşabiliriz. Helper fonksiyonu 5 parametre alıyor.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>Given an array nums of distinct integers, return all the possible permutations. You can return the answer in any order.</p>
<!-- raw HTML omitted -->
<pre><code>Input: nums = [1,2,3]
Output: [[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]
</code></pre><!-- raw HTML omitted -->
<pre><code>Input: nums = [0,1]
Output: [[0,1],[1,0]]
</code></pre><!-- raw HTML omitted -->
<pre><code>Input: nums = [1]
Output: [[1]]
</code></pre><!-- raw HTML omitted -->
<ul>
<li>Soruda bize sayılardan oluşan bir liste veriliyor.Bu listedeki sayıların permutasyonlarını bulmamız isteniyor.</li>
<li>Burada 90. sorudaki gibi bir yardımcı fonksiyon yazıp bu fonksiyonu tekrar tekrar çağırarak sonuçlara ulaşabiliriz.</li>
<li>Helper fonksiyonu 5 parametre alıyor.results-&gt; sonuç listemiz, nums-&gt;sorunun başında bize verilen sayı listesi, combination-&gt;listedeki sayılarla oluşturduğumuz kombinasyonlar, start-başlangıç indeksi, visited-&gt;daha önce kullandığımız sayıları tekrar kullanmamamız için sayıları tuttuğumuz liste.</li>
<li>Helper fonksiyonu içindeki ilk kontrolümüz eğer kombinasyon uzunluğu liste uzunluğuna ulaştı ise fonksiyonu return et.Bu şekilde elimizdeki sayılardan oluşan bir permütasyon bulduk.</li>
<li>Daha sonra elimizdeki listedeki sayıları 0. indeksten liste sonuna kadar tarayıp.İndeksteki sayıyı önce visited listesine sonrada kombinasyon listesine ekleriz ve helper fonksiyonunu tekrar çağırırız.</li>
<li>Helper fonksiyonu çağrıldıktan sonra ise indeksteki sayıyı hem visited listesinden hem de kombinasyondan çıkarırız.</li>
<li>Aşağıdaki örnekte ilk permutasyonun nasıl bulunduğuna bakalım.</li>
<li>ekle 0 1 {1} [1] -&gt; yapılan işlem-indeks-indeksteki sayı-ziyaret edilmiş sayılar-elimizdeki kombinasyon</li>
</ul>
<pre><code>ekle 0 1 {1} [1] İlk olarak 0. indeksteki 1 rakamı hem visited hem kombinasyona ekleniyor helper çağrılıyor.
devam 0 1 {1} [1] Visited kontrol et ve 1 eklendiği için devam et ekleme yapma helper çağırma.
ekle 1 2 {1, 2} [1, 2] 1. indeksteki 2 rakamı hem visited hem kombinasyona ekleniyor helper çağrılıyor.
devam 0 1 {1, 2} [1, 2] Visited kontrol et ve 1 eklendiği için devam et ekleme yapma helper çağırma.
devam 1 2 {1, 2} [1, 2] Visited kontrol et ve 2 eklendiği için devam et ekleme yapma helper çağırma.
ekle 2 3 {1, 2, 3} [1, 2, 3] 2. indeksteki 3 rakamı hem visited hem kombi. ekleniyor helper çağrılıyor.
buldu {1, 2, 3} [1, 2, 3] kombinasyon uzunluğu ve nums uzunluğu eşit bir permütasyon bulduk.
çıkar 2 3 {1, 2} [1, 2] 2. indeksteki 3 rakamı hem visited hem kombi. çıkar.
çıkar 1 2 {1} [1] 1. indeksteki 2 rakamı hem visited hem kombi. çıkar.
</code></pre><ul>
<li>Burada ilk helper çağrısındaki 1 visited eklendikten sonra çağrılan helper işleminde ki for döngüsünde bulunan indeks 1 artıyor.1 visited eklenmişti daha önce 2 eklendi ve çıkarıldı.Şimdi de 3 eklenecek ve çıkarılacak.</li>
</ul>
<pre><code>ekle 2 3 {1, 3} [1, 3] 
devam 0 1 {1, 3} [1, 3]
ekle 1 2 {1, 2, 3} [1, 3, 2]
buldu {1, 2, 3} [1, 3, 2]
çıkar 1 2 {1, 3} [1, 3]
devam 2 3 {1, 3} [1, 3]
çıkar 2 3 {1} [1]
çıkar 0 1 set() []
ekle 1 2 {2} [2]
ekle 0 1 {1, 2} [2, 1]
devam 0 1 {1, 2} [2, 1]
devam 1 2 {1, 2} [2, 1]
ekle 2 3 {3, 1, 2} [2, 1, 3]
buldu {3, 1, 2} [2, 1, 3]
çıkar 2 3 {1, 2} [2, 1]
çıkar 0 1 {2} [2]
devam 1 2 {2} [2]
ekle 2 3 {3, 2} [2, 3]
ekle 0 1 {1, 2, 3} [2, 3, 1]
buldu {1, 2, 3} [2, 3, 1]
çıkar 0 1 {2, 3} [2, 3]
devam 1 2 {2, 3} [2, 3]
devam 2 3 {2, 3} [2, 3]
çıkar 2 3 {2} [2]
çıkar 1 2 set() []
ekle 2 3 {3} [3]
ekle 0 1 {1, 3} [3, 1]
devam 0 1 {1, 3} [3, 1]
ekle 1 2 {1, 3, 2} [3, 1, 2]
buldu {1, 3, 2} [3, 1, 2]
çıkar 1 2 {1, 3} [3, 1]
devam 2 3 {1, 3} [3, 1]
çıkar 0 1 {3} [3]
ekle 1 2 {3, 2} [3, 2]
ekle 0 1 {1, 3, 2} [3, 2, 1]
buldu {1, 3, 2} [3, 2, 1]
çıkar 0 1 {3, 2} [3, 2]
devam 1 2 {3, 2} [3, 2]
devam 2 3 {3, 2} [3, 2]
çıkar 1 2 {3} [3]
devam 2 3 {3} [3]
çıkar 2 3 set() []
[[1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 1, 2], [3, 2, 1]]
</code></pre><!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python">    <span class="k">def</span> <span class="nf">permute</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">nums</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">List</span><span class="p">[</span><span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">]]:</span>
        
        <span class="k">def</span> <span class="nf">helper</span><span class="p">(</span><span class="n">results</span><span class="p">,</span> <span class="n">nums</span><span class="p">,</span> <span class="n">combination</span><span class="p">,</span> <span class="n">start</span><span class="p">,</span> <span class="n">visited</span><span class="p">):</span>
            <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">combination</span><span class="p">)</span> <span class="o">==</span> <span class="nb">len</span><span class="p">(</span><span class="n">nums</span><span class="p">):</span>
                <span class="n">results</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="n">combination</span><span class="p">))</span>
                <span class="k">return</span>
        
        
            <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">nums</span><span class="p">)):</span>
                <span class="k">if</span> <span class="n">nums</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="ow">in</span> <span class="n">visited</span><span class="p">:</span>
                    <span class="k">continue</span>
            
                <span class="n">visited</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">nums</span><span class="p">[</span><span class="n">i</span><span class="p">])</span>
                <span class="n">combination</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">nums</span><span class="p">[</span><span class="n">i</span><span class="p">])</span>
                <span class="n">helper</span><span class="p">(</span><span class="n">results</span><span class="p">,</span> <span class="n">nums</span><span class="p">,</span> <span class="n">combination</span><span class="p">,</span> <span class="n">i</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="n">visited</span><span class="p">)</span>
                <span class="n">combination</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>            
                <span class="n">visited</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">nums</span><span class="p">[</span><span class="n">i</span><span class="p">])</span>
                
        <span class="n">results</span> <span class="o">=</span> <span class="p">[]</span>
        
        <span class="n">visited</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
        <span class="n">helper</span><span class="p">(</span><span class="n">results</span><span class="p">,</span> <span class="n">nums</span><span class="p">,</span> <span class="p">[],</span> <span class="mi">0</span><span class="p">,</span> <span class="n">visited</span><span class="p">)</span>
        
        <span class="k">return</span> <span class="n">results</span>

</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 47 Permutations II</title>
			<link>https://www.dincerbakkal.com/posts/leetcode047/</link>
			<pubDate>Mon, 12 Apr 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode047/</guid>
			<description>Given a collection of numbers, nums, that might contain duplicates, return all possible unique permutations in any order.
Input: nums = [1,1,2] Output: [[1,1,2], [1,2,1], [2,1,1]] Input: nums = [1,2,3] Output: [[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]  Soruda 46. soruya benzer şekilde bize sayılardan oluşan bir liste veriliyor.Bu listedeki sayıların permutasyonlarını bulmamız isteniyor. Ama listede aynı sayılardan bulunabilir. Burada 46. sorudaki yolun aynısını izleyebiliriz ama tek bir farkla. 46. soruda visited listesine elimizdeki sayıları atıyor ve bu sayılar kullanıldı mı diye kontrol ediyorduk.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>Given a collection of numbers, nums, that might contain duplicates, return all possible unique permutations in any order.</p>
<!-- raw HTML omitted -->
<pre><code>Input: nums = [1,1,2]
Output:
[[1,1,2],
 [1,2,1],
 [2,1,1]]
</code></pre><!-- raw HTML omitted -->
<pre><code>Input: nums = [1,2,3]
Output: [[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]
</code></pre><!-- raw HTML omitted -->
<ul>
<li>Soruda 46. soruya benzer şekilde bize sayılardan oluşan bir liste veriliyor.Bu listedeki sayıların permutasyonlarını bulmamız isteniyor. Ama listede aynı sayılardan bulunabilir.</li>
<li>Burada 46. sorudaki yolun aynısını izleyebiliriz ama tek bir farkla. 46. soruda visited listesine elimizdeki sayıları atıyor ve bu sayılar kullanıldı mı diye kontrol ediyorduk.Bu sefer visited listesine indeksleri atıp.Bu indeks daha önce ziyaret edildi mi diye kontrol edeceğiz.</li>
<li>Ayrıca benzer kombinasyonlar oluşma ihtimali olduğu için elimizdeki kombinasyon uzunluğu verilen sayıların liste uzunluğuna ulaştığında ayrıca bu kombinasyon daha önce sonuç listesine eklenmiş mi diye kontrol edeceğiz.</li>
<li>Aşağıdaki örnekte nums = [1,1,2] için program akışını takip edebilirsiniz.</li>
<li>ekle 0 1 {0} [1] -&gt; yapılan işlem-indeks-indeksteki sayı-ziyaret edilmiş indeksler-elimizdeki kombinasyon</li>
</ul>
<pre><code>ekle 0 1 {0} [1]
devam 0 1 {0} [1]
ekle 1 2 {0, 1} [1, 2]
devam 0 1 {0, 1} [1, 2]
devam 1 2 {0, 1} [1, 2]
ekle 2 2 {0, 1, 2} [1, 2, 2]
buldu {0, 1, 2} [1, 2, 2]
çıkar 2 2 {0, 1} [1, 2]
çıkar 1 2 {0} [1]
ekle 2 2 {0, 2} [1, 2]
devam 0 1 {0, 2} [1, 2]
ekle 1 2 {0, 1, 2} [1, 2, 2]
devam 0 1 {0, 1, 2} [1, 2, 2]
devam 1 2 {0, 1, 2} [1, 2, 2]
devam 2 2 {0, 1, 2} [1, 2, 2]
çıkar 1 2 {0, 2} [1, 2]
devam 2 2 {0, 2} [1, 2]
çıkar 2 2 {0} [1]
çıkar 0 1 set() []
ekle 1 2 {1} [2]
ekle 0 1 {0, 1} [2, 1]
devam 0 1 {0, 1} [2, 1]
devam 1 2 {0, 1} [2, 1]
ekle 2 2 {0, 1, 2} [2, 1, 2]
buldu {0, 1, 2} [2, 1, 2]
çıkar 2 2 {0, 1} [2, 1]
çıkar 0 1 {1} [2]
devam 1 2 {1} [2]
ekle 2 2 {1, 2} [2, 2]
ekle 0 1 {0, 1, 2} [2, 2, 1]
buldu {0, 1, 2} [2, 2, 1]
çıkar 0 1 {1, 2} [2, 2]
devam 1 2 {1, 2} [2, 2]
devam 2 2 {1, 2} [2, 2]
çıkar 2 2 {1} [2]
çıkar 1 2 set() []
ekle 2 2 {2} [2]
ekle 0 1 {0, 2} [2, 1]
devam 0 1 {0, 2} [2, 1]
ekle 1 2 {0, 2, 1} [2, 1, 2]
devam 0 1 {0, 2, 1} [2, 1, 2]
devam 1 2 {0, 2, 1} [2, 1, 2]
devam 2 2 {0, 2, 1} [2, 1, 2]
çıkar 1 2 {0, 2} [2, 1]
devam 2 2 {0, 2} [2, 1]
çıkar 0 1 {2} [2]
ekle 1 2 {2, 1} [2, 2]
ekle 0 1 {0, 2, 1} [2, 2, 1]
devam 0 1 {0, 2, 1} [2, 2, 1]
devam 1 2 {0, 2, 1} [2, 2, 1]
devam 2 2 {0, 2, 1} [2, 2, 1]
çıkar 0 1 {2, 1} [2, 2]
devam 1 2 {2, 1} [2, 2]
devam 2 2 {2, 1} [2, 2]
çıkar 1 2 {2} [2]
devam 2 2 {2} [2]
çıkar 2 2 set() []
[[1, 2, 2], [2, 1, 2], [2, 2, 1]]
</code></pre><!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python">    <span class="k">def</span> <span class="nf">permuteUnique</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">nums</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">List</span><span class="p">[</span><span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">]]:</span>
        <span class="k">def</span> <span class="nf">helper</span><span class="p">(</span><span class="n">results</span><span class="p">,</span> <span class="n">nums</span><span class="p">,</span> <span class="n">combination</span><span class="p">,</span> <span class="n">start</span><span class="p">,</span> <span class="n">visited</span><span class="p">):</span>
            <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">combination</span><span class="p">)</span> <span class="o">==</span> <span class="nb">len</span><span class="p">(</span><span class="n">nums</span><span class="p">)</span> <span class="ow">and</span> <span class="n">combination</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">results</span><span class="p">:</span>
                <span class="n">results</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="n">combination</span><span class="p">))</span>
                <span class="k">return</span>
        
        
            <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">nums</span><span class="p">)):</span>
                <span class="k">if</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">visited</span><span class="p">:</span>
                    <span class="k">continue</span>
            
                <span class="n">visited</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">i</span><span class="p">)</span>
                <span class="n">combination</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">nums</span><span class="p">[</span><span class="n">i</span><span class="p">])</span>
                <span class="n">helper</span><span class="p">(</span><span class="n">results</span><span class="p">,</span> <span class="n">nums</span><span class="p">,</span> <span class="n">combination</span><span class="p">,</span> <span class="n">i</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="n">visited</span><span class="p">)</span>
                <span class="n">combination</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>            
                <span class="n">visited</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">i</span><span class="p">)</span>
                
        <span class="n">results</span> <span class="o">=</span> <span class="p">[]</span>
        <span class="n">nums</span> <span class="o">=</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">nums</span><span class="p">)</span>
        <span class="n">visited</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
        <span class="n">helper</span><span class="p">(</span><span class="n">results</span><span class="p">,</span> <span class="n">nums</span><span class="p">,</span> <span class="p">[],</span> <span class="mi">0</span><span class="p">,</span> <span class="n">visited</span><span class="p">)</span>
        
        <span class="k">return</span> <span class="n">results</span>

</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 90 Subsets II</title>
			<link>https://www.dincerbakkal.com/posts/leetcode090/</link>
			<pubDate>Sun, 11 Apr 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode090/</guid>
			<description>Given an integer array nums that may contain duplicates, return all possible subsets (the power set).
The solution set must not contain duplicate subsets. Return the solution in any order.
Input: nums = [1,2,2] Output: [[],[1],[1,2],[1,2,2],[2],[2,2]] Input: nums = [0] Output: [[],[0]]  Soruda bize sayılardan oluşan bir liste veriliyor bu listede aynı sayılar olabilir. Ve bu listenin benzersiz alt kümelerini bulmamız isteniyor.Örneğin elimizde [1,2,2] şeklinde bir liste var.Bu listenin normalde [1,2] , [1,2] şeklinde aynı alt kümeyi birden fazla oluşturma ihtimali var.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>Given an integer array nums that may contain duplicates, return all possible subsets (the power set).</p>
<p>The solution set must not contain duplicate subsets. Return the solution in any order.</p>
<!-- raw HTML omitted -->
<pre><code>Input: nums = [1,2,2]
Output: [[],[1],[1,2],[1,2,2],[2],[2,2]]
</code></pre><!-- raw HTML omitted -->
<pre><code>Input: nums = [0]
Output: [[],[0]]
</code></pre><!-- raw HTML omitted -->
<ul>
<li>Soruda bize sayılardan oluşan bir liste veriliyor bu listede aynı sayılar olabilir. Ve bu listenin benzersiz alt kümelerini bulmamız isteniyor.Örneğin elimizde [1,2,2] şeklinde bir liste var.Bu listenin normalde [1,2] , [1,2] şeklinde aynı alt kümeyi birden fazla oluşturma ihtimali var.Bu durumda bunlardan sadece birini sonuç listemize ekleyeceğiz.</li>
<li>Bu sorunun çözümü için subset probleminde olduğu gibi backtracking yöntemi ile aynı fonksiyonu tekrar tekrar çağırabiliriz.</li>
<li>Her çağırdığımızda oluşan combination listesini sonuç listemizde olup olmadığını kontrol ederiz.Yok ise ekleriz var ise geçeriz.</li>
<li>Burada dikkat etmemiz gereken dfs fonksiyonu çağrılmadan önce kombinasyon kümesine eklenen elemanın çağrıldıktan sonra kombinasyondan çıkarılması işlemidir.Bu sayede kombinasyon kümesi sadece ilk verilen listenin alt kümelerinden oluşur.</li>
<li>Çıkarma işlemi yapılarak oluşan çağrılar.</li>
<li>dfs fonksiyonu çağrılıp ilk for döngüsü başladığı zaman 0,1,2 indexleri için dfs tekrar çağrılır.</li>
<li>İndex 0 çağrısında 0,1,2 indexteki 1,2,2 sayıları eklenir ve çıkarılır.</li>
</ul>
<pre><code>ekle  indeks 0 [1]
ekle  indeks 1 [1, 2] burada indeks 1 deki 2 ekleniyor
ekle  indeks 2 [1, 2, 2]
çikar indeks 2 [1, 2]
çikar indeks 1 [1]
ekle  indeks 1 [1, 2] burada indeks 2 deki 2 ekleniyor
çikar indeks 1 [1]
çikar indeks 0 []
</code></pre><ul>
<li>İndex 1 çağrısında 1. ve 2. indeksteki 2&rsquo;ler eklenir ve çıkarılır.</li>
</ul>
<pre><code>ekle  indeks 0 [2] burada indeks 1 deki 2 ekleniyor
ekle  indeks 2 [2, 2] burada indeks 2 deki 2 ekleniyor
çikar indeks 2 [2]
çikar indeks 0 []
</code></pre><ul>
<li>İndex 2 çağrısı sadece 2. indexteki 2 eklenir ve çıkarılır.</li>
</ul>
<pre><code>ekle  indeks 0 [2]
çikar indeks 0 []
</code></pre><!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python">    <span class="k">def</span> <span class="nf">subsetsWithDup</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">nums</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">List</span><span class="p">[</span><span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">]]:</span>
        <span class="k">def</span> <span class="nf">dfs</span><span class="p">(</span><span class="n">results</span><span class="p">,</span> <span class="n">combination</span><span class="p">,</span> <span class="n">start</span><span class="p">,</span> <span class="n">nums</span><span class="p">):</span>
            <span class="k">if</span> <span class="n">combination</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">results</span><span class="p">:</span>
                <span class="n">results</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="n">combination</span><span class="p">))</span>
        
            <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">nums</span><span class="p">)):</span>
                <span class="n">combination</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">nums</span><span class="p">[</span><span class="n">i</span><span class="p">])</span>            
                <span class="n">dfs</span><span class="p">(</span><span class="n">results</span><span class="p">,</span> <span class="n">combination</span><span class="p">,</span> <span class="n">i</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="n">nums</span><span class="p">)</span>            
                <span class="n">combination</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
                
        <span class="n">results</span> <span class="o">=</span> <span class="p">[]</span>
        <span class="n">combination</span> <span class="o">=</span> <span class="p">[]</span>
        <span class="n">nums</span> <span class="o">=</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">nums</span><span class="p">)</span>

        <span class="n">dfs</span><span class="p">(</span><span class="n">results</span><span class="p">,</span><span class="n">combination</span> <span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">nums</span><span class="p">)</span>
        
        <span class="k">return</span> <span class="n">results</span>

</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 78 Subsets</title>
			<link>https://www.dincerbakkal.com/posts/leetcode078/</link>
			<pubDate>Sat, 10 Apr 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode078/</guid>
			<description>Given an integer array nums of unique elements, return all possible subsets (the power set).
The solution set must not contain duplicate subsets. Return the solution in any order.
Input: nums = [1,2,3] Output: [[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]] Input: nums = [0] Output: [[],[0]]  Soruda bize sayılardan oluşan bir liste veriliyor ve bu listenin alt kümelerini bulmamız isteniyor. Bir kümenin alt kümeleri sayısı o kümenin eleman sayısı üzeri 2 (n^2) dir. Bu soruda dfs adında oluşturacağımız fonksiyonu tekrar tekrar çağırarak dallanmış olarak tüm alt kümelere ulaşabiliriz.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>Given an integer array nums of unique elements, return all possible subsets (the power set).</p>
<p>The solution set must not contain duplicate subsets. Return the solution in any order.</p>
<!-- raw HTML omitted -->
<pre><code>Input: nums = [1,2,3]
Output: [[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]
</code></pre><!-- raw HTML omitted -->
<pre><code>Input: nums = [0]
Output: [[],[0]]
</code></pre><!-- raw HTML omitted -->
<ul>
<li>Soruda bize sayılardan oluşan bir liste veriliyor ve bu listenin alt kümelerini bulmamız isteniyor.</li>
<li>Bir kümenin alt kümeleri sayısı o kümenin eleman sayısı üzeri 2 (n^2) dir.</li>
<li>Bu soruda dfs adında oluşturacağımız fonksiyonu tekrar tekrar çağırarak dallanmış olarak tüm alt kümelere ulaşabiliriz.</li>
<li>Yapacağımız işlem elimizdeki elemanı ekleyerek ve eklemeyerek dfs fonksiyonunu çağırmak.</li>
<li>Örneğin [1,2] elemanlı kümenin 4 altkümesi oluşabilir.</li>
<li>İlk dfs fonksiyonu çağırdığımızda 1. eleamanın olduğu ve olmadığı 2 alt küme oluşur [] ,[1].</li>
<li>İkinci dfs fonksiyonu çağırmada ilk olara [] alt kümesine 2 yi ekleriz [2] ve 2yi eklemeyiz [] şimdi de [1] alt kümesine 2yi ekleriz [1,2] eklemeyiz [1] bu şekilde dallanmış bir yapı oluşur ve sonuç olarak [] ,[1],[2],[1,2] alt kümeleri oluşur.</li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python">    <span class="k">def</span> <span class="nf">subsets</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">nums</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">List</span><span class="p">[</span><span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">]]:</span>
        <span class="n">res</span><span class="o">=</span> <span class="p">[]</span> <span class="c1">#sonuç</span>
        <span class="n">subset</span> <span class="o">=</span> <span class="p">[]</span> <span class="c1">#alt kümelerin oluştuğu değişken her seferinde değişecek.</span>
        
        <span class="k">def</span> <span class="nf">dfs</span><span class="p">(</span><span class="n">i</span><span class="p">):</span>
            <span class="k">if</span> <span class="n">i</span> <span class="o">&gt;=</span> <span class="nb">len</span><span class="p">(</span><span class="n">nums</span><span class="p">):</span> <span class="c1">#eğer indeksin sonuna geldiysem elindeki alt kümeyi sonuca kopyala ve dön</span>
                <span class="n">res</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">subset</span><span class="o">.</span><span class="n">copy</span><span class="p">())</span>
                <span class="k">return</span>
            <span class="c1">#alt kümeye yeni elemanı ekle dfs çağır     </span>
            <span class="n">subset</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">nums</span><span class="p">[</span><span class="n">i</span><span class="p">])</span>
            <span class="n">dfs</span><span class="p">(</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span>
            <span class="c1">#alt kümeye eklediğin yeni elemanı çıkar dfs çağır  </span>
            <span class="n">subset</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
            <span class="n">dfs</span><span class="p">(</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span>
        <span class="n">dfs</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
        <span class="k">return</span> <span class="n">res</span>

</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 784 Letter Case Permutation</title>
			<link>https://www.dincerbakkal.com/posts/leetcode784/</link>
			<pubDate>Fri, 09 Apr 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode784/</guid>
			<description>Given a string s, we can transform every letter individually to be lowercase or uppercase to create another string.
Return a list of all possible strings we could create. You can return the output in any order.
Input: s = &amp;quot;a1b2&amp;quot; Output: [&amp;quot;a1b2&amp;quot;,&amp;quot;a1B2&amp;quot;,&amp;quot;A1b2&amp;quot;,&amp;quot;A1B2&amp;quot;] Input: s = &amp;quot;3z4&amp;quot; Output: [&amp;quot;3z4&amp;quot;,&amp;quot;3Z4&amp;quot;] Input: s = &amp;quot;12345&amp;quot; Output: [&amp;quot;12345&amp;quot;]  Soruda bize bir string veriliyor.Bu stringin içinde harf ve sayılar var.Harfleri büyük ve küçük olarak değiştirerek yeni stringler üretebiliyoruz.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>Given a string s, we can transform every letter individually to be lowercase or uppercase to create another string.</p>
<p>Return a list of all possible strings we could create. You can return the output in any order.</p>
<!-- raw HTML omitted -->
<pre><code>Input: s = &quot;a1b2&quot;
Output: [&quot;a1b2&quot;,&quot;a1B2&quot;,&quot;A1b2&quot;,&quot;A1B2&quot;]
</code></pre><!-- raw HTML omitted -->
<pre><code>Input: s = &quot;3z4&quot;
Output: [&quot;3z4&quot;,&quot;3Z4&quot;]
</code></pre><!-- raw HTML omitted -->
<pre><code>Input: s = &quot;12345&quot;
Output: [&quot;12345&quot;]
</code></pre><!-- raw HTML omitted -->
<ul>
<li>Soruda bize bir string veriliyor.Bu stringin içinde harf ve sayılar var.Harfleri büyük ve küçük olarak değiştirerek yeni stringler üretebiliyoruz.Bu şekilde oluşturulabilecek tüm stringleri bulmamız isteniyor.</li>
<li>dfs adında bir fonksiyon oluşturur ve rekürsif olarak fonksiyonu çağırırız.</li>
<li>Fonksiyonun 4 parametresi olacaktır.İlk parametre stringimiz,index,harflerin eklendikçe tutulduğu bir liste olan path ve sonuçların tutulduğu res.</li>
<li>Fonksiyonda ilk kontrol edeceğimiz nokta eğer index kelimenin uzunluğuna geldi ise demek ki kelime ile işimiz bitmiştir bulduğumuz değeri return edebiliriz.</li>
<li>Aksi durumda indeksteki karakter harf mi yoksa rakam mı kontrol ederiz.</li>
<li>Rakam ise ekleriz indexi bir arttırır, pathe karakteri ekler tekrar dfs fonksiyonunu çağırırız.</li>
<li>Harf ise elimizdeki harfin bir küçük hali ve bir de büyük hali ile dfs fonksiyonunu tekrar çağırırız.</li>
<li>Bu işlem dallanarak büyüyen bir yapıya dönüşür.</li>
<li>String içindeki harf sayısına n dersek her seferinde 2li şekilde dallanacağı için T.C.(zaman karmaşıklığı) =&gt; (2^n) olur.</li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python">    <span class="k">def</span> <span class="nf">letterCasePermutation</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">S</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
        
        <span class="k">def</span> <span class="nf">dfs</span><span class="p">(</span><span class="n">s</span><span class="p">,</span> <span class="n">index</span><span class="p">,</span> <span class="n">path</span><span class="p">,</span> <span class="n">res</span><span class="p">):</span>
            <span class="k">if</span> <span class="n">index</span> <span class="o">==</span> <span class="nb">len</span><span class="p">(</span><span class="n">s</span><span class="p">):</span>
                <span class="n">res</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">path</span><span class="p">)</span>
                <span class="k">return</span>
            <span class="k">else</span><span class="p">:</span>
                <span class="k">if</span> <span class="n">s</span><span class="p">[</span><span class="n">index</span><span class="p">]</span><span class="o">.</span><span class="n">isalpha</span><span class="p">():</span>
                    <span class="n">dfs</span><span class="p">(</span><span class="n">s</span><span class="p">,</span> <span class="n">index</span><span class="o">+</span><span class="mi">1</span><span class="p">,</span> <span class="n">path</span> <span class="o">+</span> <span class="n">s</span><span class="p">[</span><span class="n">index</span><span class="p">]</span><span class="o">.</span><span class="n">lower</span><span class="p">(),</span> <span class="n">res</span><span class="p">)</span>
                    <span class="n">dfs</span><span class="p">(</span><span class="n">s</span><span class="p">,</span> <span class="n">index</span><span class="o">+</span><span class="mi">1</span><span class="p">,</span> <span class="n">path</span> <span class="o">+</span> <span class="n">s</span><span class="p">[</span><span class="n">index</span><span class="p">]</span><span class="o">.</span><span class="n">upper</span><span class="p">(),</span> <span class="n">res</span><span class="p">)</span>
                <span class="k">else</span><span class="p">:</span>
                    <span class="n">dfs</span><span class="p">(</span><span class="n">s</span><span class="p">,</span> <span class="n">index</span><span class="o">+</span><span class="mi">1</span><span class="p">,</span> <span class="n">path</span> <span class="o">+</span> <span class="n">s</span><span class="p">[</span><span class="n">index</span><span class="p">],</span> <span class="n">res</span><span class="p">)</span>
                    
        <span class="n">res</span> <span class="o">=</span> <span class="p">[]</span>       
        <span class="n">dfs</span><span class="p">(</span><span class="n">S</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="s1">&#39;&#39;</span><span class="p">,</span> <span class="n">res</span><span class="p">)</span>
        <span class="k">return</span> <span class="n">res</span>

</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 079 Word Search</title>
			<link>https://www.dincerbakkal.com/posts/leetcode079/</link>
			<pubDate>Thu, 08 Apr 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode079/</guid>
			<description>Given an m x n grid of characters board and a string word, return true if word exists in the grid.
The word can be constructed from letters of sequentially adjacent cells, where adjacent cells are horizontally or vertically neighboring. The same letter cell may not be used more than once.
 Input: board = [[&amp;quot;A&amp;quot;,&amp;quot;B&amp;quot;,&amp;quot;C&amp;quot;,&amp;quot;E&amp;quot;],[&amp;quot;S&amp;quot;,&amp;quot;F&amp;quot;,&amp;quot;C&amp;quot;,&amp;quot;S&amp;quot;],[&amp;quot;A&amp;quot;,&amp;quot;D&amp;quot;,&amp;quot;E&amp;quot;,&amp;quot;E&amp;quot;]], word = &amp;quot;ABCCED&amp;quot; Output: true  Input: board = [[&amp;quot;A&amp;quot;,&amp;quot;B&amp;quot;,&amp;quot;C&amp;quot;,&amp;quot;E&amp;quot;],[&amp;quot;S&amp;quot;,&amp;quot;F&amp;quot;,&amp;quot;C&amp;quot;,&amp;quot;S&amp;quot;],[&amp;quot;A&amp;quot;,&amp;quot;D&amp;quot;,&amp;quot;E&amp;quot;,&amp;quot;E&amp;quot;]], word = &amp;quot;SEE&amp;quot; Output: true  Input: board = [[&amp;quot;A&amp;quot;,&amp;quot;B&amp;quot;,&amp;quot;C&amp;quot;,&amp;quot;E&amp;quot;],[&amp;quot;S&amp;quot;,&amp;quot;F&amp;quot;,&amp;quot;C&amp;quot;,&amp;quot;S&amp;quot;],[&amp;quot;A&amp;quot;,&amp;quot;D&amp;quot;,&amp;quot;E&amp;quot;,&amp;quot;E&amp;quot;]], word = &amp;quot;ABCB&amp;quot; Output: false  Soruda bize bir matrix veriliyor.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>Given an m x n grid of characters board and a string word, return true if word exists in the grid.</p>
<p>The word can be constructed from letters of sequentially adjacent cells, where adjacent cells are horizontally or vertically neighboring. The same letter cell may not be used more than once.</p>
<!-- raw HTML omitted -->
<figure><img src="/image/79ex1.jpg"
         alt="image"/>
</figure>

<pre><code>Input: board = [[&quot;A&quot;,&quot;B&quot;,&quot;C&quot;,&quot;E&quot;],[&quot;S&quot;,&quot;F&quot;,&quot;C&quot;,&quot;S&quot;],[&quot;A&quot;,&quot;D&quot;,&quot;E&quot;,&quot;E&quot;]], word = &quot;ABCCED&quot;
Output: true
</code></pre><!-- raw HTML omitted -->
<figure><img src="/image/79ex2.jpg"
         alt="image"/>
</figure>

<pre><code>Input: board = [[&quot;A&quot;,&quot;B&quot;,&quot;C&quot;,&quot;E&quot;],[&quot;S&quot;,&quot;F&quot;,&quot;C&quot;,&quot;S&quot;],[&quot;A&quot;,&quot;D&quot;,&quot;E&quot;,&quot;E&quot;]], word = &quot;SEE&quot;
Output: true
</code></pre><!-- raw HTML omitted -->
<figure><img src="/image/79ex3.jpg"
         alt="image"/>
</figure>

<pre><code>Input: board = [[&quot;A&quot;,&quot;B&quot;,&quot;C&quot;,&quot;E&quot;],[&quot;S&quot;,&quot;F&quot;,&quot;C&quot;,&quot;S&quot;],[&quot;A&quot;,&quot;D&quot;,&quot;E&quot;,&quot;E&quot;]], word = &quot;ABCB&quot;
Output: false
</code></pre><!-- raw HTML omitted -->
<ul>
<li>Soruda bize bir matrix veriliyor.Matrixin içerisinde rastgele harfler sıralanmış.</li>
<li>Bu harfler içerisinde bize verilen kelime sıralı olarak var mı yok mu bulmamız isteniyor.</li>
<li>Burada rekürsif dfs arama yaparak kelimeyi bulabiliriz.</li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python">    <span class="k">def</span> <span class="nf">exist</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">board</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]],</span> <span class="n">word</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
        <span class="n">ROWS</span><span class="p">,</span> <span class="n">COLS</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">board</span><span class="p">),</span> <span class="nb">len</span><span class="p">(</span><span class="n">board</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span><span class="c1"># ilk olarak sütun ve sıra uzunluklarını atadık.</span>
        <span class="n">path</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span> <span class="c1"># bulunduğumuz konumu tutacağımız bir değişken listesi oluşturduk.</span>
        
        <span class="k">def</span> <span class="nf">dfs</span><span class="p">(</span><span class="n">r</span><span class="p">,</span> <span class="n">c</span><span class="p">,</span> <span class="n">i</span><span class="p">):</span>
            <span class="k">if</span> <span class="n">i</span> <span class="o">==</span> <span class="nb">len</span><span class="p">(</span><span class="n">word</span><span class="p">):</span> <span class="c1">#eğer i kelimenin uzunluğuna ulaştı ise kelimeyi bulduk</span>
                <span class="k">return</span> <span class="kc">True</span>
            <span class="k">if</span><span class="p">(</span><span class="n">r</span> <span class="o">&lt;</span> <span class="mi">0</span> <span class="ow">or</span> <span class="n">c</span> <span class="o">&lt;</span> <span class="mi">0</span> <span class="ow">or</span> <span class="c1"># tablo dışına çıkarsak</span>
               <span class="n">r</span> <span class="o">&gt;=</span><span class="n">ROWS</span> <span class="ow">or</span> <span class="n">c</span> <span class="o">&gt;=</span> <span class="n">COLS</span> <span class="ow">or</span>
               <span class="n">word</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">!=</span> <span class="n">board</span><span class="p">[</span><span class="n">r</span><span class="p">][</span><span class="n">c</span><span class="p">]</span> <span class="ow">or</span> <span class="c1"># bir sonraki harf aradığımız harf değil ise </span>
               <span class="p">(</span><span class="n">r</span><span class="p">,</span> <span class="n">c</span><span class="p">)</span> <span class="ow">in</span> <span class="n">path</span><span class="p">):</span> <span class="c1"># bu konuma zaten daha önce bulunmuşsak</span>
                <span class="k">return</span> <span class="kc">False</span>    <span class="c1">#false dön</span>
            <span class="n">path</span><span class="o">.</span><span class="n">add</span><span class="p">((</span><span class="n">r</span><span class="p">,</span><span class="n">c</span><span class="p">))</span> <span class="c1">#dfs tekrar çağırmadan önce konumu kaydet</span>
            <span class="n">res</span> <span class="o">=</span> <span class="p">(</span><span class="n">dfs</span><span class="p">(</span><span class="n">r</span><span class="o">+</span><span class="mi">1</span><span class="p">,</span><span class="n">c</span><span class="p">,</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span> <span class="ow">or</span> <span class="c1">#bir sonraki harf için bulunduğumuz konumun sağını solunu yukarısını </span>
                  <span class="n">dfs</span><span class="p">(</span><span class="n">r</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="n">c</span><span class="p">,</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span> <span class="ow">or</span>  <span class="c1">#aşağısını kontrol et</span>
                  <span class="n">dfs</span><span class="p">(</span><span class="n">r</span><span class="p">,</span><span class="n">c</span><span class="o">+</span><span class="mi">1</span><span class="p">,</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span> <span class="ow">or</span>
                  <span class="n">dfs</span><span class="p">(</span><span class="n">r</span><span class="p">,</span><span class="n">c</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">))</span>
            <span class="n">path</span><span class="o">.</span><span class="n">remove</span><span class="p">((</span><span class="n">r</span><span class="p">,</span><span class="n">c</span><span class="p">))</span>  <span class="c1">#bulunduğumuz konumu path den çıkar</span>
            <span class="k">return</span> <span class="n">res</span> <span class="c1">#sonuç dön</span>

        <span class="c1">#yukarıdaki dfs fonksiyonu kelimenin harflerini sırası ile bulmak için</span>
        <span class="c1">#alttaki for döngüleri ile tüm matrixi dolaşalım    </span>
        <span class="k">for</span> <span class="n">r</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">ROWS</span><span class="p">):</span>
            <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">COLS</span><span class="p">):</span>
                <span class="k">if</span> <span class="n">dfs</span><span class="p">(</span><span class="n">r</span><span class="p">,</span><span class="n">c</span><span class="p">,</span><span class="mi">0</span><span class="p">):</span> <span class="k">return</span> <span class="kc">True</span>
        <span class="k">return</span> <span class="kc">False</span>

</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 48 Rotate Image</title>
			<link>https://www.dincerbakkal.com/posts/leetcode048/</link>
			<pubDate>Wed, 07 Apr 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode048/</guid>
			<description>You are given an n x n 2D matrix representing an image, rotate the image by 90 degrees (clockwise).
You have to rotate the image in-place, which means you have to modify the input 2D matrix directly. DO NOT allocate another 2D matrix and do the rotation.
 Input: matrix = [[1,2,3],[4,5,6],[7,8,9]] Output: [[7,4,1],[8,5,2],[9,6,3]]  Input: matrix = [[5,1,9,11],[2,4,8,10],[13,3,6,7],[15,14,12,16]] Output: [[15,13,2,5],[14,3,4,1],[12,6,8,9],[16,7,10,11]]  Soruda bize bir matrix veriliyor.Verilen matrixteki değerleri saat yönünde 90 derece döndürmemiz isteniyor.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>You are given an n x n 2D matrix representing an image, rotate the image by 90 degrees (clockwise).</p>
<p>You have to rotate the image in-place, which means you have to modify the input 2D matrix directly. DO NOT allocate another 2D matrix and do the rotation.</p>
<!-- raw HTML omitted -->
<figure><img src="/image/48ex1.jpg"
         alt="image"/>
</figure>

<pre><code>Input: matrix = [[1,2,3],[4,5,6],[7,8,9]]
Output: [[7,4,1],[8,5,2],[9,6,3]]
</code></pre><!-- raw HTML omitted -->
<figure><img src="/image/48ex2.jpg"
         alt="image"/>
</figure>

<pre><code>Input: matrix = [[5,1,9,11],[2,4,8,10],[13,3,6,7],[15,14,12,16]]
Output: [[15,13,2,5],[14,3,4,1],[12,6,8,9],[16,7,10,11]]
</code></pre><!-- raw HTML omitted -->
<ul>
<li>Soruda bize bir matrix veriliyor.Verilen matrixteki değerleri saat yönünde 90 derece döndürmemiz isteniyor.</li>
<li>Bu sorunun çözümünde 2 yol kullanabiliriz.Birincisi sol üstteki değeri sağ üste,sağ üstteki değeri sağ alta,sağ alttaki değeri sol alta ve son olarak sol alttaki değeri sol üste atarız.Bu yöntemi kullanarak tüm matriksi dolaşırız.</li>
<li>Diğer yöntem ise matematiksel bir yaklaşım kullanarak önce matrixi diagonal olarak ters çeviririz.Sonrasında oluşan sıraların tersini alırız.Bu şekilde matrix 90 derece sağa dönmüş olur.</li>
<li>Komplekslikleri aynı olduğu için ve matematiksel yöntem daha anlaşılır bir kod sunduğu için daha çok tercih edilir.</li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python">    <span class="k">def</span> <span class="nf">rotate</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">matrix</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">]])</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
        <span class="s2">&#34;&#34;&#34;
</span><span class="s2">        Do not return anything, modify matrix in-place instead.
</span><span class="s2">        &#34;&#34;&#34;</span>
        <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">matrix</span><span class="p">)):</span>
            <span class="k">for</span> <span class="n">j</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">matrix</span><span class="p">[</span><span class="mi">0</span><span class="p">])):</span>
                <span class="n">temp</span> <span class="o">=</span> <span class="n">matrix</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="n">j</span><span class="p">]</span>
                <span class="n">matrix</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="n">j</span><span class="p">]</span> <span class="o">=</span> <span class="n">matrix</span><span class="p">[</span><span class="n">j</span><span class="p">][</span><span class="n">i</span><span class="p">]</span>
                <span class="n">matrix</span><span class="p">[</span><span class="n">j</span><span class="p">][</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="n">temp</span>
        
        <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">matrix</span><span class="p">)):</span>
            <span class="n">matrix</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="nb">reversed</span><span class="p">(</span><span class="n">matrix</span><span class="p">[</span><span class="n">i</span><span class="p">])</span>

</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 54 Spiral Matrix</title>
			<link>https://www.dincerbakkal.com/posts/leetcode054/</link>
			<pubDate>Tue, 06 Apr 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode054/</guid>
			<description>Given an m x n matrix, return all elements of the matrix in spiral order.
 Input: matrix = [[1,2,3],[4,5,6],[7,8,9]] Output: [1,2,3,6,9,8,7,4,5]  Input: matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]] Output: [1,2,3,4,8,12,11,10,9,5,6,7]  Soruda bize bir matrix veriliyor.Verilen bu matrix içinde spiral şeklinde dolaşmamız isteniyor. Örnekte görüldüğü gibi bir spiral çizecek şekilde değerleri dönmemiz bekleniyor. Nerede durup, nerede devam edeceğimizi bilmemiz için 4 değer atarız. Sol =0, Sag=sıranın uzunluğu, Tepe=0, Taban=Sütunun uzunluğu. Amacımız sol sağdan küçük ve tepede tabandan küçük olduğu sürece matrix içinde dolaşmak ve her seferinde matrixi köşelerden küçültmek.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>Given an m x n matrix, return all elements of the matrix in spiral order.</p>
<!-- raw HTML omitted -->
<figure><img src="/image/54ex1.jpg"
         alt="image"/>
</figure>

<pre><code>Input: matrix = [[1,2,3],[4,5,6],[7,8,9]]
Output: [1,2,3,6,9,8,7,4,5]
</code></pre><!-- raw HTML omitted -->
<figure><img src="/image/54ex2.jpg"
         alt="image"/>
</figure>

<pre><code>Input: matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
Output: [1,2,3,4,8,12,11,10,9,5,6,7]
</code></pre><!-- raw HTML omitted -->
<ul>
<li>Soruda bize bir matrix veriliyor.Verilen bu matrix içinde spiral şeklinde dolaşmamız isteniyor.</li>
<li>Örnekte görüldüğü gibi bir spiral çizecek şekilde değerleri dönmemiz bekleniyor.</li>
<li>Nerede durup, nerede devam edeceğimizi bilmemiz için 4 değer atarız.</li>
<li>Sol =0, Sag=sıranın uzunluğu, Tepe=0, Taban=Sütunun uzunluğu.</li>
<li>Amacımız sol sağdan küçük ve tepede tabandan küçük olduğu sürece matrix içinde dolaşmak ve her seferinde matrixi köşelerden küçültmek.</li>
<li>İlk olarak sol tepeden başlar.Soldan sağa tüm değerleri alırız.İlk sıradaki tüm değerleri aldığımız için artık sonraki sıraya geçebiliriz -&gt; Tepe + 1</li>
<li>Şimdi en sağdaki sütunu tabana kadar olan değerleri alırız.Orada işimiz bittiğinde -&gt; Sag - 1</li>
<li>Burada değerler alındıktan sonra tepe ve sag güncellendiği için sagın soldan ve tabanın tepeden büyük olduğunu kontrol edelim.</li>
<li>Tabandaki sıranın sondan başa değerlerini alırız.  -&gt; Taban -1</li>
<li>İlk sütunun tabanındayız.Burada tabandan tepeye değerleri alırız -&gt; sol +1</li>
<li>Taban tepeye eşit yada sol sağa eşit olduğunda döngüyü bitirir sonuç listesini döneriz.</li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python">    <span class="k">def</span> <span class="nf">spiralOrder</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">matrix</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">]])</span> <span class="o">-&gt;</span> <span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">]:</span>
        <span class="n">res</span> <span class="o">=</span> <span class="p">[]</span>
        <span class="n">left</span><span class="p">,</span><span class="n">right</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span><span class="nb">len</span><span class="p">(</span><span class="n">matrix</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
        <span class="n">top</span><span class="p">,</span> <span class="n">bottom</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span><span class="nb">len</span><span class="p">(</span><span class="n">matrix</span><span class="p">)</span>
        
        <span class="k">while</span> <span class="n">left</span> <span class="o">&lt;</span> <span class="n">right</span> <span class="ow">and</span> <span class="n">top</span> <span class="o">&lt;</span> <span class="n">bottom</span><span class="p">:</span>
            <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span> <span class="p">(</span><span class="n">left</span><span class="p">,</span><span class="n">right</span><span class="p">):</span>
                <span class="n">res</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">matrix</span><span class="p">[</span><span class="n">top</span><span class="p">][</span><span class="n">i</span><span class="p">])</span>
            <span class="n">top</span> <span class="o">+=</span> <span class="mi">1</span>
            <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">top</span><span class="p">,</span><span class="n">bottom</span><span class="p">):</span>
                <span class="n">res</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">matrix</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="n">right</span><span class="o">-</span><span class="mi">1</span><span class="p">])</span>
            <span class="n">right</span> <span class="o">-=</span> <span class="mi">1</span>
            
            <span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">left</span> <span class="o">&lt;</span> <span class="n">right</span> <span class="ow">and</span> <span class="n">top</span> <span class="o">&lt;</span> <span class="n">bottom</span><span class="p">):</span>
                <span class="k">break</span>
            
            <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">right</span> <span class="o">-</span> <span class="mi">1</span><span class="p">,</span> <span class="n">left</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">):</span>
                <span class="n">res</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">matrix</span><span class="p">[</span><span class="n">bottom</span> <span class="o">-</span> <span class="mi">1</span><span class="p">][</span><span class="n">i</span><span class="p">])</span>
            <span class="n">bottom</span> <span class="o">-=</span><span class="mi">1</span>
            <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span> <span class="p">(</span><span class="n">bottom</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="n">top</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span><span class="p">):</span>
                <span class="n">res</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">matrix</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="n">left</span><span class="p">])</span>
            <span class="n">left</span> <span class="o">+=</span><span class="mi">1</span>
        <span class="k">return</span> <span class="n">res</span>

</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 73 Set Matrix Zeroes</title>
			<link>https://www.dincerbakkal.com/posts/leetcode073/</link>
			<pubDate>Mon, 05 Apr 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode073/</guid>
			<description>Given an m x n integer matrix matrix, if an element is 0, set its entire row and column to 0&amp;rsquo;s, and return the matrix.
You must do it in place.
 Input: matrix = [[1,1,1],[1,0,1],[1,1,1]] Output: [[1,0,1],[0,0,0],[1,0,1]]  Input: matrix = [[0,1,2,0],[3,4,5,2],[1,3,1,5]] Output: [[0,0,0,0],[0,4,5,0],[0,3,1,0]]  Soruda bir matrix veriliyor.Bu matrixin bazı değerleri sıfır.Bizden istenen sıfır değerlerinin olduğu tüm sütun ve satırları sıfır yapıp yeni bir matrix oluşturmak. Basit bir şekilde düşünürsek elimizdeki matrixin aynısından bir kopya matrix oluştururuz.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>Given an m x n integer matrix matrix, if an element is 0, set its entire row and column to 0&rsquo;s, and return the matrix.</p>
<p>You must do it in place.</p>
<!-- raw HTML omitted -->
<figure><img src="/image/73ex1.jpg"
         alt="image"/>
</figure>

<pre><code>Input: matrix = [[1,1,1],[1,0,1],[1,1,1]]
Output: [[1,0,1],[0,0,0],[1,0,1]]
</code></pre><!-- raw HTML omitted -->
<figure><img src="/image/73ex2.jpg"
         alt="image"/>
</figure>

<pre><code>Input: matrix = [[0,1,2,0],[3,4,5,2],[1,3,1,5]]
Output: [[0,0,0,0],[0,4,5,0],[0,3,1,0]]
</code></pre><!-- raw HTML omitted -->
<ul>
<li>Soruda bir matrix veriliyor.Bu matrixin bazı değerleri sıfır.Bizden istenen sıfır değerlerinin olduğu tüm sütun ve satırları sıfır yapıp yeni bir matrix oluşturmak.</li>
<li>Basit bir şekilde düşünürsek elimizdeki matrixin aynısından bir kopya matrix oluştururuz.Daha sonra ilk matrixi gezerek sıfır gördüğümüz zaman kopya matrixte ilgili sütunu ve satırı sıfır yaparız.Bu space complexity olarak o(m.n) maliyet oluşturur.</li>
<li>Bu çözümü biraz daha geliştirirsek.Yedek olarak sadece bir satır ve bir sütun oluşturalım.Elimizdeki matrixte sıfır gördüğümüz zaman aynı hizadaki sütun ve satırdaki alanları sıfır yapalım.Tüm matrixte dolaşmayı tamamlayınca kopya sütun ve satırdaki sıfır olan alanları kontrol edelim ve orjinal matrixte bunlara karşılık gelen yerleri sıfır yapalım.Bu işleminde space complexity değeri o(m+n) olur.</li>
<li>Bizden istenen space complexity değeri o(1) olması.Bunu nasıl sağlarız?</li>
<li>Önceki örnekte kopya sütun ve satır oluşturduk.Peki bu kopyaları oluşturmak yerine orjinal matrixteki en soldaki sütun ve en üstteki satırı kullansaydık.Yani sol üstten dolaşmaya başladık.0 değilse geç.Sıfır ise en üstteki satır ve en soldaki sütunu sıfır yap.Bu şekilde tüm matrixi dolaşıp sıfır gördüğümüzde en üstteki satır ve en soldaki sütunu güncelleriz.Sonra da bu alanları kontrol ederek gerekli yerleri sıfır yaparız.</li>
<li>Yalnız burada bir sıkıntı var.En üst satırın en solundaki alan ile en sol sütunun en üstündenki alan çakışmakta.Birbirlerini ezmekteler.Bunun için sadece 1 değerlik bir değişken atarız ve en sol sütunun en üstteki değerini burada saklarız.Bu da space complexity olarak o(1) olur.</li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python">    <span class="k">def</span> <span class="nf">setZeroes</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">matrix</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">]])</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
        <span class="s2">&#34;&#34;&#34;
</span><span class="s2">        Do not return anything, modify matrix in-place instead.   
</span><span class="s2">        &#34;&#34;&#34;</span>
        
        <span class="n">ROWS</span><span class="p">,</span> <span class="n">COLS</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">matrix</span><span class="p">),</span> <span class="nb">len</span><span class="p">(</span><span class="n">matrix</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
        <span class="n">rowZero</span> <span class="o">=</span> <span class="kc">False</span>
        
        <span class="c1">#determine which rows/cols need to be zero</span>
        
        <span class="k">for</span> <span class="n">r</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">ROWS</span><span class="p">):</span> <span class="c1">#satır</span>
            <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">COLS</span><span class="p">):</span> <span class="c1">#sütun</span>
                <span class="k">if</span> <span class="n">matrix</span><span class="p">[</span><span class="n">r</span><span class="p">][</span><span class="n">c</span><span class="p">]</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>   <span class="c1"># 0 değerini bulduk </span>
                    <span class="n">matrix</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="n">c</span><span class="p">]</span> <span class="o">=</span> <span class="mi">0</span>    <span class="c1">#en üst satırda aynı hizadaki değeri 0 yap</span>
                    <span class="k">if</span> <span class="n">r</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>           <span class="c1">#eğer en üstteki satır {matrix[0][0]} değil ise en soldaki  </span>
                        <span class="n">matrix</span><span class="p">[</span><span class="n">r</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span><span class="o">=</span><span class="mi">0</span>  <span class="c1">#sütundaki değeri 0 yap</span>
                    <span class="k">else</span><span class="p">:</span>             <span class="c1">#eğer en üstteki değeri {matrix[0][0]} 0 yapmamız gerekiyorsa bir </span>
                        <span class="n">rowZero</span> <span class="o">=</span><span class="kc">True</span> <span class="c1">#değişkene ata çünkü az önce atadığımız değeri ezmek istemiyoruz.</span>

        <span class="k">for</span> <span class="n">r</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="n">ROWS</span><span class="p">):</span> <span class="c1"># şimdi en soldaki sütun ve en üstteki satı hariç</span>
            <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="n">COLS</span><span class="p">):</span><span class="c1">#kalan alanları kontrol edip sıfırlıyoruz.</span>
                <span class="k">if</span> <span class="n">matrix</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="n">c</span><span class="p">]</span> <span class="o">==</span> <span class="mi">0</span> <span class="ow">or</span> <span class="n">matrix</span><span class="p">[</span><span class="n">r</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
                    <span class="n">matrix</span><span class="p">[</span><span class="n">r</span><span class="p">][</span><span class="n">c</span><span class="p">]</span> <span class="o">=</span> <span class="mi">0</span>

        <span class="k">if</span> <span class="n">matrix</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span><span class="o">==</span><span class="mi">0</span><span class="p">:</span><span class="c1"># en üst en soldaki değer sıfır ise demekki en üst satır sıfır olacak.</span>
            <span class="k">for</span> <span class="n">r</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">ROWS</span><span class="p">):</span>
                <span class="n">matrix</span><span class="p">[</span><span class="n">r</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="mi">0</span>

        <span class="k">if</span> <span class="n">rowZero</span><span class="p">:</span> <span class="c1">#yedek oluşturduğumuz değeri kontrol ediyoruz bu bizim sütunumuzun en üst değeri idi</span>
            <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">COLS</span><span class="p">):</span> <span class="c1">#sıfır ise en soldaki sütun sıfır olacak</span>
                <span class="n">matrix</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="n">c</span><span class="p">]</span> <span class="o">=</span> <span class="mi">0</span>

</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 442 Find All Duplicates in an Array</title>
			<link>https://www.dincerbakkal.com/posts/leetcode442/</link>
			<pubDate>Sun, 04 Apr 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode442/</guid>
			<description>Given an integer array nums of length n where all the integers of nums are in the range [1, n] and each integer appears once or twice, return an array of all the integers that appears twice.
You must write an algorithm that runs in O(n) time and uses only constant extra space.
Input: nums = [4,3,2,7,8,2,3,1] Output: [2,3] Input: nums = [1,1,2] Output: [1] Input: nums = [1] Output: []  Soruda bize n elemanlı bir liste veriliyor ve bu listedeki elemanlar [1,n] arası değerler alabilir deniyor.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>Given an integer array nums of length n where all the integers of nums are in the range [1, n] and each integer appears once or twice, return an array of all the integers that appears twice.</p>
<p>You must write an algorithm that runs in O(n) time and uses only constant extra space.</p>
<!-- raw HTML omitted -->
<pre><code>Input: nums = [4,3,2,7,8,2,3,1]
Output: [2,3]
</code></pre><!-- raw HTML omitted -->
<pre><code>Input: nums = [1,1,2]
Output: [1]
</code></pre><!-- raw HTML omitted -->
<pre><code>Input: nums = [1]
Output: []
</code></pre><!-- raw HTML omitted -->
<ul>
<li>Soruda bize n elemanlı bir liste veriliyor ve bu listedeki elemanlar [1,n] arası değerler alabilir deniyor.Bu listeki bazı elemanlar 1 kere yazılmış bazıları ise 2 kere.Listede 2 kere yazılan elemanları bulmamız isteniyor.</li>
<li>Çözüm için şöyle bir yol kullanabiliriz.Liste [4,3,2,7,8,2,3,1] olsun.Liste içinde ilk elemandan başlayarak dolaşmaya başlarız.Ve (elamanlar-1) index olarak düşünüp(çünkü 8 elemanlı bir listede index 0-7 arasında olabilir) o indexteki sayıyı -1 ile çarparız.</li>
<li>Örneğin ikinci eleman 3 -&gt; index(3-1=2)-&gt;2.</li>
<li>indexte 2 var -&gt; eksi mi kontrol et -&gt; 2yi -1 ile çarp</li>
<li>Liste içinde dolaşmaya devam ederken aynı eleman geldiğinde aynı indexi tekrar -1 ile çarpmaya gideriz.- Bu noktada çarpma işleminden önce sayının negatif olup olmadığını kontrol ederiz.</li>
<li>Yine 3&rsquo;e geldiğimizde -&gt; index(3-1=2) -&gt; 2. indexte -2 var -&gt; demek ki 3 iki kez kullanılmış.</li>
<li>Eleman eğer negatif değerli ise biz bu indexe daha önce gelmişizdir.Demekki şuan bulunduğumuz eleman listede birden fazla kez bulunuyor.</li>
<li>Bu elemanı result listemize atarız.</li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python">    <span class="k">def</span> <span class="nf">findDuplicates</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">nums</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">]:</span>
        <span class="n">result</span> <span class="o">=</span> <span class="p">[]</span>
        <span class="k">for</span> <span class="n">n</span> <span class="ow">in</span> <span class="n">nums</span><span class="p">:</span>
            <span class="n">n</span> <span class="o">=</span> <span class="nb">abs</span><span class="p">(</span><span class="n">n</span><span class="p">)</span>
            <span class="k">if</span> <span class="n">nums</span><span class="p">[</span><span class="n">n</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">&gt;</span><span class="mi">0</span><span class="p">:</span>
                <span class="n">nums</span><span class="p">[</span><span class="n">n</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">*=-</span><span class="mi">1</span>
            <span class="k">else</span><span class="p">:</span>
                <span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">n</span><span class="p">)</span>
        <span class="k">return</span> <span class="n">result</span>

</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 146 LRU Cache</title>
			<link>https://www.dincerbakkal.com/posts/leetcode146/</link>
			<pubDate>Sat, 03 Apr 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode146/</guid>
			<description>Soru Design a data structure that follows the constraints of a Least Recently Used (LRU) cache.
Implement the LRUCache class:
 LRUCache(int capacity) Initialize the LRU cache with positive size capacity. int get(int key) Return the value of the key if the key exists, otherwise return -1. void put(int key, int value) Update the value of the key if the key exists. Otherwise, add the key-value pair to the cache. If the number of keys exceeds the capacity from this operation, evict the least recently used key.</description>
			<content type="html"><![CDATA[<h3 id="soru">Soru</h3>
<p>Design a data structure that follows the constraints of a Least Recently Used (LRU) cache.</p>
<p>Implement the LRUCache class:</p>
<ul>
<li>LRUCache(int capacity) Initialize the LRU cache with positive size capacity.</li>
<li>int get(int key) Return the value of the key if the key exists, otherwise return -1.</li>
<li>void put(int key, int value) Update the value of the key if the key exists. Otherwise, add the key-value pair to the cache. If the number of keys exceeds the capacity from this operation, evict the least recently used key.</li>
</ul>
<p>The functions get and put must each run in O(1) average time complexity.</p>
<h3 id="örnek-1">Örnek 1</h3>
<pre><code>Input
[&quot;LRUCache&quot;, &quot;put&quot;, &quot;put&quot;, &quot;get&quot;, &quot;put&quot;, &quot;get&quot;, &quot;put&quot;, &quot;get&quot;, &quot;get&quot;, &quot;get&quot;]
[[2], [1, 1], [2, 2], [1], [3, 3], [2], [4, 4], [1], [3], [4]]
Output
[null, null, null, 1, null, -1, null, -1, 3, 4]

Explanation
LRUCache lRUCache = new LRUCache(2);
lRUCache.put(1, 1); // cache is {1=1}
lRUCache.put(2, 2); // cache is {1=1, 2=2}
lRUCache.get(1);    // return 1
lRUCache.put(3, 3); // LRU key was 2, evicts key 2, cache is {1=1, 3=3}
lRUCache.get(2);    // returns -1 (not found)
lRUCache.put(4, 4); // LRU key was 1, evicts key 1, cache is {4=4, 3=3}
lRUCache.get(1);    // return -1 (not found)
lRUCache.get(3);    // return 3
lRUCache.get(4);    // return 4
</code></pre><h3 id="çözüm">Çözüm</h3>
<ul>
<li>&ldquo;146. LRU Cache&rdquo; sorusu, en az kullanılan öğe (Least Recently Used - LRU) önbellek sistemi tasarlamayı ister. Bu önbellek, belirli bir kapasiteye sahiptir ve bu kapasite aşıldığında, en az kullanılan öğe önbellekten atılır ve yeni öğe eklenir. Sorun, bu önbellek mekanizmasını verimli bir şekilde uygulamayı gerektirir, bu da hem get hem de put işlemlerinin O(1) zaman karmaşıklığında çalışmasını zorunlu kılar.</li>
<li>Girdi: Belirli bir kapasite ile başlatılacak bir LRU önbelleği.</li>
<li>Çıktı: get(key) ve put(key, value) işlemleri üzerinden dinamik olarak yönetilen bir önbellek.</li>
<li>LRU önbelleğini verimli bir şekilde uygulamak için sıklıkla çift yönlü bağlı liste (doubly linked list) ve hash tablosu (dictionary) kullanılır:</li>
<li>Çift Yönlü Bağlı Liste: Bu liste, öğelerin sırasını korur. En son kullanılan öğeler liste başına yakın, en az kullanılanlar ise liste sonuna yakın yer alır.</li>
<li>Hash Tablosu: Anahtarlar ve bağlı listedeki düğümlerin referanslarını saklar, bu sayede herhangi bir öğeye O(1) zamanda erişim sağlanır.</li>
<li>Çalışma Mekanizması:</li>
<li>İnitializasyon: Dummy baş ve son düğümleri ile çift yönlü bir liste oluşturulur.</li>
<li>Node Ekleme ve Çıkarma: Öğelerin kolayca eklenebilmesi ve çıkarılabilmesi için yardımcı fonksiyonlar kullanılır.</li>
<li>Get ve Put İşlemleri: get işlemi, öğeyi erişildiğinde başa taşır. put işlemi, yeni bir öğe eklerken kapasiteyi aştığı takdirde en son öğeyi kaldırır.</li>
</ul>
<h2 id="code">Code</h2>
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">class</span> <span class="nc">ListNode</span><span class="p">:</span>
    <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">value</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">key</span> <span class="o">=</span> <span class="n">key</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">value</span> <span class="o">=</span> <span class="n">value</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">prev</span> <span class="o">=</span> <span class="kc">None</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">next</span> <span class="o">=</span> <span class="kc">None</span>

<span class="k">class</span> <span class="nc">LRUCache</span><span class="p">:</span>
    <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">capacity</span><span class="p">:</span> <span class="nb">int</span><span class="p">):</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">cache</span> <span class="o">=</span> <span class="p">{}</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">capacity</span> <span class="o">=</span> <span class="n">capacity</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">head</span> <span class="o">=</span> <span class="n">ListNode</span><span class="p">()</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">tail</span> <span class="o">=</span> <span class="n">ListNode</span><span class="p">()</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">head</span><span class="o">.</span><span class="n">next</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">tail</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">tail</span><span class="o">.</span><span class="n">prev</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">head</span>
    
    <span class="k">def</span> <span class="nf">removeNode</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">node</span><span class="p">):</span>
        <span class="n">prev</span><span class="p">,</span> <span class="n">nxt</span> <span class="o">=</span> <span class="n">node</span><span class="o">.</span><span class="n">prev</span><span class="p">,</span> <span class="n">node</span><span class="o">.</span><span class="n">next</span>
        <span class="n">prev</span><span class="o">.</span><span class="n">next</span><span class="p">,</span> <span class="n">nxt</span><span class="o">.</span><span class="n">prev</span> <span class="o">=</span> <span class="n">nxt</span><span class="p">,</span> <span class="n">prev</span>
    
    <span class="k">def</span> <span class="nf">addNode</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">node</span><span class="p">):</span>
        <span class="n">node</span><span class="o">.</span><span class="n">prev</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">head</span>
        <span class="n">node</span><span class="o">.</span><span class="n">next</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">head</span><span class="o">.</span><span class="n">next</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">head</span><span class="o">.</span><span class="n">next</span><span class="o">.</span><span class="n">prev</span> <span class="o">=</span> <span class="n">node</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">head</span><span class="o">.</span><span class="n">next</span> <span class="o">=</span> <span class="n">node</span>
    
    <span class="k">def</span> <span class="nf">moveToHead</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">node</span><span class="p">):</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">removeNode</span><span class="p">(</span><span class="n">node</span><span class="p">)</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">addNode</span><span class="p">(</span><span class="n">node</span><span class="p">)</span>
    
    <span class="k">def</span> <span class="nf">popTail</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="n">res</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">tail</span><span class="o">.</span><span class="n">prev</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">removeNode</span><span class="p">(</span><span class="n">res</span><span class="p">)</span>
        <span class="k">return</span> <span class="n">res</span>
    
    <span class="k">def</span> <span class="nf">get</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">key</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
        <span class="n">node</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">cache</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
        <span class="k">if</span> <span class="ow">not</span> <span class="n">node</span><span class="p">:</span>
            <span class="k">return</span> <span class="o">-</span><span class="mi">1</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">moveToHead</span><span class="p">(</span><span class="n">node</span><span class="p">)</span>
        <span class="k">return</span> <span class="n">node</span><span class="o">.</span><span class="n">value</span>
    
    <span class="k">def</span> <span class="nf">put</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">key</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span> <span class="n">value</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
        <span class="n">node</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">cache</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">key</span><span class="p">)</span>
        <span class="k">if</span> <span class="ow">not</span> <span class="n">node</span><span class="p">:</span>
            <span class="n">newNode</span> <span class="o">=</span> <span class="n">ListNode</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
            <span class="bp">self</span><span class="o">.</span><span class="n">cache</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">newNode</span>
            <span class="bp">self</span><span class="o">.</span><span class="n">addNode</span><span class="p">(</span><span class="n">newNode</span><span class="p">)</span>
            <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">cache</span><span class="p">)</span> <span class="o">&gt;</span> <span class="bp">self</span><span class="o">.</span><span class="n">capacity</span><span class="p">:</span>
                <span class="n">tail</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">popTail</span><span class="p">()</span>
                <span class="k">del</span> <span class="bp">self</span><span class="o">.</span><span class="n">cache</span><span class="p">[</span><span class="n">tail</span><span class="o">.</span><span class="n">key</span><span class="p">]</span>
        <span class="k">else</span><span class="p">:</span>
            <span class="n">node</span><span class="o">.</span><span class="n">value</span> <span class="o">=</span> <span class="n">value</span>
            <span class="bp">self</span><span class="o">.</span><span class="n">moveToHead</span><span class="p">(</span><span class="n">node</span><span class="p">)</span>


</code></pre></div><h3 id="complexity">Complexity</h3>
<ul>
<li>Time complexity (Zaman Karmaşıklığı): Her işlem O(1) zamanında çalışır çünkü doğrudan hash tablosu erişimi ve sabit zamanlı düğüm ekleme/çıkarma işlemleri kullanılır.</li>
<li>Space complexity (Alan Karmaşıklığı): O(capacity), çünkü önbellek boyutu kapasite ile sınırlıdır ve bu kapasitede düğüm ve hash girişleri saklanır.</li>
</ul>
]]></content>
		</item>
		
		<item>
			<title>Leetcode 23 Merge k Sorted Lists</title>
			<link>https://www.dincerbakkal.com/posts/leetcode023/</link>
			<pubDate>Sat, 03 Apr 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode023/</guid>
			<description>Soru You are given an array of k linked-lists lists, each linked-list is sorted in ascending order.
Merge all the linked-lists into one sorted linked-list and return it.
Örnek 1 Input: lists = [[1,4,5],[1,3,4],[2,6]] Output: [1,1,2,3,4,4,5,6] Explanation: The linked-lists are: [ 1-&amp;gt;4-&amp;gt;5, 1-&amp;gt;3-&amp;gt;4, 2-&amp;gt;6 ] merging them into one sorted list: 1-&amp;gt;1-&amp;gt;2-&amp;gt;3-&amp;gt;4-&amp;gt;4-&amp;gt;5-&amp;gt;6 Örnek 2 Input: lists = [] Output: [] Örnek 3 Input: lists = [[]] Output: [] Çözüm  &amp;ldquo;23.</description>
			<content type="html"><![CDATA[<h3 id="soru">Soru</h3>
<p>You are given an array of k linked-lists lists, each linked-list is sorted in ascending order.</p>
<p>Merge all the linked-lists into one sorted linked-list and return it.</p>
<h3 id="örnek-1">Örnek 1</h3>
<pre><code>Input: lists = [[1,4,5],[1,3,4],[2,6]]
Output: [1,1,2,3,4,4,5,6]
Explanation: The linked-lists are:
[
  1-&gt;4-&gt;5,
  1-&gt;3-&gt;4,
  2-&gt;6
]
merging them into one sorted list:
1-&gt;1-&gt;2-&gt;3-&gt;4-&gt;4-&gt;5-&gt;6
</code></pre><h3 id="örnek-2">Örnek 2</h3>
<pre><code>Input: lists = []
Output: []
</code></pre><h3 id="örnek-3">Örnek 3</h3>
<pre><code>Input: lists = [[]]
Output: []
</code></pre><h3 id="çözüm">Çözüm</h3>
<ul>
<li>&ldquo;23. Merge k Sorted Lists&rdquo; sorusu, birden fazla sıralı bağlı listenin tek bir sıralı bağlı listeye birleştirilmesini ister. Bu problem, verilen k sıralı bağlı listenin tüm elemanlarını içeren tek bir sıralı bağlı liste oluşturmayı gerektirir ve bu liste de sıralı olmalıdır.</li>
<li>Girdi: ListNode türünde k tane sıralı bağlı listenin baş düğümleri (lists).</li>
<li>Çıktı: Bu listelerin elemanlarını içeren tek bir sıralı bağlı liste.</li>
<li>Bu problem birkaç farklı yöntemle çözülebilir:</li>
<li>Min-Heap (Öncelikli Kuyruk) Kullanarak:</li>
<li>Her listenin baş düğümünü bir min-heap&rsquo;e ekleyin.</li>
<li>Heap&rsquo;ten en küçük düğümü çıkarın, sonuca ekleyin ve bu düğümün next düğümünü heap&rsquo;e ekleyin.</li>
<li>Bu işlemi tüm düğümler işlenene kadar devam ettirin.</li>
<li>İki Listeyi Birleştirme Yöntemiyle:</li>
<li>mergeTwoLists fonksiyonu kullanarak iki listeyi adım adım birleştirin.</li>
<li>Bu işlemi tüm listeler tek bir liste kalana kadar devam ettirin.</li>
<li>D&amp;C (Böl ve Yönet) Yaklaşımı:</li>
<li>Listenin ortasından bölün, iki yarıyı ayrı ayrı birleştirin.</li>
<li>İki yarının sonuçlarını tekrar birleştirin.</li>
<li>Çalışma Mekanizması:</li>
<li>Heap İnitializasyonu: İlk olarak, her listenin baş düğümü (eğer boş değilse) bir heap&rsquo;e (öncelikli kuyruk) eklenir.</li>
<li>Düğüm Çıkarma ve Ekleme: En küçük düğüm heap&rsquo;ten çıkarılır, sonuç listesine eklenir ve bu düğümün next elemanı, varsa, heap&rsquo;e eklenir.</li>
<li>Sonuç Oluşturma: Bu işlem, tüm düğümler işlenene kadar devam eder ve böylece tüm listeler tek bir sıralı liste olarak birleştirilir.</li>
</ul>
<h2 id="code-min-heap-yöntemi-kullanılarak">Code (Min-Heap Yöntemi Kullanılarak)</h2>
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="kn">from</span> <span class="nn">heapq</span> <span class="kn">import</span> <span class="n">heappush</span><span class="p">,</span> <span class="n">heappop</span>

<span class="k">class</span> <span class="nc">ListNode</span><span class="p">:</span>
    <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">val</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="nb">next</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">val</span> <span class="o">=</span> <span class="n">val</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">next</span> <span class="o">=</span> <span class="nb">next</span>

<span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">mergeKLists</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">lists</span><span class="p">):</span>
        <span class="n">head</span> <span class="o">=</span> <span class="n">point</span> <span class="o">=</span> <span class="n">ListNode</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
        <span class="n">heap</span> <span class="o">=</span> <span class="p">[]</span>
        
        <span class="c1"># Tüm listelerin baş düğümlerini heap&#39;e ekleyin</span>
        <span class="k">for</span> <span class="n">lidx</span><span class="p">,</span> <span class="n">l</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">lists</span><span class="p">):</span>
            <span class="k">if</span> <span class="n">l</span><span class="p">:</span>
                <span class="n">heappush</span><span class="p">(</span><span class="n">heap</span><span class="p">,</span> <span class="p">(</span><span class="n">l</span><span class="o">.</span><span class="n">val</span><span class="p">,</span> <span class="n">lidx</span><span class="p">,</span> <span class="n">l</span><span class="p">))</span>
        
        <span class="c1"># En küçük elemanı bul ve listeye ekle, sonra bir sonraki düğümü heap&#39;e ekle</span>
        <span class="k">while</span> <span class="n">heap</span><span class="p">:</span>
            <span class="n">val</span><span class="p">,</span> <span class="n">idx</span><span class="p">,</span> <span class="n">node</span> <span class="o">=</span> <span class="n">heappop</span><span class="p">(</span><span class="n">heap</span><span class="p">)</span>
            <span class="n">point</span><span class="o">.</span><span class="n">next</span> <span class="o">=</span> <span class="n">ListNode</span><span class="p">(</span><span class="n">val</span><span class="p">)</span>
            <span class="n">point</span> <span class="o">=</span> <span class="n">point</span><span class="o">.</span><span class="n">next</span>
            <span class="n">node</span> <span class="o">=</span> <span class="n">node</span><span class="o">.</span><span class="n">next</span>
            <span class="k">if</span> <span class="n">node</span><span class="p">:</span>
                <span class="n">heappush</span><span class="p">(</span><span class="n">heap</span><span class="p">,</span> <span class="p">(</span><span class="n">node</span><span class="o">.</span><span class="n">val</span><span class="p">,</span> <span class="n">idx</span><span class="p">,</span> <span class="n">node</span><span class="p">))</span>
        
        <span class="k">return</span> <span class="n">head</span><span class="o">.</span><span class="n">next</span>



</code></pre></div><h3 id="complexity">Complexity</h3>
<ul>
<li>Time complexity (Zaman Karmaşıklığı): O(N log k), burada N toplam düğüm sayısı, k ise liste sayısıdır. Her düğüm için heap&rsquo;e eklemek ve çıkarmak log k zaman alır.</li>
<li>Space complexity (Alan Karmaşıklığı): O(k), min-heap&rsquo;te her zaman en fazla k düğüm bulunur.</li>
</ul>
]]></content>
		</item>
		
		<item>
			<title>Leetcode 25 Reverse Nodes in k-Group</title>
			<link>https://www.dincerbakkal.com/posts/leetcode025/</link>
			<pubDate>Sat, 03 Apr 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode025/</guid>
			<description>Soru Given the head of a linked list, reverse the nodes of the list k at a time, and return the modified list.
k is a positive integer and is less than or equal to the length of the linked list. If the number of nodes is not a multiple of k then left-out nodes, in the end, should remain as it is.
You may not alter the values in the list&amp;rsquo;s nodes, only nodes themselves may be changed.</description>
			<content type="html"><![CDATA[<h3 id="soru">Soru</h3>
<p>Given the head of a linked list, reverse the nodes of the list k at a time, and return the modified list.</p>
<p>k is a positive integer and is less than or equal to the length of the linked list. If the number of nodes is not a multiple of k then left-out nodes, in the end, should remain as it is.</p>
<p>You may not alter the values in the list&rsquo;s nodes, only nodes themselves may be changed.</p>
<p>Follow-up: Can you solve the problem in O(1) extra memory space?</p>
<h3 id="örnek-1">Örnek 1</h3>
<pre><code><figure><img src="/image/025ex1.jpg"
         alt="image"/>
</figure>


Input: head = [1,2,3,4,5], k = 2
Output: [2,1,4,3,5]
</code></pre><h3 id="örnek-2">Örnek 2</h3>
<pre><code><figure><img src="/image/025ex2.jpg"
         alt="image"/>
</figure>


Input: head = [1,2,3,4,5], k = 3
Output: [3,2,1,4,5]
</code></pre><h3 id="çözüm">Çözüm</h3>
<ul>
<li>&ldquo;25. Reverse Nodes in k-Group&rdquo; sorusu, verilen bir bağlı listeyi her k düğümde gruplayarak ters çevirme işlemini gerçekleştirmenizi ister. Bu problemde, bağlı liste boyunca ilerlerken her k düğüm tersine çevrilmeli ve k&rsquo;ya tam bölünmeyen son grup olduğu gibi bırakılmalıdır.</li>
<li>Girdi: Tek yönlü bir bağlı listenin baş düğümü (head) ve bir tam sayı k.</li>
<li>Çıktı: Bağlı listenin her k düğümünde tersine çevrilmiş hali.</li>
<li>Bu problemi çözmek için, liste boyunca ilerleyip her k düğüm için ters çevirme işlemi yapabiliriz. Bunun için iki aşamalı bir yaklaşım kullanılır: ilk olarak, verilen k boyutunda bir grubun tamamının tersine çevrilebilir olup olmadığını kontrol etmek, ardından bu grubu tersine çevirmek.</li>
<li>Çalışma Mekanizması:</li>
<li>Grubun Ters Çevrilebilirliğini Kontrol Et: Her grup için, grup boyunca ilerleyip k düğüme ulaşılıp ulaşılamayacağını kontrol eder.</li>
<li>Grubu Ters Çevirme: Grup ters çevrilebilir ise, o grubu yerinde ters çevirir.</li>
<li>Listeyi Yeniden Bağla: Ters çevrilen grubun başını ve sonunu, ana listeye bağlar.</li>
<li>Sonraki Gruba Geçiş: İşlem, liste sonuna kadar veya bir grup k düğümden kısa olduğunda durdurulur.</li>
</ul>
<h2 id="code">Code</h2>
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">class</span> <span class="nc">ListNode</span><span class="p">:</span>
    <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">val</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="nb">next</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">val</span> <span class="o">=</span> <span class="n">val</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">next</span> <span class="o">=</span> <span class="nb">next</span>

<span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">reverseKGroup</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">head</span><span class="p">,</span> <span class="n">k</span><span class="p">):</span>
        <span class="c1"># Grup ters çevrilebilir mi kontrol et</span>
        <span class="k">def</span> <span class="nf">canReverse</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="n">k</span><span class="p">):</span>
            <span class="n">count</span> <span class="o">=</span> <span class="mi">0</span>
            <span class="k">while</span> <span class="n">start</span> <span class="ow">and</span> <span class="n">count</span> <span class="o">&lt;</span> <span class="n">k</span><span class="p">:</span>
                <span class="n">start</span> <span class="o">=</span> <span class="n">start</span><span class="o">.</span><span class="n">next</span>
                <span class="n">count</span> <span class="o">+=</span> <span class="mi">1</span>
            <span class="k">return</span> <span class="n">count</span> <span class="o">==</span> <span class="n">k</span>
        
        <span class="c1"># Verilen başlangıçtan itibaren k düğümü ters çevir</span>
        <span class="k">def</span> <span class="nf">reverse</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="n">k</span><span class="p">):</span>
            <span class="n">prev</span><span class="p">,</span> <span class="n">curr</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="n">start</span>
            <span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">k</span><span class="p">):</span>
                <span class="n">next_temp</span> <span class="o">=</span> <span class="n">curr</span><span class="o">.</span><span class="n">next</span>
                <span class="n">curr</span><span class="o">.</span><span class="n">next</span> <span class="o">=</span> <span class="n">prev</span>
                <span class="n">prev</span> <span class="o">=</span> <span class="n">curr</span>
                <span class="n">curr</span> <span class="o">=</span> <span class="n">next_temp</span>
            <span class="k">return</span> <span class="n">prev</span>
        
        <span class="n">dummy</span> <span class="o">=</span> <span class="n">ListNode</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">head</span><span class="p">)</span>
        <span class="n">prev_group_end</span> <span class="o">=</span> <span class="n">dummy</span>
        
        <span class="k">while</span> <span class="n">canReverse</span><span class="p">(</span><span class="n">prev_group_end</span><span class="o">.</span><span class="n">next</span><span class="p">,</span> <span class="n">k</span><span class="p">):</span>
            <span class="n">kth</span> <span class="o">=</span> <span class="n">prev_group_end</span>
            <span class="c1"># k&#39;inci düğümü bul</span>
            <span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">k</span><span class="p">):</span>
                <span class="n">kth</span> <span class="o">=</span> <span class="n">kth</span><span class="o">.</span><span class="n">next</span>
            <span class="n">group_next</span> <span class="o">=</span> <span class="n">kth</span><span class="o">.</span><span class="n">next</span>
            <span class="c1"># k düğümü ters çevir</span>
            <span class="n">new_start</span> <span class="o">=</span> <span class="n">reverse</span><span class="p">(</span><span class="n">prev_group_end</span><span class="o">.</span><span class="n">next</span><span class="p">,</span> <span class="n">k</span><span class="p">)</span>
            <span class="c1"># Ters çevrilen grubu listeyle birleştir</span>
            <span class="n">kth</span> <span class="o">=</span> <span class="n">prev_group_end</span><span class="o">.</span><span class="n">next</span>
            <span class="n">prev_group_end</span><span class="o">.</span><span class="n">next</span> <span class="o">=</span> <span class="n">new_start</span>
            <span class="n">kth</span><span class="o">.</span><span class="n">next</span> <span class="o">=</span> <span class="n">group_next</span>
            <span class="n">prev_group_end</span> <span class="o">=</span> <span class="n">kth</span>
            
        <span class="k">return</span> <span class="n">dummy</span><span class="o">.</span><span class="n">next</span>




</code></pre></div><h3 id="complexity">Complexity</h3>
<ul>
<li>Time complexity (Zaman Karmaşıklığı): O(n), burada n düğüm sayısıdır. Her düğüm birkaç kez işlenir (kontrol ve ters çevirme işlemleri).</li>
<li>Space complexity (Alan Karmaşıklığı): O(1), çünkü ek alan kullanılmaz; tüm işlemler mevcut liste üzerinde gerçekleştirilir.</li>
</ul>
]]></content>
		</item>
		
		<item>
			<title>Leetcode 287 Find the Duplicate Number</title>
			<link>https://www.dincerbakkal.com/posts/leetcode287/</link>
			<pubDate>Sat, 03 Apr 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode287/</guid>
			<description>Soru Given an array of integers nums containing n + 1 integers where each integer is in the range [1, n] inclusive.
There is only one repeated number in nums, return this repeated number.
You must solve the problem without modifying the array nums and uses only constant extra space.
Örnek 1 Input: nums = [1,3,4,2,2] Output: 2 Örnek 2 Input: nums = [3,1,3,4,2] Output: 3 Örnek 2 Input: nums = [1,1] Output: 1 Çözüm  Bir dizide tekrar eden tek bir sayıyı bulmanızı ister.</description>
			<content type="html"><![CDATA[<h3 id="soru">Soru</h3>
<p>Given an array of integers nums containing n + 1 integers where each integer is in the range [1, n] inclusive.</p>
<p>There is only one repeated number in nums, return this repeated number.</p>
<p>You must solve the problem without modifying the array nums and uses only constant extra space.</p>
<h3 id="örnek-1">Örnek 1</h3>
<pre><code>Input: nums = [1,3,4,2,2]
Output: 2
</code></pre><h3 id="örnek-2">Örnek 2</h3>
<pre><code>Input: nums = [3,1,3,4,2]
Output: 3
</code></pre><h3 id="örnek-2-1">Örnek 2</h3>
<pre><code>Input: nums = [1,1]
Output: 1
</code></pre><h3 id="çözüm">Çözüm</h3>
<ul>
<li>Bir dizide tekrar eden tek bir sayıyı bulmanızı ister. Dizide tam olarak bir sayı birden fazla kez tekrar eder ve sorunun amacı bu sayıyı bulmaktır. Dizi, 1 ile n arasındaki sayıları içerir ve dizinin uzunluğu n+1&rsquo;dir. Yani, n tane farklı sayı ve bunlardan biri tekrar eden sayı olarak verilmiştir.</li>
<li>Girdi: Tekrar eden bir sayı içeren bir tam sayı dizisi nums.</li>
<li>Çıktı: Tekrar eden sayı.</li>
<li>Bu problem birkaç farklı yöntemle çözülebilir, ancak en etkili yöntemlerden biri &ldquo;Floyd&rsquo;un Çevrim Tespiti Algoritması&rdquo; (aynı zamanda tortoise ve hare algoritması(hızlı-yavaş) olarak da bilinir) kullanmaktır. Bu yöntem, bir bağlı liste içinde döngü bulmak için genellikle kullanılır, ama dizilerde de uygulanabilir. Dizi indeksleri ve değerleri bir tür &ldquo;bağlı liste&rdquo; olarak düşünüldüğünde, dizi içinde bir çevrim tespit edilerek tekrar eden eleman bulunabilir.</li>
<li>Çalışma Mekanizması:</li>
<li>İlk Faz - Çevrim Tespiti:</li>
<li>tortoise (yavaş işaretçi) her adımda bir sonraki elemana ilerler: tortoise = nums[tortoise].</li>
<li>hare (hızlı işaretçi) her adımda iki sonraki elemana atlar: hare = nums[nums[hare]].</li>
<li>Bu iki işaretçi, dizide bir çevrim (döngü) oluşturan tekrar eden sayı nedeniyle bir noktada eşit olacaktır.</li>
<li>İkinci Faz - Çevrimin Başlangıç Noktasını Bulma:</li>
<li>Çevrim içinde bir noktada eşit olan hare ve tortoise işaretçilerinden biri dizinin başına konur.</li>
<li>Her iki işaretçi de artık birer adım ilerleyecektir. Bir sonraki buluşma noktaları, çevrimin başladığı yani tekrar eden sayının bulunduğu konum olacaktır.</li>
</ul>
<h2 id="code">Code</h2>
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">findDuplicate</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">nums</span><span class="p">):</span>
        <span class="c1"># Hare ve tortoise başlatılıyor</span>
        <span class="n">slow</span> <span class="o">=</span> <span class="n">fast</span> <span class="o">=</span> <span class="n">nums</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
        
        <span class="c1"># Hızlı ve yavaş işaretçi ilk buluşma noktasına kadar ilerletiliyor</span>
        <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
            <span class="n">slow</span> <span class="o">=</span> <span class="n">nums</span><span class="p">[</span><span class="n">slow</span><span class="p">]</span>
            <span class="n">fast</span> <span class="o">=</span> <span class="n">nums</span><span class="p">[</span><span class="n">nums</span><span class="p">[</span><span class="n">fast</span><span class="p">]]</span>
            <span class="k">if</span> <span class="n">slow</span> <span class="o">==</span> <span class="n">fast</span><span class="p">:</span>
                <span class="k">break</span>

        <span class="c1"># İkinci faz: çevrimin başlangıç noktasını bul</span>
        <span class="n">slow</span> <span class="o">=</span> <span class="n">nums</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
        <span class="k">while</span> <span class="n">slow</span> <span class="o">!=</span> <span class="n">fast</span><span class="p">:</span>
            <span class="n">slow</span> <span class="o">=</span> <span class="n">nums</span><span class="p">[</span><span class="n">slow</span><span class="p">]</span>
            <span class="n">fast</span> <span class="o">=</span> <span class="n">nums</span><span class="p">[</span><span class="n">fast</span><span class="p">]</span>

        <span class="k">return</span> <span class="n">fast</span>


</code></pre></div><h3 id="complexity">Complexity</h3>
<ul>
<li>Time complexity (Zaman Karmaşıklığı): O(n), burada n dizinin uzunluğudur. İşaretçiler diziyi yalnızca birkaç kez tarayacaktır.</li>
<li>Space complexity (Alan Karmaşıklığı): O(1), çünkü ekstra alan kullanılmadan, yalnızca birkaç işaretçi ile çözüm üretilir.</li>
</ul>
]]></content>
		</item>
		
		<item>
			<title>Leetcode 399 Evaluate Division</title>
			<link>https://www.dincerbakkal.com/posts/leetcode399/</link>
			<pubDate>Fri, 02 Apr 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode399/</guid>
			<description>You are given an array of variable pairs equations and an array of real numbers values, where equations[i] = [Ai, Bi] and values[i] represent the equation Ai / Bi = values[i]. Each Ai or Bi is a string that represents a single variable.
You are also given some queries, where queries[j] = [Cj, Dj] represents the jth query where you must find the answer for Cj / Dj = ?.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>You are given an array of variable pairs equations and an array of real numbers values, where equations[i] = [Ai, Bi] and values[i] represent the equation Ai / Bi = values[i]. Each Ai or Bi is a string that represents a single variable.</p>
<p>You are also given some queries, where queries[j] = [Cj, Dj] represents the jth query where you must find the answer for Cj / Dj = ?.</p>
<p>Return the answers to all queries. If a single answer cannot be determined, return -1.0.</p>
<p>Note: The input is always valid. You may assume that evaluating the queries will not result in division by zero and that there is no contradiction.</p>
<!-- raw HTML omitted -->
<pre><code>Input: equations = [[&quot;a&quot;,&quot;b&quot;],[&quot;b&quot;,&quot;c&quot;]], values = [2.0,3.0], queries = [[&quot;a&quot;,&quot;c&quot;],[&quot;b&quot;,&quot;a&quot;],[&quot;a&quot;,&quot;e&quot;],[&quot;a&quot;,&quot;a&quot;],[&quot;x&quot;,&quot;x&quot;]]
Output: [6.00000,0.50000,-1.00000,1.00000,-1.00000]
Explanation: 
Given: a / b = 2.0, b / c = 3.0
queries are: a / c = ?, b / a = ?, a / e = ?, a / a = ?, x / x = ?
return: [6.0, 0.5, -1.0, 1.0, -1.0 ]

</code></pre><!-- raw HTML omitted -->
<pre><code>Input: equations = [[&quot;a&quot;,&quot;b&quot;],[&quot;b&quot;,&quot;c&quot;],[&quot;bc&quot;,&quot;cd&quot;]], values = [1.5,2.5,5.0], queries = [[&quot;a&quot;,&quot;c&quot;],[&quot;c&quot;,&quot;b&quot;],[&quot;bc&quot;,&quot;cd&quot;],[&quot;cd&quot;,&quot;bc&quot;]]
Output: [3.75000,0.40000,5.00000,0.20000]

</code></pre><!-- raw HTML omitted -->
<pre><code>Input: equations = [[&quot;a&quot;,&quot;b&quot;]], values = [0.5], queries = [[&quot;a&quot;,&quot;b&quot;],[&quot;b&quot;,&quot;a&quot;],[&quot;a&quot;,&quot;c&quot;],[&quot;x&quot;,&quot;y&quot;]]
Output: [0.50000,2.00000,-1.00000,-1.00000]

</code></pre><!-- raw HTML omitted -->
<ul>
<li>Çözülecek</li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python">
</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 238 Product of Array Except Self</title>
			<link>https://www.dincerbakkal.com/posts/leetcode238/</link>
			<pubDate>Thu, 01 Apr 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode238/</guid>
			<description>Soru Given an integer array nums, return an array answer such that answer[i] is equal to the product of all the elements of nums except nums[i].
The product of any prefix or suffix of nums is guaranteed to fit in a 32-bit integer.
You must write an algorithm that runs in O(n) time and without using the division operation.
Follow up: Can you solve the problem in O(1) extra space complexity?</description>
			<content type="html"><![CDATA[<h3 id="soru">Soru</h3>
<p>Given an integer array nums, return an array answer such that answer[i] is equal to the product of all the elements of nums except nums[i].</p>
<p>The product of any prefix or suffix of nums is guaranteed to fit in a 32-bit integer.</p>
<p>You must write an algorithm that runs in O(n) time and without using the division operation.</p>
<p>Follow up: Can you solve the problem in O(1) extra space complexity? (The output array does not count as extra space for space complexity analysis.)</p>
<h3 id="örnek-1">Örnek 1</h3>
<pre><code>Input: nums = [1,2,3,4]
Output: [24,12,8,6]
</code></pre><h3 id="örnek-2">Örnek 2</h3>
<pre><code>Input: nums = [-1,1,0,-3,3]
Output: [0,0,9,0,0]
</code></pre><h3 id="çözüm">Çözüm</h3>
<ul>
<li>Verilen bir dizideki tüm elemanların kendisi hariç diğer tüm elemanların çarpımını hesaplamanızı gerektiren bir problem. Sorunun kilit noktası, bölme işlemi kullanmadan ve O(n) zaman karmaşıklığında çözüm üretmek.:D</li>
<li>Çözüm, genellikle iki geçişli bir yaklaşım kullanarak hesaplanabilir:</li>
<li>İlk Geçiş (Soldan Sağa): Bu adımda, her eleman için solundaki tüm elemanların çarpımını hesaplayıp bir sonuç dizisine kaydedersiniz.</li>
<li>İkinci Geçiş (Sağdan Sola): Bu adımda, her eleman için sağında kalan tüm elemanların çarpımını hesaplayıp, bu değeri ilk geçişten elde edilen sonuçla çarparak güncellersiniz.</li>
</ul>
<h2 id="code">Code</h2>
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python">    <span class="k">def</span> <span class="nf">productExceptSelf</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">nums</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">]:</span>
        <span class="n">n</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">nums</span><span class="p">)</span>
        <span class="n">answer</span> <span class="o">=</span> <span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">*</span> <span class="n">n</span>
    <span class="c1"># İlk geçiş: Her bir eleman için, solundaki tüm elemanların çarpımını hesapla</span>
        <span class="n">left_product</span> <span class="o">=</span> <span class="mi">1</span>
        <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">n</span><span class="p">):</span>
            <span class="n">answer</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="n">left_product</span>
            <span class="n">left_product</span> <span class="o">*=</span> <span class="n">nums</span><span class="p">[</span><span class="n">i</span><span class="p">]</span>
    <span class="c1"># İkinci geçiş: Her bir eleman için, sağ tarafındaki tüm elemanların çarpımını hesapla</span>
        <span class="n">right_product</span> <span class="o">=</span> <span class="mi">1</span>
        <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">n</span> <span class="o">-</span> <span class="mi">1</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">):</span>
            <span class="n">answer</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">*=</span> <span class="n">right_product</span>
            <span class="n">right_product</span> <span class="o">*=</span> <span class="n">nums</span><span class="p">[</span><span class="n">i</span><span class="p">]</span>
                    
        <span class="k">return</span> <span class="n">answer</span>

</code></pre></div><h3 id="complexity">Complexity</h3>
<ul>
<li>Time complexity (Zaman Karmaşıklığı): Her bir eleman iki kez ziyaret edilir: bir kez soldan sağa ve bir kez sağdan sola. Bu nedenle, çözümün zaman karmaşıklığı O(n)&lsquo;dir, burada n dizinin boyutudur.</li>
<li>Space complexity (Alan Karmaşıklığı): Çözümde, girdi dizisinden başka yalnızca sonuç dizisi için yer ayrılır. Bu yüzden, alan karmaşıklığı O(n) olarak değerlendirilir.</li>
</ul>
]]></content>
		</item>
		
		<item>
			<title>Leetcode 169 Majority Element</title>
			<link>https://www.dincerbakkal.com/posts/leetcode169/</link>
			<pubDate>Mon, 29 Mar 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode169/</guid>
			<description>Given an array nums of size n, return the majority element.
The majority element is the element that appears more than ⌊n / 2⌋ times. You may assume that the majority element always exists in the array.
Input: nums = [3,2,3] Output: 3 Input: nums = [2,2,1,1,1,2,2] Output: 2  Verilen listede,listedeki eleman sayısının yarısından fazla tekrar eden sayıyı bulmamız isteniyor. Bir dict veri yapısı kullanarak problemi çözebiliriz. num_freg dict yapısının içinde sayıları ve liste içinde kaç kere geçtiklerini tutarız.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>Given an array nums of size n, return the majority element.</p>
<p>The majority element is the element that appears more than ⌊n / 2⌋ times. You may assume that the majority element always exists in the array.</p>
<!-- raw HTML omitted -->
<pre><code>Input: nums = [3,2,3]
Output: 3
</code></pre><!-- raw HTML omitted -->
<pre><code>Input: nums = [2,2,1,1,1,2,2]
Output: 2
</code></pre><!-- raw HTML omitted -->
<ul>
<li>Verilen listede,listedeki eleman sayısının yarısından fazla tekrar eden sayıyı bulmamız isteniyor.</li>
<li>Bir dict veri yapısı kullanarak problemi çözebiliriz.</li>
<li>num_freg dict yapısının içinde sayıları ve liste içinde kaç kere geçtiklerini tutarız.</li>
<li>Daha sonrada bu değer listedeki eleman sayısının yarısından fazla ise bu sayıyı döneriz.</li>
</ul>
<!-- raw HTML omitted -->
<pre><code>dict.get(key, default=None)
Parameters
key − This is the Key to be searched in the dictionary.
default − This is the Value to be returned in case key does not exist.
</code></pre><!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python">    <span class="k">def</span> <span class="nf">majorityElement</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">nums</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
        <span class="n">num_freg</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">()</span>
        <span class="k">for</span> <span class="n">num</span> <span class="ow">in</span> <span class="n">nums</span><span class="p">:</span>
            <span class="n">num_freg</span><span class="p">[</span><span class="n">num</span><span class="p">]</span> <span class="o">=</span> <span class="n">num_freg</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">num</span><span class="p">,</span><span class="mi">0</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1</span>
            <span class="k">if</span> <span class="n">num_freg</span><span class="p">[</span><span class="n">num</span><span class="p">]</span> <span class="o">&gt;</span> <span class="nb">len</span><span class="p">(</span><span class="n">nums</span><span class="p">)</span><span class="o">//</span><span class="mi">2</span><span class="p">:</span>
                <span class="k">return</span> <span class="n">num</span>
</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 1065 Index Pairs of a String</title>
			<link>https://www.dincerbakkal.com/posts/leetcode1065/</link>
			<pubDate>Sun, 28 Mar 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode1065/</guid>
			<description>Given a text string and words (a list of strings), return all index pairs [i, j] so that the substring text[i]…text[j] is in the list of words.
Input: text = “thestoryofleetcodeandme”, words = [“story”,”fleet”,”leetcode”] Output: [[3,7],[9,13],[10,17]] Input: text = “ababa”, words = [“aba”,”ab”] Output: [[0,1],[0,2],[2,3],[2,4]] Explanation: Notice that matches can overlap, see “aba” is found in [0,2] and [2,4].  Çözülecek  def indexPairs(self, text, words): ans = [] for word in words: temp = text ind = temp.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>Given a text string and words (a list of strings), return all index pairs [i, j] so that the substring text[i]…text[j] is in the list of words.</p>
<!-- raw HTML omitted -->
<pre><code>Input: text = “thestoryofleetcodeandme”, words = [“story”,”fleet”,”leetcode”]
Output: [[3,7],[9,13],[10,17]]
</code></pre><!-- raw HTML omitted -->
<pre><code>Input: text = “ababa”, words = [“aba”,”ab”]
Output: [[0,1],[0,2],[2,3],[2,4]]
Explanation: 
Notice that matches can overlap, see “aba” is found in [0,2] and [2,4].
</code></pre><!-- raw HTML omitted -->
<ul>
<li>Çözülecek</li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python">    <span class="k">def</span> <span class="nf">indexPairs</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">text</span><span class="p">,</span> <span class="n">words</span><span class="p">):</span>
        <span class="n">ans</span> <span class="o">=</span> <span class="p">[]</span>
        <span class="k">for</span> <span class="n">word</span> <span class="ow">in</span> <span class="n">words</span><span class="p">:</span>
            <span class="n">temp</span> <span class="o">=</span> <span class="n">text</span>
            <span class="n">ind</span> <span class="o">=</span> <span class="n">temp</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">word</span><span class="p">)</span>
            <span class="n">count</span> <span class="o">=</span> <span class="mi">0</span>
            <span class="k">while</span> <span class="n">ind</span> <span class="o">!=</span> <span class="o">-</span><span class="mi">1</span><span class="p">:</span>
                <span class="n">ans</span><span class="o">.</span><span class="n">append</span><span class="p">([</span><span class="n">ind</span><span class="p">,</span> <span class="n">ind</span><span class="o">+</span><span class="nb">len</span><span class="p">(</span><span class="n">word</span><span class="p">)</span><span class="o">-</span><span class="mi">1</span><span class="p">])</span>
                <span class="n">ind</span> <span class="o">=</span> <span class="n">temp</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">word</span><span class="p">,</span> <span class="n">ind</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span>
        <span class="k">return</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">ans</span><span class="p">)</span>
</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 720 Longest Word in Dictionary</title>
			<link>https://www.dincerbakkal.com/posts/leetcode720/</link>
			<pubDate>Sun, 28 Mar 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode720/</guid>
			<description>Given an array of strings words representing an English Dictionary, return the longest word in words that can be built one character at a time by other words in words.
If there is more than one possible answer, return the longest word with the smallest lexicographical order. If there is no answer, return the empty string.
Input: words = [&amp;quot;w&amp;quot;,&amp;quot;wo&amp;quot;,&amp;quot;wor&amp;quot;,&amp;quot;worl&amp;quot;,&amp;quot;world&amp;quot;] Output: &amp;quot;world&amp;quot; Explanation: The word &amp;quot;world&amp;quot; can be built one character at a time by &amp;quot;w&amp;quot;, &amp;quot;wo&amp;quot;, &amp;quot;wor&amp;quot;, and &amp;quot;worl&amp;quot;.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>Given an array of strings words representing an English Dictionary, return the longest word in words that can be built one character at a time by other words in words.</p>
<p>If there is more than one possible answer, return the longest word with the smallest lexicographical order. If there is no answer, return the empty string.</p>
<!-- raw HTML omitted -->
<pre><code>Input: words = [&quot;w&quot;,&quot;wo&quot;,&quot;wor&quot;,&quot;worl&quot;,&quot;world&quot;]
Output: &quot;world&quot;
Explanation: The word &quot;world&quot; can be built one character at a time by &quot;w&quot;, &quot;wo&quot;, &quot;wor&quot;, and &quot;worl&quot;.
</code></pre><!-- raw HTML omitted -->
<pre><code>Input: words = [&quot;a&quot;,&quot;banana&quot;,&quot;app&quot;,&quot;appl&quot;,&quot;ap&quot;,&quot;apply&quot;,&quot;apple&quot;]
Output: &quot;apple&quot;
Explanation: Both &quot;apply&quot; and &quot;apple&quot; can be built from other words in the dictionary. However, &quot;apple&quot; is lexicographically smaller than &quot;apply&quot;.
</code></pre><!-- raw HTML omitted -->
<ul>
<li>Burada bize kelimelerden oluşan bir liste veriliyor.Her kelimeden bir harf alıp ekleyerek listedeki en uzun kelimeyi bulmamız isteniyor.</li>
<li>Bunun için pythonda set kullanarak bir liste oluşturabiliriz.Set kullandığımız taktirde aynı kelimeden iki tane bu listeye giremeyecektir.</li>
<li>Daha sonra sorted metodu ile kelimeleri sıralarız.</li>
<li>Sıralanmış kelimeler içinde dolaşarak yeni kelimenin(word) son karakteri olmayan halini örneğin kelimemiz apple ise appl kelimesini kendi valid listemizde ararız.Eğer listemizde appl var ise apple kelimemizi listemize ekleriz.</li>
<li>Bu sayede elimizde sıralı olarak ['', &lsquo;a&rsquo;, &lsquo;ap&rsquo;, &lsquo;app&rsquo;, &lsquo;appl&rsquo;, &lsquo;apple&rsquo;, &lsquo;apply&rsquo;] bir liste oluşur.</li>
<li>Bu listeyi de uzunluğa göre sıralarsak max alırsak apple elde ederiz.</li>
<li>sorted fonksiyonu t.c. nlogn dir.for döngüsüde n dir. n + nlogn = nlogn</li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python">    <span class="k">def</span> <span class="nf">longestWord</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">words</span><span class="p">):</span>
        <span class="n">valid</span> <span class="o">=</span> <span class="nb">set</span><span class="p">([</span><span class="s1">&#39;&#39;</span><span class="p">])</span>
        <span class="k">for</span> <span class="n">word</span> <span class="ow">in</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">words</span><span class="p">):</span>
            <span class="k">if</span> <span class="n">word</span><span class="p">[:</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="ow">in</span> <span class="n">valid</span><span class="p">:</span>
                <span class="n">valid</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">word</span><span class="p">)</span>
        <span class="k">return</span> <span class="nb">max</span><span class="p">(</span><span class="nb">sorted</span><span class="p">(</span><span class="n">valid</span><span class="p">),</span> <span class="n">key</span><span class="o">=</span><span class="nb">len</span><span class="p">)</span>
</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 844 Backspace String Compare</title>
			<link>https://www.dincerbakkal.com/posts/leetcode844/</link>
			<pubDate>Sat, 27 Mar 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode844/</guid>
			<description>Given two strings s and t, return true if they are equal when both are typed into empty text editors. &amp;lsquo;#&amp;rsquo; means a backspace character.
Note that after backspacing an empty text, the text will continue empty.
Follow-up: Can you solve it in O(n) time and O(1) space?
Input: s = &amp;quot;ab#c&amp;quot;, t = &amp;quot;ad#c&amp;quot; Output: true Explanation: Both s and t become &amp;quot;ac&amp;quot;. Input: s = &amp;quot;ab##&amp;quot;, t = &amp;quot;c#d#&amp;quot; Output: true Explanation: Both s and t become &amp;quot;&amp;quot;.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>Given two strings s and t, return true if they are equal when both are typed into empty text editors. &lsquo;#&rsquo; means a backspace character.</p>
<p>Note that after backspacing an empty text, the text will continue empty.</p>
<p>Follow-up: Can you solve it in O(n) time and O(1) space?</p>
<!-- raw HTML omitted -->
<pre><code>Input: s = &quot;ab#c&quot;, t = &quot;ad#c&quot;
Output: true
Explanation: Both s and t become &quot;ac&quot;.
</code></pre><!-- raw HTML omitted -->
<pre><code>Input: s = &quot;ab##&quot;, t = &quot;c#d#&quot;
Output: true
Explanation: Both s and t become &quot;&quot;.
</code></pre><!-- raw HTML omitted -->
<pre><code>Input: s = &quot;a##c&quot;, t = &quot;#a#c&quot;
Output: true
Explanation: Both s and t become &quot;c&quot;.
</code></pre><!-- raw HTML omitted -->
<ul>
<li>Burada bize iki string veriliyor.# işareti kendinden önceki karakterin silinmesi anlamına geliyor.Bu durumda bu iki stringin silme işlemleri tamamlandıktan son hali eşit ise True değil ise False dönmemizi istiyor.</li>
<li>Burada izlenecek yol Stack yapısını kullanmak olabilir. s1 ve s2 adında iki liste oluşturulur.</li>
<li>İlk string içinde dolaşılırken karakter &lsquo;#&rsquo; ve listede eleman varsa listeden son eleman çıkarılır.Karakter &lsquo;#&rsquo; ve liste boş ise devam edilir.Karakter &lsquo;#&rsquo; farklı ise elimizdeki karakter listeye eklenir.</li>
<li>Bu işlem iki string içinde yapılıp s1 ve s2 karşılaştırılır.</li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python">   <span class="k">def</span> <span class="nf">backspaceCompare</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">S</span><span class="p">,</span> <span class="n">T</span><span class="p">):</span>
        <span class="n">s1</span><span class="p">,</span> <span class="n">s2</span> <span class="o">=</span> <span class="p">[],</span> <span class="p">[]</span>
        <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">S</span><span class="p">)):</span>
            <span class="k">if</span> <span class="n">S</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">==</span> <span class="s1">&#39;#&#39;</span> <span class="ow">and</span> <span class="n">s1</span><span class="p">:</span>
                <span class="n">s1</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
            <span class="k">elif</span> <span class="n">S</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">==</span> <span class="s1">&#39;#&#39;</span><span class="p">:</span>
                <span class="k">continue</span>
            <span class="k">else</span><span class="p">:</span>
                <span class="n">s1</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">S</span><span class="p">[</span><span class="n">i</span><span class="p">])</span>
        
        <span class="k">for</span> <span class="n">j</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">T</span><span class="p">)):</span>
            <span class="k">if</span> <span class="n">T</span><span class="p">[</span><span class="n">j</span><span class="p">]</span> <span class="o">==</span> <span class="s1">&#39;#&#39;</span> <span class="ow">and</span> <span class="n">s2</span><span class="p">:</span>
                <span class="n">s2</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
            <span class="k">elif</span> <span class="n">T</span><span class="p">[</span><span class="n">j</span><span class="p">]</span> <span class="o">==</span> <span class="s1">&#39;#&#39;</span><span class="p">:</span>
                <span class="k">continue</span>
            <span class="k">else</span><span class="p">:</span>
                <span class="n">s2</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">T</span><span class="p">[</span><span class="n">j</span><span class="p">])</span>
        
        <span class="k">return</span> <span class="n">s1</span> <span class="o">==</span> <span class="n">s2</span>
</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 001 Two Sum</title>
			<link>https://www.dincerbakkal.com/posts/leetcode001/</link>
			<pubDate>Fri, 26 Mar 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode001/</guid>
			<description>Soru Given an array of integers nums and an integer target, return indices of the two numbers such that they add up to target.
You may assume that each input would have exactly one solution, and you may not use the same element twice.
You can return the answer in any order.
Follow-up: Can you come up with an algorithm that is less than O(n2) time complexity?
Örnek 1 Input: nums = [2,7,11,15], target = 9 Output: [0,1] Output: Because nums[0] + nums[1] == 9, we return [0, 1].</description>
			<content type="html"><![CDATA[<h3 id="soru">Soru</h3>
<p>Given an array of integers nums and an integer target, return indices of the two numbers such that they add up to target.</p>
<p>You may assume that each input would have exactly one solution, and you may not use the same element twice.</p>
<p>You can return the answer in any order.</p>
<p>Follow-up: Can you come up with an algorithm that is less than O(n2) time complexity?</p>
<h3 id="örnek-1">Örnek 1</h3>
<pre><code>Input: nums = [2,7,11,15], target = 9
Output: [0,1]
Output: Because nums[0] + nums[1] == 9, we return [0, 1].
</code></pre><h3 id="örnek-2">Örnek 2</h3>
<pre><code>Input: nums = [3,2,4], target = 6
Output: [1,2]
</code></pre><h3 id="örnek-3">Örnek 3</h3>
<pre><code>Input: nums = [3,3], target = 6
Output: [0,1]
</code></pre><h3 id="çözüm">Çözüm</h3>
<ul>
<li>Burada bize bir liste ve bir sayı veriliyor.Listedeki 2 sayının toplamı bu sayıya(target) eşitmiş.Bizden bu 2 sayının indexleri isteniyor.</li>
<li>Basit bir çözüm, her sayı için diğer tüm sayıları kontrol ederek doğru çifti bulmaktır. Ancak bu yaklaşımın zaman karmaşıklığı O(n^2)&lsquo;dir, bu da büyük veri setleri için uygun olmayabilir.</li>
<li>Ama sorunun devamında bizden T.C. o(n) olması istenmektedir.</li>
<li>Daha etkili bir çözüm yöntemi, bir hash table kullanmaktır. Hash table (veya Python&rsquo;da dict), işlemleri ortalama O(1) zamanda yapmanıza olanak tanır, bu da bu problem için çok uygundur.</li>
<li>Bu çözümde, dizideki her eleman için, hedef sayıdan o elemanı çıkardığınızda geriye kalan değerin daha önce dizide karşılaşıp karşılaşmadığını kontrol edersiniz. Eğer karşılaşmışsanız, bu iki sayının toplamı hedef sayıya eşit olduğu anlamına gelir ve bu sayıların indekslerini döndürürsünüz. Bu yöntem, her elemanı yalnızca bir kez kontrol ettiği ve hash table ile hızlı bir şekilde geri kalan değeri sorguladığı için O(n) zaman karmaşıklığına sahiptir.</li>
</ul>
<h2 id="code">Code</h2>
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python">   <span class="k">def</span> <span class="nf">twoSum</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">nums</span><span class="p">,</span> <span class="n">target</span><span class="p">):</span>
      <span class="n">required</span> <span class="o">=</span> <span class="p">{}</span>
      <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">nums</span><span class="p">)):</span>
         <span class="k">if</span> <span class="n">target</span> <span class="o">-</span> <span class="n">nums</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="ow">in</span> <span class="n">required</span><span class="p">:</span>
            <span class="k">return</span> <span class="p">[</span><span class="n">required</span><span class="p">[</span><span class="n">target</span> <span class="o">-</span> <span class="n">nums</span><span class="p">[</span><span class="n">i</span><span class="p">]],</span><span class="n">i</span><span class="p">]</span>
         <span class="k">else</span><span class="p">:</span>
            <span class="n">required</span><span class="p">[</span><span class="n">nums</span><span class="p">[</span><span class="n">i</span><span class="p">]]</span><span class="o">=</span><span class="n">i</span>
</code></pre></div><h3 id="complexity">Complexity</h3>
<ul>
<li>
<p>Zaman Karmaşıklığı (Time Complexity): Bu yöntemde, dizinin her elemanı sırasıyla incelenir. Her eleman için, hedef sayıdan çıkarıldığında kalan değer hash table&rsquo;da zaten var mı diye kontrol edilir. Bu kontrol işlemi hash table kullanıldığı için ortalama O(1) zaman alır. Tüm dizi bir kez döngüden geçirildiğinden, bu çözümün zaman karmaşıklığı O(n) olur, burada n dizinin uzunluğudur. &lt;/</p>
</li>
<li>
<p>Alan Karmaşıklığı (Space Complexity): Bu çözümde, her bir dizi elemanını ve onun indeksini bir hash table&rsquo;da saklamamız gerekiyor. En kötü durumda, yani çözümü bulana kadar tüm elemanları hash table&rsquo;a eklememiz gerektiğinde, hash table&rsquo;ın boyutu n elemana kadar büyüyebilir. Bu nedenle, bu çözümün alan karmaşıklığı O(n) olur.</p>
</li>
</ul>
]]></content>
		</item>
		
		<item>
			<title>Leetcode 977 Squares of a Sorted Array</title>
			<link>https://www.dincerbakkal.com/posts/leetcode977/</link>
			<pubDate>Fri, 26 Mar 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode977/</guid>
			<description>Given an integer array nums sorted in non-decreasing order, return an array of the squares of each number sorted in non-decreasing order.
Follow up: Squaring each element and sorting the new array is very trivial, could you find an O(n) solution using a different approach?
Input: nums = [-4,-1,0,3,10] Output: [0,1,9,16,100] Explanation: After squaring, the array becomes [16,1,0,9,100]. After sorting, it becomes [0,1,9,16,100]. Input: nums = [-7,-3,2,3,11] Output: [4,9,9,49,121]  Burada bir liste veriliyor ve listenin karelerinin küçükten büyüğe sıralanmış bir şekilde liste şeklinde dönülmesi isteniyor.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>Given an integer array nums sorted in non-decreasing order, return an array of the squares of each number sorted in non-decreasing order.</p>
<p>Follow up: Squaring each element and sorting the new array is very trivial, could you find an O(n) solution using a different approach?</p>
<!-- raw HTML omitted -->
<pre><code>Input: nums = [-4,-1,0,3,10]
Output: [0,1,9,16,100]
Explanation: After squaring, the array becomes [16,1,0,9,100].
After sorting, it becomes [0,1,9,16,100].
</code></pre><!-- raw HTML omitted -->
<pre><code>Input: nums = [-7,-3,2,3,11]
Output: [4,9,9,49,121]
</code></pre><!-- raw HTML omitted -->
<ul>
<li>Burada bir liste  veriliyor ve listenin karelerinin küçükten büyüğe sıralanmış bir şekilde liste şeklinde dönülmesi isteniyor.</li>
<li>İşi karmaşıklaştıran kısım eğer verilen listenin içinde negatif bir sayı varsa sıranın değişmesi gerekir.</li>
<li>Bu durumda two pointers yöntemini kullanabiliriz.Bir pointer listenin başından diğeri ise listenin sonundan başlar.Liste başı ve sonundaki sayının mutlak değerlerini alır ve karşılaştırırız.Hangisi büyük ise onun karesini alır yeni listemizin sonuna koyarız.Hangi pointerdaki sayıyı koyduysak onu bir kaydırırız.Bu şekilde tüm listeyi dolaşırız.</li>
</ul>
<figure><img src="/image/977.png"
         alt="image"/>
</figure>

<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">def</span> <span class="nf">sortedSquares</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">A</span><span class="p">):</span>
    <span class="n">answer</span> <span class="o">=</span> <span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">*</span> <span class="nb">len</span><span class="p">(</span><span class="n">A</span><span class="p">)</span>
    <span class="n">l</span><span class="p">,</span> <span class="n">r</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">A</span><span class="p">)</span> <span class="o">-</span> <span class="mi">1</span>
    <span class="k">while</span> <span class="n">l</span> <span class="o">&lt;=</span> <span class="n">r</span><span class="p">:</span>
        <span class="n">left</span><span class="p">,</span> <span class="n">right</span> <span class="o">=</span> <span class="nb">abs</span><span class="p">(</span><span class="n">A</span><span class="p">[</span><span class="n">l</span><span class="p">]),</span> <span class="nb">abs</span><span class="p">(</span><span class="n">A</span><span class="p">[</span><span class="n">r</span><span class="p">])</span>
        <span class="k">if</span> <span class="n">left</span> <span class="o">&gt;</span> <span class="n">right</span><span class="p">:</span>
            <span class="n">answer</span><span class="p">[</span><span class="n">r</span> <span class="o">-</span> <span class="n">l</span><span class="p">]</span> <span class="o">=</span> <span class="n">left</span> <span class="o">*</span> <span class="n">left</span>
            <span class="n">l</span> <span class="o">+=</span> <span class="mi">1</span>
        <span class="k">else</span><span class="p">:</span>
            <span class="n">answer</span><span class="p">[</span><span class="n">r</span> <span class="o">-</span> <span class="n">l</span><span class="p">]</span> <span class="o">=</span> <span class="n">right</span> <span class="o">*</span> <span class="n">right</span>
            <span class="n">r</span> <span class="o">-=</span> <span class="mi">1</span>
    <span class="k">return</span> <span class="n">answer</span>
</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 226 Invert Binary Tree</title>
			<link>https://www.dincerbakkal.com/posts/leetcode226/</link>
			<pubDate>Thu, 25 Mar 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode226/</guid>
			<description>Soru Given the root of a binary tree, invert the tree, and return its root.
Örnek 1  Input: root = [4,2,7,1,3,6,9] Output: [4,7,2,9,6,3,1] Örnek 2  Input: root = [2,1,3] Output: [2,3,1] Örnek 3 Input: root = [] Output: [] Çözüm DFS  &amp;ldquo;226. Invert Binary Tree&amp;rdquo; sorusu, bir ikili ağacı tersine çevirmenizi ister. Bu problemde, verilen bir ikili ağacın tüm alt ağaçlarını yer değiştirerek ters çevirmeniz gerekiyor; yani, her düğümün sol çocuğu sağ çocuğuyla ve sağ çocuğu sol çocuğuyla yer değiştiriyor.</description>
			<content type="html"><![CDATA[<h3 id="soru">Soru</h3>
<p>Given the root of a binary tree, invert the tree, and return its root.</p>
<h3 id="örnek-1">Örnek 1</h3>
<figure><img src="/image/invert1-tree.jpg"
         alt="image"/>
</figure>

<pre><code>Input: root = [4,2,7,1,3,6,9]
Output: [4,7,2,9,6,3,1]
</code></pre><h3 id="örnek-2">Örnek 2</h3>
<figure><img src="/image/invert2-tree.jpg"
         alt="image"/>
</figure>

<pre><code>Input: root = [2,1,3]
Output: [2,3,1]
</code></pre><h3 id="örnek-3">Örnek 3</h3>
<pre><code>Input: root = []
Output: []
</code></pre><h3 id="çözüm-dfs">Çözüm DFS</h3>
<ul>
<li>&ldquo;226. Invert Binary Tree&rdquo; sorusu, bir ikili ağacı tersine çevirmenizi ister. Bu problemde, verilen bir ikili ağacın tüm alt ağaçlarını yer değiştirerek ters çevirmeniz gerekiyor; yani, her düğümün sol çocuğu sağ çocuğuyla ve sağ çocuğu sol çocuğuyla yer değiştiriyor. Bu işlem, ağacın en üst düzeyinden en alt düzeyine kadar rekürsif olarak uygulanır.</li>
<li>Girdi: İkili bir ağacın kök düğümü (root).</li>
<li>Çıktı: Aynı ikili ağacın tersine çevrilmiş hali.</li>
<li>Bu problem genellikle özyinelemeli (recursive) veya yinelemeli (iterative) yöntemler kullanılarak çözülür. Her iki yöntem de ağacın her düğümünü ziyaret eder ve sol ve sağ çocukları yer değiştirir.</li>
<li>Çalışma Mekanizması:</li>
<li>Özyinelemeli Yöntem(DFS): Her düğüm için, o düğümün sol ve sağ çocukları yer değiştirilir ve işlem rekürsif olarak alt ağaçlara uygulanır.</li>
<li>Yinelemeli Yöntem (BFS): Bir kuyruk kullanılarak ağaç seviye seviye ziyaret edilir ve her düğümde çocuklar yer değiştirilir.</li>
</ul>
<h2 id="code-özyinelemelidfs">Code Özyinelemeli(DFS)</h2>
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python">    <span class="k">class</span> <span class="nc">TreeNode</span><span class="p">:</span>
    <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">val</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">left</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">right</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">val</span> <span class="o">=</span> <span class="n">val</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">left</span> <span class="o">=</span> <span class="n">left</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">right</span> <span class="o">=</span> <span class="n">right</span>

<span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">invertTree</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">root</span><span class="p">):</span>
        <span class="k">if</span> <span class="ow">not</span> <span class="n">root</span><span class="p">:</span>
            <span class="k">return</span> <span class="kc">None</span>
        <span class="c1"># Sol ve sağ alt ağaçları yer değiştir</span>
        <span class="n">root</span><span class="o">.</span><span class="n">left</span><span class="p">,</span> <span class="n">root</span><span class="o">.</span><span class="n">right</span> <span class="o">=</span> <span class="n">root</span><span class="o">.</span><span class="n">right</span><span class="p">,</span> <span class="n">root</span><span class="o">.</span><span class="n">left</span>
        <span class="c1"># Rekürsif olarak sol ve sağ alt ağaçları ters çevir</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">invertTree</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">left</span><span class="p">)</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">invertTree</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">right</span><span class="p">)</span>
        <span class="k">return</span> <span class="n">root</span>

</code></pre></div><h2 id="code-yinelemeli-breadth-first-search---bfs">Code Yinelemeli (Breadth-First Search - BFS)</h2>
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="kn">from</span> <span class="nn">collections</span> <span class="kn">import</span> <span class="n">deque</span>

<span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">invertTree</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">root</span><span class="p">):</span>
        <span class="k">if</span> <span class="ow">not</span> <span class="n">root</span><span class="p">:</span>
            <span class="k">return</span> <span class="kc">None</span>
        <span class="n">queue</span> <span class="o">=</span> <span class="n">deque</span><span class="p">([</span><span class="n">root</span><span class="p">])</span>
        <span class="k">while</span> <span class="n">queue</span><span class="p">:</span>
            <span class="n">current</span> <span class="o">=</span> <span class="n">queue</span><span class="o">.</span><span class="n">popleft</span><span class="p">()</span>
            <span class="c1"># Mevcut düğümün çocuklarını yer değiştir</span>
            <span class="n">current</span><span class="o">.</span><span class="n">left</span><span class="p">,</span> <span class="n">current</span><span class="o">.</span><span class="n">right</span> <span class="o">=</span> <span class="n">current</span><span class="o">.</span><span class="n">right</span><span class="p">,</span> <span class="n">current</span><span class="o">.</span><span class="n">left</span>
            <span class="c1"># Çocukları sıraya ekle</span>
            <span class="k">if</span> <span class="n">current</span><span class="o">.</span><span class="n">left</span><span class="p">:</span>
                <span class="n">queue</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">current</span><span class="o">.</span><span class="n">left</span><span class="p">)</span>
            <span class="k">if</span> <span class="n">current</span><span class="o">.</span><span class="n">right</span><span class="p">:</span>
                <span class="n">queue</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">current</span><span class="o">.</span><span class="n">right</span><span class="p">)</span>
        <span class="k">return</span> <span class="n">root</span>


</code></pre></div><h3 id="complexity">Complexity</h3>
<ul>
<li>Time complexity (Zaman Karmaşıklığı): Her iki yöntem için de O(n), burada n ağaçtaki düğüm sayısıdır. Her düğüm bir kez işlenir.</li>
<li>Space complexity (Alan Karmaşıklığı):</li>
<li>Özyinelemeli için O(h), burada h ağacın yüksekliği (maksimum derinlik). Çağrı yığını bu kadar alan kullanır.</li>
<li>Yinelemeli (BFS) için O(w), burada w ağacın en geniş seviyesindeki düğüm sayısıdır. Bu en kötü durumda ağacın yarısı olabilir.</li>
</ul>
]]></content>
		</item>
		
		<item>
			<title>Leetcode 104 Maximum Depth of Binary Tree</title>
			<link>https://www.dincerbakkal.com/posts/leetcode104/</link>
			<pubDate>Wed, 24 Mar 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode104/</guid>
			<description>Soru Given the root of a binary tree, return its maximum depth.
A binary tree&amp;rsquo;s maximum depth is the number of nodes along the longest path from the root node down to the farthest leaf node.
Örnek 1 Input: root = [3,9,20,null,null,15,7] Output: 3 Örnek 2 Input: root = [1,null,2] Output: 2 Örnek 3 Input: root = [] Output: 0 Örnek 4 Input: root = [0] Output: 1 Çözüm DFS  &amp;ldquo;104.</description>
			<content type="html"><![CDATA[<h3 id="soru">Soru</h3>
<p>Given the root of a binary tree, return its maximum depth.</p>
<p>A binary tree&rsquo;s maximum depth is the number of nodes along the longest path from the root node down to the farthest leaf node.</p>
<h3 id="örnek-1">Örnek 1</h3>
<pre><code>Input: root = [3,9,20,null,null,15,7]
Output: 3
</code></pre><h3 id="örnek-2">Örnek 2</h3>
<pre><code>Input: root = [1,null,2]
Output: 2
</code></pre><h3 id="örnek-3">Örnek 3</h3>
<pre><code>Input: root = []
Output: 0
</code></pre><h3 id="örnek-4">Örnek 4</h3>
<pre><code>Input: root = [0]
Output: 1
</code></pre><h3 id="çözüm-dfs">Çözüm DFS</h3>
<ul>
<li>&ldquo;104. Maximum Depth of Binary Tree&rdquo; sorusu, verilen bir ikili ağacın maksimum derinliğini (en uzun yol) bulmanızı ister. Bu problemde, ağacın kökünden en uzak yaprak düğümüne olan yol boyunca geçilen kenar sayısının maksimumu hesaplanır.</li>
<li>Girdi: İkili bir ağacın kök düğümü (root).</li>
<li>Çıktı: Ağacın maksimum derinliği.</li>
<li>Bu problem genellikle özyinelemeli (recursive) veya yinelemeli (iterative) yöntemler kullanılarak çözülür. Her iki yöntem de ağacın her düğümünü ziyaret ederek en derin yaprak düğümüne ulaşmayı amaçlar.</li>
<li>Özyinelemeli Çözüm (DFS):
Özyinelemeli çözüm, bir derinlik öncelikli arama (Depth-First Search, DFS) kullanarak her düğüm için sol ve sağ alt ağaçların derinliklerini karşılaştırır ve her düzeyde maksimum olanı alır.</li>
<li>Yinelemeli Çözüm (BFS):
Yinelemeli çözümde, genellikle bir genişlik öncelikli arama (Breadth-First Search, BFS) kullanılır. Her seviye tamamlandığında, derinlik bir arttırılır.</li>
<li>Çalışma Mekanizması:</li>
<li>Özyinelemeli Yöntem: Her düğüm için sol ve sağ alt ağaçların maksimum derinlikleri hesaplanır ve en büyük olanına bir eklenir (mevcut düğümün derinliği).</li>
<li>Yinelemeli Yöntem: Her seviyede, o seviyedeki tüm düğümler işlenir ve seviye sayısı bir arttırılır.</li>
</ul>
<h3 id="code-özyinelemeli-çözüm-dfs">Code Özyinelemeli Çözüm (DFS):</h3>
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python">    <span class="k">class</span> <span class="nc">TreeNode</span><span class="p">:</span>
    <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">val</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">left</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">right</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">val</span> <span class="o">=</span> <span class="n">val</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">left</span> <span class="o">=</span> <span class="n">left</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">right</span> <span class="o">=</span> <span class="n">right</span>

<span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">maxDepth</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">root</span><span class="p">):</span>
        <span class="k">if</span> <span class="ow">not</span> <span class="n">root</span><span class="p">:</span>
            <span class="k">return</span> <span class="mi">0</span>
        <span class="n">left_depth</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">maxDepth</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">left</span><span class="p">)</span>
        <span class="n">right_depth</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">maxDepth</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">right</span><span class="p">)</span>
        <span class="k">return</span> <span class="nb">max</span><span class="p">(</span><span class="n">left_depth</span><span class="p">,</span> <span class="n">right_depth</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1</span>

</code></pre></div><h3 id="code-yinelemeli-çözüm-bfs">Code Yinelemeli Çözüm (BFS):</h3>
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="kn">from</span> <span class="nn">collections</span> <span class="kn">import</span> <span class="n">deque</span>

<span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">maxDepth</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">root</span><span class="p">):</span>
        <span class="k">if</span> <span class="ow">not</span> <span class="n">root</span><span class="p">:</span>
            <span class="k">return</span> <span class="mi">0</span>
        <span class="n">queue</span> <span class="o">=</span> <span class="n">deque</span><span class="p">([</span><span class="n">root</span><span class="p">])</span>
        <span class="n">depth</span> <span class="o">=</span> <span class="mi">0</span>
        <span class="k">while</span> <span class="n">queue</span><span class="p">:</span>
            <span class="n">level_length</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">queue</span><span class="p">)</span>
            <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">level_length</span><span class="p">):</span>
                <span class="n">node</span> <span class="o">=</span> <span class="n">queue</span><span class="o">.</span><span class="n">popleft</span><span class="p">()</span>
                <span class="k">if</span> <span class="n">node</span><span class="o">.</span><span class="n">left</span><span class="p">:</span>
                    <span class="n">queue</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">node</span><span class="o">.</span><span class="n">left</span><span class="p">)</span>
                <span class="k">if</span> <span class="n">node</span><span class="o">.</span><span class="n">right</span><span class="p">:</span>
                    <span class="n">queue</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">node</span><span class="o">.</span><span class="n">right</span><span class="p">)</span>
            <span class="n">depth</span> <span class="o">+=</span> <span class="mi">1</span>
        <span class="k">return</span> <span class="n">depth</span>


</code></pre></div><h3 id="complexity">Complexity</h3>
<ul>
<li>Time complexity (Zaman Karmaşıklığı): Her iki yöntem için de O(n), burada n ağaçtaki toplam düğüm sayısıdır. Her düğüm bir kez işlenir.</li>
<li>Space complexity (Alan Karmaşıklığı):</li>
<li>Özyinelemeli için O(h), burada h ağacın yüksekliği. Bu, çağrı yığınında yer kaplar ve ağaç dengesizse kötüleşebilir.</li>
<li>Yinelemeli (BFS) için O(w), burada w ağacın en geniş seviyesindeki maksimum düğüm sayısıdır.</li>
</ul>
]]></content>
		</item>
		
		<item>
			<title>Leetcode 235 Lowest Common Ancestor of a Binary Search Tree</title>
			<link>https://www.dincerbakkal.com/posts/leetcode235/</link>
			<pubDate>Wed, 24 Mar 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode235/</guid>
			<description>Soru Given a binary search tree (BST), find the lowest common ancestor (LCA) of two given nodes in the BST.
According to the definition of LCA on Wikipedia: “The lowest common ancestor is defined between two nodes p and q as the lowest node in T that has both p and q as descendants (where we allow a node to be a descendant of itself).”
Örnek 1  Input: root = [6,2,8,0,4,7,9,null,null,3,5], p = 2, q = 8 Output: 6 Explanation: The LCA of nodes 2 and 8 is 6.</description>
			<content type="html"><![CDATA[<h3 id="soru">Soru</h3>
<p>Given a binary search tree (BST), find the lowest common ancestor (LCA) of two given nodes in the BST.</p>
<p>According to the definition of LCA on Wikipedia: “The lowest common ancestor is defined between two nodes p and q as the lowest node in T that has both p and q as descendants (where we allow a node to be a descendant of itself).”</p>
<h3 id="örnek-1">Örnek 1</h3>
<figure><img src="/image/235ex1.png"
         alt="image"/>
</figure>

<pre><code>Input: root = [6,2,8,0,4,7,9,null,null,3,5], p = 2, q = 8
Output: 6
Explanation: The LCA of nodes 2 and 8 is 6.
</code></pre><h3 id="örnek-2">Örnek 2</h3>
<figure><img src="/image/235ex1.png"
         alt="image"/>
</figure>

<pre><code>Input: root = [6,2,8,0,4,7,9,null,null,3,5], p = 2, q = 4
Output: 2
Explanation: The LCA of nodes 2 and 4 is 2, since a node can be a descendant of itself according to the LCA definition.
</code></pre><h3 id="örnek-3">Örnek 3</h3>
<pre><code>Input: root = [2,1], p = 2, q = 1
Output: 2
</code></pre><h3 id="çözüm-dfs">Çözüm DFS</h3>
<ul>
<li>Burada bize 2 node veriliyor ve ağaçtaki en küçük ortak atalarını bulmamız isteniyor.</li>
<li>Elimizde ikili bir arama ağacı olduğu için sağdaki nodeların soldaki nodelardan her zaman büyük olduğu bilgisine sahibiz.</li>
<li>Bu durumda kökten başlayarak DFS yaklaşımı ile recursive olarak programı çağırıp ağaçta dolaşarak soruyu çözebiliriz.</li>
<li>Elimizdeki 2 node un değerleri eğer kök node dan küçük ise bu durumda kökün sol child node una geçerek soruya devam edebiliriz.Çünkü her en küçük ortak ata solda kalmaktadır.</li>
<li>Eğer değerler kökten büyük ise de bu sefer sağ child devam ederiz.</li>
<li>Ne zaman ki verilen node lardan biri kökten büyük diğeri ise kökten küçük ise aradığımız en küçük ortak atayı bulmuş oluruz.</li>
</ul>
<h2 id="code">Code</h2>
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python">    <span class="k">def</span> <span class="nf">lowestCommonAncestor</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">root</span><span class="p">:</span> <span class="s1">&#39;TreeNode&#39;</span><span class="p">,</span> <span class="n">p</span><span class="p">:</span> <span class="s1">&#39;TreeNode&#39;</span><span class="p">,</span> <span class="n">q</span><span class="p">:</span> <span class="s1">&#39;TreeNode&#39;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="s1">&#39;TreeNode&#39;</span><span class="p">:</span>
        
        <span class="k">if</span><span class="p">(</span><span class="n">p</span><span class="o">.</span><span class="n">val</span> <span class="o">&lt;</span> <span class="n">root</span><span class="o">.</span><span class="n">val</span> <span class="ow">and</span> <span class="n">q</span><span class="o">.</span><span class="n">val</span> <span class="o">&lt;</span> <span class="n">root</span><span class="o">.</span><span class="n">val</span><span class="p">):</span>
            <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">lowestCommonAncestor</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">left</span><span class="p">,</span><span class="n">p</span><span class="p">,</span><span class="n">q</span><span class="p">)</span>
        
        <span class="k">if</span><span class="p">(</span><span class="n">p</span><span class="o">.</span><span class="n">val</span> <span class="o">&gt;</span> <span class="n">root</span><span class="o">.</span><span class="n">val</span> <span class="ow">and</span> <span class="n">q</span><span class="o">.</span><span class="n">val</span> <span class="o">&gt;</span> <span class="n">root</span><span class="o">.</span><span class="n">val</span><span class="p">):</span>
            <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">lowestCommonAncestor</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">right</span><span class="p">,</span><span class="n">p</span><span class="p">,</span><span class="n">q</span><span class="p">)</span>
        
        <span class="k">return</span> <span class="n">root</span>
</code></pre></div><h3 id="complexity">Complexity</h3>
<ul>
<li>Time complexity : O(n).</li>
<li>Space complexity : O(h) , h burada ağacın derinliğini belirtiyor.</li>
</ul>
]]></content>
		</item>
		
		<item>
			<title>Leetcode 572 Subtree of Another Tree</title>
			<link>https://www.dincerbakkal.com/posts/leetcode572/</link>
			<pubDate>Wed, 24 Mar 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode572/</guid>
			<description>Soru Given the roots of two binary trees root and subRoot, return true if there is a subtree of root with the same structure and node values of subRoot and false otherwise.
A subtree of a binary tree tree is a tree that consists of a node in tree and all of this node&amp;rsquo;s descendants. The tree tree could also be considered as a subtree of itself.
Örnek 1  Input: root = [3,4,5,1,2], subRoot = [4,1,2] Output: true Örnek 2  Input: root = [3,4,5,1,2,null,null,null,null,0], subRoot = [4,1,2] Output: false Çözüm DFS   Bu soru, bir ikili ağacın (root) içinde, verilen başka bir ağacın (subRoot) olup olmadığını kontrol etmeyi gerektirir.</description>
			<content type="html"><![CDATA[<h3 id="soru">Soru</h3>
<p>Given the roots of two binary trees root and subRoot, return true if there is a subtree of root with the same structure and node values of subRoot and false otherwise.</p>
<p>A subtree of a binary tree tree is a tree that consists of a node in tree and all of this node&rsquo;s descendants. The tree tree could also be considered as a subtree of itself.</p>
<h3 id="örnek-1">Örnek 1</h3>
<figure><img src="/image/572ex1.png"
         alt="image"/>
</figure>

<pre><code>Input: root = [3,4,5,1,2], subRoot = [4,1,2]
Output: true
</code></pre><h3 id="örnek-2">Örnek 2</h3>
<figure><img src="/image/572ex2.png"
         alt="image"/>
</figure>

<pre><code>Input: root = [3,4,5,1,2,null,null,null,null,0], subRoot = [4,1,2]
Output: false
</code></pre><h3 id="çözüm-dfs">Çözüm DFS</h3>
<ul>
<li>
<p>Bu soru, bir ikili ağacın (root) içinde, verilen başka bir ağacın (subRoot) olup olmadığını kontrol etmeyi gerektirir.</p>
</li>
<li>
<p>İki yardımcı fonksiyon kullanırız:</p>
</li>
<li>
<p>isSameTree(p, q) → p ve q ağaçlarının tamamen aynı olup olmadığını kontrol eder.</p>
</li>
<li>
<p>isSubtree(root, subRoot) → root ağacının her düğümünü dolaşarak subRoot ile eşleşen bir düğüm olup olmadığını kontrol eder.</p>
</li>
<li>
<p>Adımlar:</p>
</li>
<li>
<p>root düğümüne bakarız, eğer root ile subRoot birebir aynıysa True döndürürüz.</p>
</li>
<li>
<p>Eğer eşleşme yoksa root&rsquo;un sol ve sağ alt ağaçlarında subRoot olup olmadığını kontrol ederiz.</p>
</li>
<li>
<p>Alt ağaçları rekürsif olarak tarayarak çözümü tamamlarız.</p>
</li>
</ul>
<h2 id="code">Code</h2>
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python">   <span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">isSubtree</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">root</span><span class="p">:</span> <span class="n">TreeNode</span><span class="p">,</span> <span class="n">subRoot</span><span class="p">:</span> <span class="n">TreeNode</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
        <span class="k">if</span> <span class="ow">not</span> <span class="n">root</span><span class="p">:</span>
            <span class="k">return</span> <span class="kc">False</span>  <span class="c1"># root None olduysa, subRoot bulunamaz.</span>
        
        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">isSameTree</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="n">subRoot</span><span class="p">):</span>  
            <span class="k">return</span> <span class="kc">True</span>  <span class="c1"># Eğer root ile subRoot tamamen aynıysa True döndür</span>
        
        <span class="c1"># Alt ağaçlarda aramaya devam et (sol ve sağ alt ağaçlar)</span>
        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">isSubtree</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">left</span><span class="p">,</span> <span class="n">subRoot</span><span class="p">)</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">isSubtree</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">right</span><span class="p">,</span> <span class="n">subRoot</span><span class="p">)</span>

    <span class="k">def</span> <span class="nf">isSameTree</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">p</span><span class="p">:</span> <span class="n">TreeNode</span><span class="p">,</span> <span class="n">q</span><span class="p">:</span> <span class="n">TreeNode</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
        <span class="k">if</span> <span class="ow">not</span> <span class="n">p</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">q</span><span class="p">:</span>
            <span class="k">return</span> <span class="kc">True</span>  <span class="c1"># İkisi de None ise aynı</span>
        <span class="k">if</span> <span class="ow">not</span> <span class="n">p</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">q</span> <span class="ow">or</span> <span class="n">p</span><span class="o">.</span><span class="n">val</span> <span class="o">!=</span> <span class="n">q</span><span class="o">.</span><span class="n">val</span><span class="p">:</span>
            <span class="k">return</span> <span class="kc">False</span>  <span class="c1"># Biri None veya değerleri farklıysa farklı</span>
        
        <span class="c1"># Sol ve sağ alt ağaçları da karşılaştır</span>
        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">isSameTree</span><span class="p">(</span><span class="n">p</span><span class="o">.</span><span class="n">left</span><span class="p">,</span> <span class="n">q</span><span class="o">.</span><span class="n">left</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">isSameTree</span><span class="p">(</span><span class="n">p</span><span class="o">.</span><span class="n">right</span><span class="p">,</span> <span class="n">q</span><span class="o">.</span><span class="n">right</span><span class="p">)</span>

</code></pre></div><h3 id="complexity">Complexity</h3>
<ul>
<li>Time complexity (Zaman Karmaşıklığı): O(m * n) (Her düğümde isSameTree çağrıldığı için)</li>
<li>Space complexity (Alan Karmaşıklığı): O(n) (Recursive çağrılar için çağrı yığını kullanılır)</li>
</ul>
]]></content>
		</item>
		
		<item>
			<title>Leetcode 617 Merge Two Binary Trees</title>
			<link>https://www.dincerbakkal.com/posts/leetcode617/</link>
			<pubDate>Tue, 23 Mar 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode617/</guid>
			<description>You are given two binary trees root1 and root2.
Imagine that when you put one of them to cover the other, some nodes of the two trees are overlapped while the others are not. You need to merge the two trees into a new binary tree. The merge rule is that if two nodes overlap, then sum node values up as the new value of the merged node. Otherwise, the NOT null node will be used as the node of the new tree.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>You are given two binary trees root1 and root2.</p>
<p>Imagine that when you put one of them to cover the other, some nodes of the two trees are overlapped while the others are not. You need to merge the two trees into a new binary tree. The merge rule is that if two nodes overlap, then sum node values up as the new value of the merged node. Otherwise, the NOT null node will be used as the node of the new tree.</p>
<p>Return the merged tree.</p>
<p>Note: The merging process must start from the root nodes of both trees.</p>
<!-- raw HTML omitted -->
<figure><img src="/image/merge.png"
         alt="image"/>
</figure>

<pre><code>Input: root1 = [1,3,2,5], root2 = [2,1,3,null,4,null,7]
Output: [3,4,5,5,4,null,7]
</code></pre><!-- raw HTML omitted -->
<pre><code>Input: root1 = [1], root2 = [1,2]
Output: [2,2]
</code></pre><!-- raw HTML omitted -->
<ul>
<li>Bu soruda bizden 2 tane ağacı birleştirmemiz isteniyor.Aslında demek istenen bir ağacı diğerinin üzerine yerleştirmek.Aynı node a denk gelen değerler toplanacak.Eğer o node üzerinde sadece 1 ağacın değeri varsa yeni ağaca da o yerleşecek.</li>
<li>Burada rekürsif yaklaşım kullanarak her iki ağaçtaki tüm nodeları gezeriz.</li>
<li>Bir node için her iki ağaçta da değer var ise toplanır.</li>
<li>Sadece bir tanesinde değer var ise o değer yerleştirilir.</li>
<li>Daha sonra node&rsquo;un sağ ve sol child&rsquo;ları için fonksiyon rekürsif olarak çağrılır.</li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python">    <span class="k">def</span> <span class="nf">mergeTrees</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">root1</span><span class="p">:</span> <span class="n">TreeNode</span><span class="p">,</span> <span class="n">root2</span><span class="p">:</span> <span class="n">TreeNode</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">TreeNode</span><span class="p">:</span>
        <span class="k">if</span> <span class="n">root1</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
            <span class="k">return</span> <span class="n">root2</span>
        <span class="k">if</span> <span class="n">root2</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
            <span class="k">return</span> <span class="n">root1</span>
        <span class="n">root1</span><span class="o">.</span><span class="n">val</span> <span class="o">+=</span> <span class="n">root2</span><span class="o">.</span><span class="n">val</span>
        
        <span class="n">root1</span><span class="o">.</span><span class="n">left</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">mergeTrees</span><span class="p">(</span><span class="n">root1</span><span class="o">.</span><span class="n">left</span><span class="p">,</span><span class="n">root2</span><span class="o">.</span><span class="n">left</span><span class="p">)</span>
        <span class="n">root1</span><span class="o">.</span><span class="n">right</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">mergeTrees</span><span class="p">(</span><span class="n">root1</span><span class="o">.</span><span class="n">right</span><span class="p">,</span><span class="n">root2</span><span class="o">.</span><span class="n">right</span><span class="p">)</span>
        
        <span class="k">return</span> <span class="n">root1</span>
</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 543 Diameter of Binary Tree</title>
			<link>https://www.dincerbakkal.com/posts/leetcode543/</link>
			<pubDate>Mon, 22 Mar 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode543/</guid>
			<description>Soru Given the root of a binary tree, return the length of the diameter of the tree.
The diameter of a binary tree is the length of the longest path between any two nodes in a tree. This path may or may not pass through the root.
The length of a path between two nodes is represented by the number of edges between them.
Örnek 1  Input: root = [1,2,3,4,5] Output: 3 Explanation: 3 is the length of the path [4,2,1,3] or [5,2,1,3].</description>
			<content type="html"><![CDATA[<h3 id="soru">Soru</h3>
<p>Given the root of a binary tree, return the length of the diameter of the tree.</p>
<p>The diameter of a binary tree is the length of the longest path between any two nodes in a tree. This path may or may not pass through the root.</p>
<p>The length of a path between two nodes is represented by the number of edges between them.</p>
<h3 id="örnek-1">Örnek 1</h3>
<figure><img src="/image/diamtree.png"
         alt="image"/>
</figure>

<pre><code>Input: root = [1,2,3,4,5]
Output: 3
Explanation: 3 is the length of the path [4,2,1,3] or [5,2,1,3].
</code></pre><h3 id="örnek-2">Örnek 2</h3>
<pre><code>Input: root = [1,2]
Output: 1
</code></pre><h3 id="çözüm-dfs">Çözüm DFS</h3>
<ul>
<li>Bu problem, ikili bir ağacın çapını (diameter) bulmanızı ister. Çap, herhangi iki düğüm arasındaki en uzun yol boyunca geçen kenar sayısıdır. Bu yol kökten geçmek zorunda değildir; herhangi bir düğümden başlayabilir ve herhangi bir düğümde bitebilir.</li>
<li>Girdi: İkili bir ağacın kök düğümü (root).</li>
<li>Çıktı: Ağacın çapını (en uzun yol boyunca geçen kenar sayısı) döndür.</li>
<li>Bu soruyu çözmek için DFS (derinlik öncelikli arama) kullanarak her düğümde sol ve sağ alt ağaçların derinliğini hesaplar ve bu derinliklerin toplamını çap olarak değerlendiririz. Her düğüm için bu değeri kontrol eder ve maksimum olanı kaydederiz.</li>
<li>Çözüm Açıklaması:</li>
<li>DFS ile her düğüm için derinlik hesaplanır.</li>
<li>Sol ve sağ alt ağaçların derinlik toplamı, o düğümdeki çapı verir.</li>
<li>Global self.diameter değişkeni ile her düğümdeki çap kontrol edilir ve maksimum değeri kaydederiz.</li>
<li>DFS fonksiyonu, her düğümün maksimum derinliğini döndürür (max(left, right) + 1).</li>
</ul>
<h2 id="code">Code</h2>
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python">    <span class="k">class</span> <span class="nc">TreeNode</span><span class="p">:</span>
    <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">val</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">left</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">right</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">val</span> <span class="o">=</span> <span class="n">val</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">left</span> <span class="o">=</span> <span class="n">left</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">right</span> <span class="o">=</span> <span class="n">right</span>

<span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">diameterOfBinaryTree</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">root</span><span class="p">:</span> <span class="n">TreeNode</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">diameter</span> <span class="o">=</span> <span class="mi">0</span>
        
        <span class="k">def</span> <span class="nf">dfs</span><span class="p">(</span><span class="n">node</span><span class="p">):</span>
            <span class="k">if</span> <span class="ow">not</span> <span class="n">node</span><span class="p">:</span>
                <span class="k">return</span> <span class="mi">0</span>
            <span class="c1"># Sol ve sağ alt ağaçların derinliğini hesapla</span>
            <span class="n">left_depth</span> <span class="o">=</span> <span class="n">dfs</span><span class="p">(</span><span class="n">node</span><span class="o">.</span><span class="n">left</span><span class="p">)</span>
            <span class="n">right_depth</span> <span class="o">=</span> <span class="n">dfs</span><span class="p">(</span><span class="n">node</span><span class="o">.</span><span class="n">right</span><span class="p">)</span>
            
            <span class="c1"># Çapı güncelle: sol + sağ uzunluklarını kontrol et</span>
            <span class="bp">self</span><span class="o">.</span><span class="n">diameter</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">diameter</span><span class="p">,</span> <span class="n">left_depth</span> <span class="o">+</span> <span class="n">right_depth</span><span class="p">)</span>
            
            <span class="c1"># Bu düğümün derinliğini döndür</span>
            <span class="k">return</span> <span class="nb">max</span><span class="p">(</span><span class="n">left_depth</span><span class="p">,</span> <span class="n">right_depth</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1</span>
        
        <span class="n">dfs</span><span class="p">(</span><span class="n">root</span><span class="p">)</span>
        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">diameter</span>

</code></pre></div><h3 id="complexity">Complexity</h3>
<ul>
<li>
<p>Time complexity (Zaman Karmaşıklığı) : O(n), burada n ağacın toplam düğüm sayısıdır. Her düğüm bir kez ziyaret edilir.</p>
</li>
<li>
<p>Space complexity (Alan Karmaşıklığı) :Ortalama durumda O(h), burada h ağacın yüksekliğidir (çağrı yığınında kullanılan alan).
Dengesiz bir ağaçta bu O(n) olabilir.</p>
</li>
</ul>
]]></content>
		</item>
		
		<item>
			<title>Leetcode 112 Path Sum</title>
			<link>https://www.dincerbakkal.com/posts/leetcode112/</link>
			<pubDate>Sun, 21 Mar 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode112/</guid>
			<description>Given the root of a binary tree and an integer targetSum, return true if the tree has a root-to-leaf path such that adding up all the values along the path equals targetSum.
A leaf is a node with no children.
 Input: root = [5,4,8,11,null,13,4,7,2,null,null,null,1], targetSum = 22 Output: true  Input: root = [1,2,3], targetSum = 5 Output: false Input: root = [1,2], targetSum = 0 Output: false  Bize bir ikili ağaç ve bir toplam verilmektedir.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>Given the root of a binary tree and an integer targetSum, return true if the tree has a root-to-leaf path such that adding up all the values along the path equals targetSum.</p>
<p>A leaf is a node with no children.</p>
<!-- raw HTML omitted -->
<figure><img src="/image/pathsum1.png"
         alt="image"/>
</figure>

<pre><code>Input: root = [5,4,8,11,null,13,4,7,2,null,null,null,1], targetSum = 22
Output: true
</code></pre><!-- raw HTML omitted -->
<figure><img src="/image/pathsum1.png"
         alt="image"/>
</figure>

<pre><code>Input: root = [1,2,3], targetSum = 5
Output: false
</code></pre><!-- raw HTML omitted -->
<pre><code>Input: root = [1,2], targetSum = 0
Output: false
</code></pre><!-- raw HTML omitted -->
<ul>
<li>Bize bir ikili ağaç ve bir toplam verilmektedir.Bu ikili ağaçtaki kökten(root) yaprağa(leaf) uzanan bir daldaki değerlerin toplamı bize verilen toplam değere eşit ise true.Hiç bir dalın toplamı bu değere eşit değil ise false dönmemiz beklenmektedir.</li>
<li>DFS yaklaşımı ile bu problemi çözebiliriz.</li>
<li>DFS işlemine ağacın kökü(root) ile başlarız.</li>
<li>Eğer elimizdeki node yaprak(leaf) değil ise, iki işlem yaparız:
<ul>
<li>Yeni bir toplam(S) bulmak için mevcut düğümün değerini(node.value) önceki toplamdan(S) çıkarırız
=&gt; S = S - node.value</li>
<li>Elimizdeki node un her iki çocuğu içinde recursive çağrılar yaparız ve önceki adımdaki gibi yeni toplamlar hesaplarız.</li>
</ul>
</li>
<li>Her adımda, ziyaret edilen node yaprak(leaf) node mu diye kontrol ederiz ve onun değeri elimizdeki toplama(S) eşit mi diye kontrol ederiz. Her koşul sağlanıyorsa true döneriz,aradığımız dalı bulmuşuzdur.</li>
<li>Eğer bulduğumuz node leaf ama değeri elimizdeki toplama(S) eşit değil ise, false döneriz.</li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python">    <span class="k">def</span> <span class="nf">hasPathSum</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">root</span><span class="p">:</span> <span class="n">TreeNode</span><span class="p">,</span> <span class="n">targetSum</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
        <span class="k">if</span> <span class="n">root</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
            <span class="k">return</span> <span class="kc">False</span>
        <span class="k">if</span> <span class="n">root</span><span class="o">.</span><span class="n">val</span> <span class="o">==</span> <span class="n">targetSum</span> <span class="ow">and</span> <span class="n">root</span><span class="o">.</span><span class="n">left</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">and</span> <span class="n">root</span><span class="o">.</span><span class="n">right</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
            <span class="k">return</span> <span class="kc">True</span>
        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">hasPathSum</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">left</span><span class="p">,</span><span class="n">targetSum</span> <span class="o">-</span> <span class="n">root</span><span class="o">.</span><span class="n">val</span><span class="p">)</span> <span class="ow">or</span> 
               <span class="bp">self</span><span class="o">.</span><span class="n">hasPathSum</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">right</span><span class="p">,</span><span class="n">targetSum</span> <span class="o">-</span> <span class="n">root</span><span class="o">.</span><span class="n">val</span><span class="p">)</span>
</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 100 Same Tree</title>
			<link>https://www.dincerbakkal.com/posts/leetcode100/</link>
			<pubDate>Sat, 20 Mar 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode100/</guid>
			<description>Soru Given the roots of two binary trees p and q, write a function to check if they are the same or not.
Two binary trees are considered the same if they are structurally identical, and the nodes have the same value.
Örnek 1  Input: p = [1,2,3], q = [1,2,3] Output: true Örnek 2  Input: p = [1,2], q = [1,null,2] Output: false Örnek 3  Input: p = [1,2,1], q = [1,1,2] Output: false Çözüm DFS  Bu problem, iki ikili ağacın tamamen aynı olup olmadığını kontrol etmemizi istiyor.</description>
			<content type="html"><![CDATA[<h3 id="soru">Soru</h3>
<p>Given the roots of two binary trees p and q, write a function to check if they are the same or not.</p>
<p>Two binary trees are considered the same if they are structurally identical, and the nodes have the same value.</p>
<h3 id="örnek-1">Örnek 1</h3>
<figure><img src="/image/100EX1.png"
         alt="image"/>
</figure>

<pre><code>Input: p = [1,2,3], q = [1,2,3]
Output: true
</code></pre><h3 id="örnek-2">Örnek 2</h3>
<figure><img src="/image/100EX2.png"
         alt="image"/>
</figure>

<pre><code>Input: p = [1,2], q = [1,null,2]
Output: false
</code></pre><h3 id="örnek-3">Örnek 3</h3>
<figure><img src="/image/100EX3.png"
         alt="image"/>
</figure>

<pre><code>Input: p = [1,2,1], q = [1,1,2]
Output: false
</code></pre><h3 id="çözüm-dfs">Çözüm DFS</h3>
<ul>
<li>Bu problem, iki ikili ağacın tamamen aynı olup olmadığını kontrol etmemizi istiyor.</li>
<li>Girdi:p ve q adlı iki ikili ağacın kök düğümleri.</li>
<li>Çıktı:Eğer iki ağaç birebir aynıysa True, değilse False.</li>
<li>İki ağaç aynı kabul edilir eğer:Düğümler aynı konumda olmalı (yapı aynı olmalı).Düğümlerin değerleri aynı olmalı.</li>
<li>Bu problemi özyinelemeli (recursive) DFS ile çözebiliriz.</li>
<li>İki ağacı eşzamanlı olarak gezerek:</li>
<li>Eğer her iki düğüm de None ise, True döndür.</li>
<li>Eğer biri None, diğeri değilse, False döndür.</li>
<li>Eğer değerleri eşleşmiyorsa, False döndür.</li>
<li>Sol ve sağ alt ağaçları aynı şekilde karşılaştır.</li>
</ul>
<h2 id="code">Code</h2>
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">class</span> <span class="nc">TreeNode</span><span class="p">:</span>
    <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">val</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">left</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">right</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">val</span> <span class="o">=</span> <span class="n">val</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">left</span> <span class="o">=</span> <span class="n">left</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">right</span> <span class="o">=</span> <span class="n">right</span>

<span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">isSameTree</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">p</span><span class="p">:</span> <span class="n">TreeNode</span><span class="p">,</span> <span class="n">q</span><span class="p">:</span> <span class="n">TreeNode</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
        <span class="k">if</span> <span class="ow">not</span> <span class="n">p</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">q</span><span class="p">:</span>  <span class="c1"># İkisi de None ise aynı</span>
            <span class="k">return</span> <span class="kc">True</span>
        <span class="k">if</span> <span class="ow">not</span> <span class="n">p</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">q</span><span class="p">:</span>  <span class="c1"># Biri None, diğeri değilse farklı</span>
            <span class="k">return</span> <span class="kc">False</span>
        <span class="k">if</span> <span class="n">p</span><span class="o">.</span><span class="n">val</span> <span class="o">!=</span> <span class="n">q</span><span class="o">.</span><span class="n">val</span><span class="p">:</span>  <span class="c1"># Değerleri farklıysa farklı</span>
            <span class="k">return</span> <span class="kc">False</span>
        <span class="c1"># Sol ve sağ alt ağaçları karşılaştır</span>
        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">isSameTree</span><span class="p">(</span><span class="n">p</span><span class="o">.</span><span class="n">left</span><span class="p">,</span> <span class="n">q</span><span class="o">.</span><span class="n">left</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">isSameTree</span><span class="p">(</span><span class="n">p</span><span class="o">.</span><span class="n">right</span><span class="p">,</span> <span class="n">q</span><span class="o">.</span><span class="n">right</span><span class="p">)</span>

</code></pre></div><h3 id="complexity">Complexity</h3>
<ul>
<li>Time complexity (Zaman Karmaşıklığı): O(n).</li>
<li>Space complexity (Alan Karmaşıklığı): O(h) h → Ağacın yüksekliği.Eğer ağaç dengeli (balanced) ise, her seviye düğüm sayısını yarıya böler.Bu durumda, ağacın yüksekliği O(log n) olur.Eğer ağaç tek taraflı (linked list gibi) uzuyorsa, h = n olur.</li>
</ul>
]]></content>
		</item>
		
		<item>
			<title>Leetcode 111 Minimum Depth of Binary Tree</title>
			<link>https://www.dincerbakkal.com/posts/leetcode111/</link>
			<pubDate>Fri, 19 Mar 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode111/</guid>
			<description>Given a binary tree, find its minimum depth.
The minimum depth is the number of nodes along the shortest path from the root node down to the nearest leaf node.
Note: A leaf is a node with no children.
Input: root = [3,9,20,null,null,15,7] Output: 2 Input: root = [2,null,3,null,4,null,5,null,6] Output: 5    Bu problem Binary Tree Level Order Traversal benzer olarak çözülebilir. Aynı BFS yaklaşımını kullanırız. Tek fark aynı leveldeki node ların tümünü tutmak yerine, sadece ağacın derinliğini tutarız.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>Given a binary tree, find its minimum depth.</p>
<p>The minimum depth is the number of nodes along the shortest path from the root node down to the nearest leaf node.</p>
<p>Note: A leaf is a node with no children.</p>
<!-- raw HTML omitted -->
<pre><code>Input: root = [3,9,20,null,null,15,7]
Output: 2
</code></pre><!-- raw HTML omitted -->
<pre><code>Input: root = [2,null,3,null,4,null,5,null,6]
Output: 5
</code></pre><!-- raw HTML omitted -->
<figure><img src="/image/bfs_dfs.png"
         alt="image"/>
</figure>

<!-- raw HTML omitted -->
<figure><img src="/image/bfs.png"
         alt="image"/>
</figure>

<ul>
<li>Bu problem Binary Tree Level Order Traversal benzer olarak çözülebilir. Aynı BFS yaklaşımını kullanırız. Tek fark aynı leveldeki node ların tümünü tutmak yerine, sadece ağacın derinliğini tutarız. İlk yaprak(leaf) node u bulduğumuz anda ağacın minimum derinliğini bulmuş oluruz.</li>
</ul>
<!-- raw HTML omitted -->
<ul>
<li>DFS çözüm ayrıntı eklenecek.</li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">def</span> <span class="nf">minDepth</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">root</span><span class="p">:</span> <span class="n">TreeNode</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
        <span class="k">if</span> <span class="ow">not</span> <span class="n">root</span><span class="p">:</span>
            <span class="k">return</span> <span class="mi">0</span>
        <span class="n">q</span> <span class="o">=</span> <span class="p">[]</span>
        <span class="n">q</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">root</span><span class="p">,</span><span class="mi">1</span><span class="p">))</span>

        <span class="k">while</span> <span class="n">q</span><span class="p">:</span>
            <span class="n">node</span><span class="p">,</span> <span class="n">depth</span> <span class="o">=</span> <span class="n">q</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>

            <span class="k">if</span> <span class="ow">not</span> <span class="n">node</span><span class="o">.</span><span class="n">left</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">node</span><span class="o">.</span><span class="n">right</span><span class="p">:</span> <span class="c1">#leaf node mu kontrol et değilse devam</span>
                <span class="k">return</span> <span class="n">depth</span>
            <span class="k">if</span> <span class="n">node</span><span class="o">.</span><span class="n">left</span><span class="p">:</span>
                <span class="n">q</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">node</span><span class="o">.</span><span class="n">left</span><span class="p">,</span> <span class="n">depth</span><span class="o">+</span><span class="mi">1</span><span class="p">))</span>
            <span class="k">if</span> <span class="n">node</span><span class="o">.</span><span class="n">right</span><span class="p">:</span>
                <span class="n">q</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">node</span><span class="o">.</span><span class="n">right</span><span class="p">,</span> <span class="n">depth</span><span class="o">+</span><span class="mi">1</span><span class="p">))</span>
</code></pre></div><!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">def</span> <span class="nf">minDepth</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">root</span><span class="p">:</span> <span class="n">TreeNode</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
    <span class="k">if</span> <span class="ow">not</span> <span class="n">root</span><span class="p">:</span>
        <span class="k">return</span> <span class="mi">0</span>
    <span class="k">if</span> <span class="ow">not</span> <span class="n">root</span><span class="o">.</span><span class="n">left</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">root</span><span class="o">.</span><span class="n">right</span><span class="p">:</span>
        <span class="k">return</span> <span class="mi">1</span>
    <span class="k">if</span> <span class="ow">not</span> <span class="n">root</span><span class="o">.</span><span class="n">right</span> <span class="ow">and</span> <span class="n">root</span><span class="o">.</span><span class="n">left</span><span class="p">:</span>
        <span class="k">return</span> <span class="mi">1</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">minDepth</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">left</span><span class="p">)</span>
    <span class="k">if</span> <span class="ow">not</span> <span class="n">root</span><span class="o">.</span><span class="n">left</span> <span class="ow">and</span> <span class="n">root</span><span class="o">.</span><span class="n">right</span><span class="p">:</span>
        <span class="k">return</span> <span class="mi">1</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">minDepth</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">right</span><span class="p">)</span>
    <span class="k">return</span> <span class="mi">1</span> <span class="o">+</span> <span class="nb">min</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">minDepth</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">left</span><span class="p">),</span><span class="bp">self</span><span class="o">.</span><span class="n">minDepth</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">right</span><span class="p">))</span>
</code></pre></div><!-- raw HTML omitted -->
<!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 637 Average of Levels in Binary Tree</title>
			<link>https://www.dincerbakkal.com/posts/leetcode637/</link>
			<pubDate>Fri, 19 Mar 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode637/</guid>
			<description>Given the root of a binary tree, return the average value of the nodes on each level in the form of an array. Answers within 10-5 of the actual answer will be accepted.
 Input: root = [3,9,20,null,15,7] Output: [3.00000,14.50000,11.00000] Explanation: The average value of nodes on level 0 is 3, on level 1 is 14.5, and on level 2 is 11. Hence return [3, 14.5, 11].  Input: root = [3,9,20,15,7] Output: [3.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>Given the root of a binary tree, return the average value of the nodes on each level in the form of an array. Answers within 10-5 of the actual answer will be accepted.</p>
<!-- raw HTML omitted -->
<figure><img src="/image/637EX1.png"
         alt="image"/>
</figure>

<pre><code>Input: root = [3,9,20,null,15,7]
Output: [3.00000,14.50000,11.00000]
Explanation: The average value of nodes on level 0 is 3, on level 1 is 14.5, and on level 2 is 11.
Hence return [3, 14.5, 11].
</code></pre><!-- raw HTML omitted -->
<figure><img src="/image/637EX2.png"
         alt="image"/>
</figure>

<pre><code>Input: root = [3,9,20,15,7]
Output: [3.00000,14.50000,11.00000]
</code></pre><!-- raw HTML omitted -->
<figure><img src="/image/bfs.png"
         alt="image"/>
</figure>

<ul>
<li>Breadth first search (BFS) ile her seviyedeki değerleri alırız ve daha sonrasında değerlerin ortalamasını alırız.</li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"> <span class="k">def</span> <span class="nf">averageOfLevels</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">root</span><span class="p">:</span> <span class="n">TreeNode</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">List</span><span class="p">[</span><span class="nb">float</span><span class="p">]:</span>
        <span class="n">results</span> <span class="o">=</span> <span class="p">[]</span>        
        <span class="n">queue</span> <span class="o">=</span> <span class="p">[</span><span class="n">root</span><span class="p">]</span>
        
        <span class="k">while</span> <span class="n">queue</span><span class="p">:</span>
            <span class="n">size</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">queue</span><span class="p">)</span>
            <span class="n">level</span> <span class="o">=</span> <span class="p">[]</span>
            
            <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">size</span><span class="p">):</span>
                <span class="n">node</span> <span class="o">=</span> <span class="n">queue</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
                
                <span class="n">level</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">node</span><span class="o">.</span><span class="n">val</span><span class="p">)</span>
                
                <span class="k">if</span> <span class="n">node</span><span class="o">.</span><span class="n">left</span><span class="p">:</span>
                    <span class="n">queue</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">node</span><span class="o">.</span><span class="n">left</span><span class="p">)</span>
                <span class="k">if</span> <span class="n">node</span><span class="o">.</span><span class="n">right</span><span class="p">:</span>
                    <span class="n">queue</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">node</span><span class="o">.</span><span class="n">right</span><span class="p">)</span>
                    
                
            <span class="n">results</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">sum</span><span class="p">(</span><span class="n">level</span><span class="p">)</span> <span class="o">/</span> <span class="nb">len</span><span class="p">(</span><span class="n">level</span><span class="p">))</span>
</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 852 Peak Index in a Mountain Array</title>
			<link>https://www.dincerbakkal.com/posts/leetcode852/</link>
			<pubDate>Wed, 17 Mar 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode852/</guid>
			<description>Let&#39;s call an array arr a mountain if the following properties hold: arr.length &amp;gt;= 3 There exists some i with 0 &amp;lt; i &amp;lt; arr.length - 1 such that: arr[0] &amp;lt; arr[1] &amp;lt; ... arr[i-1] &amp;lt; arr[i] arr[i] &amp;gt; arr[i+1] &amp;gt; ... &amp;gt; arr[arr.length - 1] Given an integer array arr that is guaranteed to be a mountain, return any i such that arr[0] &amp;lt; arr[1] &amp;lt; &amp;hellip; arr[i - 1] &amp;lt; arr[i] &amp;gt; arr[i + 1] &amp;gt; &amp;hellip; &amp;gt; arr[arr.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<pre><code>Let's call an array arr a mountain if the following properties hold:

arr.length &gt;= 3
There exists some i with 0 &lt; i &lt; arr.length - 1 such that:

arr[0] &lt; arr[1] &lt; ... arr[i-1] &lt; arr[i]
arr[i] &gt; arr[i+1] &gt; ... &gt; arr[arr.length - 1]
</code></pre><p>Given an integer array arr that is guaranteed to be a mountain, return any i such that arr[0] &lt; arr[1] &lt; &hellip; arr[i - 1] &lt; arr[i] &gt; arr[i + 1] &gt; &hellip; &gt; arr[arr.length - 1].</p>
<!-- raw HTML omitted -->
<pre><code>Input: arr = [0,1,0]
Output: 1
</code></pre><!-- raw HTML omitted -->
<pre><code>Input: arr = [0,2,1,0]
Output: 1
</code></pre><!-- raw HTML omitted -->
<pre><code>Input: arr = [0,10,5,2]
Output: 1
</code></pre><!-- raw HTML omitted -->
<pre><code>Input: arr = [3,4,5,1]
Output: 2
</code></pre><!-- raw HTML omitted -->
<ul>
<li>Pythonda tek satırla çözüm aşağıdaki gibidir.En yüksek değerli sayı tepe noktasını oluşturur.</li>
</ul>
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python">    <span class="k">def</span> <span class="nf">peakIndexInMountainArray</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">A</span><span class="p">):</span>
        <span class="k">return</span> <span class="n">A</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="nb">max</span><span class="p">(</span><span class="n">A</span><span class="p">))</span>
</code></pre></div><ul>
<li>Ama bir algoritma ile çözmek istersek Binary Search arama kullanabiliriz.</li>
<li>Ortadan başlayarak kontrollere başlarız.Eğer bulduğumuz sayı sağ ve solundaki sayılardan büyük ise cevabı bulmuşuzdur.Değil ise hangi taraftaki sayılardan büyük ise o parçayı çıkartır ve arama listesini daraltırız.Örneğin bulduğumuz sayı soldaki sayıdan büyük sağdaki sayıdan küçük ise bu durumda mid+1 yeni low değerimiz olacaktır.</li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python">    <span class="k">def</span> <span class="nf">peakIndexInMountainArray</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">A</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
        <span class="n">low</span><span class="p">,</span> <span class="n">high</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">A</span><span class="p">)</span> <span class="o">-</span> <span class="mi">1</span>
        <span class="k">while</span> <span class="n">low</span> <span class="o">&lt;=</span> <span class="n">high</span><span class="p">:</span>
            <span class="n">mid</span> <span class="o">=</span> <span class="p">(</span><span class="n">low</span> <span class="o">+</span> <span class="n">high</span><span class="p">)</span> <span class="o">//</span> <span class="mi">2</span>
            <span class="k">if</span> <span class="n">A</span><span class="p">[</span><span class="n">mid</span><span class="p">]</span> <span class="o">&gt;</span> <span class="n">A</span><span class="p">[</span><span class="n">mid</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="ow">and</span> <span class="n">A</span><span class="p">[</span><span class="n">mid</span><span class="p">]</span> <span class="o">&gt;</span> <span class="n">A</span><span class="p">[</span><span class="n">mid</span><span class="o">+</span><span class="mi">1</span><span class="p">]:</span>
                <span class="k">return</span> <span class="n">mid</span>
            <span class="k">if</span> <span class="n">A</span><span class="p">[</span><span class="n">mid</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">&lt;</span> <span class="n">A</span><span class="p">[</span><span class="n">mid</span><span class="p">]</span> <span class="o">&lt;</span> <span class="n">A</span><span class="p">[</span><span class="n">mid</span><span class="o">+</span><span class="mi">1</span><span class="p">]:</span>
                <span class="n">low</span> <span class="o">=</span> <span class="n">mid</span> <span class="o">+</span> <span class="mi">1</span>
            <span class="k">if</span> <span class="n">A</span><span class="p">[</span><span class="n">mid</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">&gt;</span> <span class="n">A</span><span class="p">[</span><span class="n">mid</span><span class="p">]</span> <span class="o">&gt;</span> <span class="n">A</span><span class="p">[</span><span class="n">mid</span><span class="o">+</span><span class="mi">1</span><span class="p">]:</span>
                <span class="n">high</span> <span class="o">=</span> <span class="n">mid</span> <span class="o">-</span> <span class="mi">1</span>
</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 744 Find Smallest Letter Greater Than Target</title>
			<link>https://www.dincerbakkal.com/posts/leetcode744/</link>
			<pubDate>Tue, 16 Mar 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode744/</guid>
			<description>Letters also wrap around. For example, if the target is target = &amp;lsquo;z&amp;rsquo; and letters = [&amp;lsquo;a&amp;rsquo;, &amp;lsquo;b&amp;rsquo;], the answer is &amp;lsquo;a&amp;rsquo;.
Input: letters = [&amp;quot;c&amp;quot;, &amp;quot;f&amp;quot;, &amp;quot;j&amp;quot;] target = &amp;quot;a&amp;quot; Output: &amp;quot;c&amp;quot; Input: letters = [&amp;quot;c&amp;quot;, &amp;quot;f&amp;quot;, &amp;quot;j&amp;quot;] target = &amp;quot;c&amp;quot; Output: &amp;quot;f&amp;quot; Input: letters = [&amp;quot;c&amp;quot;, &amp;quot;f&amp;quot;, &amp;quot;j&amp;quot;] target = &amp;quot;d&amp;quot; Output: &amp;quot;f&amp;quot; Input: letters = [&amp;quot;c&amp;quot;, &amp;quot;f&amp;quot;, &amp;quot;j&amp;quot;] target = &amp;quot;g&amp;quot; Output: &amp;quot;j&amp;quot;   Target harfin verilen listedeki harflerle karşılaştırırız.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>Letters also wrap around. For example, if the target is target = &lsquo;z&rsquo; and letters = [&lsquo;a&rsquo;, &lsquo;b&rsquo;], the answer is &lsquo;a&rsquo;.</p>
<!-- raw HTML omitted -->
<pre><code>Input:
letters = [&quot;c&quot;, &quot;f&quot;, &quot;j&quot;]
target = &quot;a&quot;
Output: &quot;c&quot;
</code></pre><!-- raw HTML omitted -->
<pre><code>Input:
letters = [&quot;c&quot;, &quot;f&quot;, &quot;j&quot;]
target = &quot;c&quot;
Output: &quot;f&quot;
</code></pre><!-- raw HTML omitted -->
<pre><code>Input:
letters = [&quot;c&quot;, &quot;f&quot;, &quot;j&quot;]
target = &quot;d&quot;
Output: &quot;f&quot;
</code></pre><!-- raw HTML omitted -->
<pre><code>Input:
letters = [&quot;c&quot;, &quot;f&quot;, &quot;j&quot;]
target = &quot;g&quot;
Output: &quot;j&quot;
</code></pre><!-- raw HTML omitted -->
<ul>
<li>
<p>Target harfin verilen listedeki harflerle karşılaştırırız.Hangisinden küçük ise onu return ederiz.</p>
</li>
<li>
<p>Eğer target harf listedeki son harften daha büyükse ve eşitse bu durumda listenin ilk elemanını return ederiz.</p>
</li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python">    <span class="k">def</span> <span class="nf">nextGreatestLetter</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">letters</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">],</span> <span class="n">target</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
                
        <span class="k">for</span> <span class="n">letter</span> <span class="ow">in</span> <span class="n">letters</span><span class="p">:</span>
            <span class="k">if</span> <span class="n">letter</span> <span class="o">&gt;</span> <span class="n">target</span><span class="p">:</span>
                <span class="k">return</span> <span class="n">letter</span>
            
        <span class="k">if</span> <span class="n">target</span> <span class="o">&gt;=</span> <span class="n">letters</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]:</span>
            <span class="k">return</span> <span class="n">letters</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 704 Binary Search</title>
			<link>https://www.dincerbakkal.com/posts/leetcode704/</link>
			<pubDate>Mon, 15 Mar 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode704/</guid>
			<description>Soru Given an array of integers nums which is sorted in ascending order, and an integer target, write a function to search target in nums. If target exists, then return its index. Otherwise, return -1.
You must write an algorithm with O(log n) runtime complexity.
Örnek 1 Input: nums = [-1,0,3,5,9,12], target = 9 Output: 4 Explanation: 9 exists in nums and its index is 4 Örnek 2 Input: nums = [-1,0,3,5,9,12], target = 2 Output: -1 Explanation: 2 does not exist in nums so return -1 Çözüm  Sıralı bir tam sayı dizisinde belirli bir hedef değeri ikili arama (binary search) algoritması kullanarak bulmanızı ister.</description>
			<content type="html"><![CDATA[<h3 id="soru">Soru</h3>
<p>Given an array of integers nums which is sorted in ascending order, and an integer target, write a function to search target in nums. If target exists, then return its index. Otherwise, return -1.</p>
<p>You must write an algorithm with O(log n) runtime complexity.</p>
<h3 id="örnek-1">Örnek 1</h3>
<pre><code>Input: nums = [-1,0,3,5,9,12], target = 9
Output: 4
Explanation: 9 exists in nums and its index is 4
</code></pre><h3 id="örnek-2">Örnek 2</h3>
<pre><code>Input: nums = [-1,0,3,5,9,12], target = 2
Output: -1
Explanation: 2 does not exist in nums so return -1
</code></pre><h3 id="çözüm">Çözüm</h3>
<ul>
<li>Sıralı bir tam sayı dizisinde belirli bir hedef değeri ikili arama (binary search) algoritması kullanarak bulmanızı ister. Bu algoritma, sıralı dizilerdeki arama işlemlerini hızlandırmak için kullanılır ve arama sürecinde dizinin yarısını her adımda atlayarak çalışır.</li>
<li>Girdi: Bir tam sayı dizisi nums ve bir hedef sayı target.</li>
<li>Çıktı: Eğer target dizide varsa, onun indeksini döndürün. Yoksa -1 döndürün.</li>
<li>Bu problem, ikili arama algoritmasını uygulayarak çözülür. İkili arama, bir başlangıç ve bir bitiş işaretçisi kullanarak, her adımda aranan değerin ortanca değere göre konumunu belirler ve arama alanını yarıya indirir.</li>
<li>Çalışma Mekanizması:</li>
<li>Başlangıç ve Bitiş İşaretçileri: left ve right işaretçileri dizinin başlangıç ve bitiş noktalarını belirler.</li>
<li>Ortanca Değerin Belirlenmesi: Her adımda, ortanca değer (mid) hesaplanır.</li>
<li>Karşılaştırma ve İşaretçilerin Güncellenmesi: Eğer mid ile gösterilen değer hedefe eşitse, arama başarılıdır ve mid döndürülür.Eğer hedef mid&rsquo;den büyükse, left işaretçisi mid + 1 olarak güncellenir; eğer hedef mid&rsquo;den küçükse, right işaretçisi mid - 1 olarak güncellenir.</li>
<li>Sonuç: Eğer left işaretçisi right işaretçisini geçerse, hedef değer dizide yoktur ve -1 döndürülür.</li>
</ul>
<h2 id="code">Code</h2>
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">search</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">nums</span><span class="p">,</span> <span class="n">target</span><span class="p">):</span>
        <span class="n">left</span><span class="p">,</span> <span class="n">right</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">nums</span><span class="p">)</span> <span class="o">-</span> <span class="mi">1</span>
        
        <span class="k">while</span> <span class="n">left</span> <span class="o">&lt;=</span> <span class="n">right</span><span class="p">:</span>
            <span class="n">mid</span> <span class="o">=</span> <span class="n">left</span> <span class="o">+</span> <span class="p">(</span><span class="n">right</span> <span class="o">-</span> <span class="n">left</span><span class="p">)</span> <span class="o">//</span> <span class="mi">2</span>  <span class="c1"># Taşma riskini azaltmak için bu şekilde hesaplanır</span>
            <span class="k">if</span> <span class="n">nums</span><span class="p">[</span><span class="n">mid</span><span class="p">]</span> <span class="o">==</span> <span class="n">target</span><span class="p">:</span>
                <span class="k">return</span> <span class="n">mid</span>
            <span class="k">elif</span> <span class="n">nums</span><span class="p">[</span><span class="n">mid</span><span class="p">]</span> <span class="o">&lt;</span> <span class="n">target</span><span class="p">:</span>
                <span class="n">left</span> <span class="o">=</span> <span class="n">mid</span> <span class="o">+</span> <span class="mi">1</span>
            <span class="k">else</span><span class="p">:</span>
                <span class="n">right</span> <span class="o">=</span> <span class="n">mid</span> <span class="o">-</span> <span class="mi">1</span>
        
        <span class="k">return</span> <span class="o">-</span><span class="mi">1</span>

</code></pre></div><h3 id="complexity">Complexity</h3>
<ul>
<li>Time complexity (Zaman Karmaşıklığı) : O(log n), burada n nums dizisinin uzunluğudur. İkili arama, her adımda arama alanını yarıya indirdiği için logaritmik zaman karmaşıklığına sahiptir.</li>
<li>Space complexity (Alan Karmaşıklığı) : O(1), çünkü algoritma sabit miktarda ekstra alan kullanır.</li>
</ul>
]]></content>
		</item>
		
		<item>
			<title>Leetcode 252 Meeting Rooms</title>
			<link>https://www.dincerbakkal.com/posts/leetcode252/</link>
			<pubDate>Sun, 14 Mar 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode252/</guid>
			<description>-Böyle bir durumda ilk olarak toplantıları başlangıç yada bitiş saatine göre sıralamamız gerekir.
-Başlangıç saatlerine göre sıralarsak -&amp;gt; [[0,30],[5,10],[15,20]]
-Daha sonra sırası ile önceki toplantının bitiş saati (prev[1]) ile sonraki toplantının başlangıç saatini interval[0] karşılaştırırız.interval[0] &amp;lt; prev[1] ise toplantıya katılamaz.
-Aksi halde true döneriz.
def canAttendMeetings(self, intervals: List[List[int]]) -&amp;gt; bool: intervals = sorted(intervals, key=lambda interval:interval[0]) prev = None for interval in intervals: if prev and interval[0] &amp;lt; prev[1]: return False prev = interval return True </description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<!-- raw HTML omitted -->
<p>-Böyle bir durumda ilk olarak toplantıları başlangıç yada bitiş saatine göre sıralamamız gerekir.</p>
<p>-Başlangıç saatlerine göre sıralarsak -&gt; [[0,30],[5,10],[15,20]]</p>
<p>-Daha sonra sırası ile önceki toplantının bitiş saati (prev[1]) ile sonraki toplantının başlangıç saatini interval[0] karşılaştırırız.interval[0] &lt; prev[1] ise toplantıya katılamaz.</p>
<p>-Aksi halde true döneriz.</p>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python">     <span class="k">def</span> <span class="nf">canAttendMeetings</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">intervals</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">]])</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
        
        <span class="n">intervals</span> <span class="o">=</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">intervals</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="k">lambda</span> <span class="n">interval</span><span class="p">:</span><span class="n">interval</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
        
        <span class="n">prev</span> <span class="o">=</span> <span class="kc">None</span>
        
        <span class="k">for</span> <span class="n">interval</span> <span class="ow">in</span> <span class="n">intervals</span><span class="p">:</span>
            <span class="k">if</span> <span class="n">prev</span> <span class="ow">and</span> <span class="n">interval</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">&lt;</span> <span class="n">prev</span><span class="p">[</span><span class="mi">1</span><span class="p">]:</span>
                <span class="k">return</span> <span class="kc">False</span>
            
            <span class="n">prev</span> <span class="o">=</span> <span class="n">interval</span>
            
        
        <span class="k">return</span> <span class="kc">True</span>
</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 021 Merge Two Sorted Lists</title>
			<link>https://www.dincerbakkal.com/posts/leetcode021/</link>
			<pubDate>Sat, 13 Mar 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode021/</guid>
			<description>Soru Merge two sorted linked lists and return it as a sorted list. The list should be made by splicing together the nodes of the first two lists.
Örnek 1  Input: l1 = [1,2,4], l2 = [1,3,4] Output: [1,1,2,3,4,4] Örnek 2 Input: l1 = [], l2 = [] Output: [] Örnek 3 Input: l1 = [], l2 = [0] Output: [0] Çözüm  İki sıralı bağlı listeyi birleştirmenizi ve tek sıralı bir bağlı liste oluşturmanızı ister.</description>
			<content type="html"><![CDATA[<h3 id="soru">Soru</h3>
<p>Merge two sorted linked lists and return it as a sorted list. The list should be made by splicing together the nodes of the first two lists.</p>
<h3 id="örnek-1">Örnek 1</h3>
<figure><img src="/image/21ex1.png"
         alt="image"/>
</figure>

<pre><code>Input: l1 = [1,2,4], l2 = [1,3,4]
Output: [1,1,2,3,4,4]
</code></pre><h3 id="örnek-2">Örnek 2</h3>
<pre><code>Input: l1 = [], l2 = []
Output: []
</code></pre><h3 id="örnek-3">Örnek 3</h3>
<pre><code>Input: l1 = [], l2 = [0]
Output: [0]
</code></pre><h3 id="çözüm">Çözüm</h3>
<ul>
<li>İki sıralı bağlı listeyi birleştirmenizi ve tek sıralı bir bağlı liste oluşturmanızı ister. Bu problem, iki sıralı bağlı listenin elemanlarını küçükten büyüğe doğru birleştirerek yeni bir sıralı liste oluşturmayı gerektirir.</li>
<li>Girdi: İki sıralı tek yönlü bağlı liste başı l1 ve l2.</li>
<li>Çıktı: l1 ve l2&rsquo;nin elemanları ile oluşturulan yeni sıralı tek yönlü bağlı liste.</li>
<li>Bu problem yinelemeli (iterative) veya özyinelemeli (recursive) yöntemlerle çözülebilir. Her iki yöntem de, iki listenin başlarından başlayarak karşılaştırmalar yapar ve daha küçük olan düğümü sonuç listesine ekler.</li>
<li>Çalışma Mekanizması:</li>
<li>Yinelemeli Yöntem:</li>
<li>İki liste başından itibaren elemanları karşılaştırır.</li>
<li>Daha küçük olan düğümü yeni listeye ekler ve ilgili listenin başını bir sonraki düğüme taşır.</li>
<li>Karşılaştırma bittiğinde, kalan elemanları yeni listeye ekler.</li>
<li>Özyinelemeli Yöntem:</li>
<li>l1&rsquo;in değeri l2&rsquo;den büyükse, l1 ve l2 yer değiştirir.</li>
<li>Daha küçük düğüm (l1), l1.next ile kendisinden sonra gelenleri özyinelemeli olarak birleştirmeye devam eder.</li>
</ul>
<h2 id="code">Code</h2>
<ul>
<li>Yinelemeli Çözüm Python Kodu:</li>
</ul>
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python">
<span class="k">class</span> <span class="nc">ListNode</span><span class="p">:</span>
    <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">val</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="nb">next</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">val</span> <span class="o">=</span> <span class="n">val</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">next</span> <span class="o">=</span> <span class="nb">next</span>

<span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">mergeTwoLists</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">l1</span><span class="p">,</span> <span class="n">l2</span><span class="p">):</span>
        <span class="n">dummy</span> <span class="o">=</span> <span class="n">ListNode</span><span class="p">()</span>  <span class="c1"># Yeni liste için dummy baş düğüm</span>
        <span class="n">tail</span> <span class="o">=</span> <span class="n">dummy</span>

        <span class="k">while</span> <span class="n">l1</span> <span class="ow">and</span> <span class="n">l2</span><span class="p">:</span>
            <span class="k">if</span> <span class="n">l1</span><span class="o">.</span><span class="n">val</span> <span class="o">&lt;</span> <span class="n">l2</span><span class="o">.</span><span class="n">val</span><span class="p">:</span>
                <span class="n">tail</span><span class="o">.</span><span class="n">next</span> <span class="o">=</span> <span class="n">l1</span>
                <span class="n">l1</span> <span class="o">=</span> <span class="n">l1</span><span class="o">.</span><span class="n">next</span>
            <span class="k">else</span><span class="p">:</span>
                <span class="n">tail</span><span class="o">.</span><span class="n">next</span> <span class="o">=</span> <span class="n">l2</span>
                <span class="n">l2</span> <span class="o">=</span> <span class="n">l2</span><span class="o">.</span><span class="n">next</span>
            <span class="n">tail</span> <span class="o">=</span> <span class="n">tail</span><span class="o">.</span><span class="n">next</span>

        <span class="c1"># Kalan elemanları ekleyin</span>
        <span class="n">tail</span><span class="o">.</span><span class="n">next</span> <span class="o">=</span> <span class="n">l1</span> <span class="k">if</span> <span class="n">l1</span> <span class="k">else</span> <span class="n">l2</span>

        <span class="k">return</span> <span class="n">dummy</span><span class="o">.</span><span class="n">next</span>

</code></pre></div><ul>
<li>Özyinelemeli Çözüm Python Kodu:</li>
</ul>
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python">
<span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">mergeTwoLists</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">l1</span><span class="p">,</span> <span class="n">l2</span><span class="p">):</span>
        <span class="k">if</span> <span class="ow">not</span> <span class="n">l1</span> <span class="ow">or</span> <span class="p">(</span><span class="n">l2</span> <span class="ow">and</span> <span class="n">l1</span><span class="o">.</span><span class="n">val</span> <span class="o">&gt;</span> <span class="n">l2</span><span class="o">.</span><span class="n">val</span><span class="p">):</span>
            <span class="n">l1</span><span class="p">,</span> <span class="n">l2</span> <span class="o">=</span> <span class="n">l2</span><span class="p">,</span> <span class="n">l1</span>  <span class="c1"># l1 her zaman daha küçük veya eşit elemanı göstermeli</span>
        <span class="k">if</span> <span class="n">l1</span><span class="p">:</span>
            <span class="n">l1</span><span class="o">.</span><span class="n">next</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">mergeTwoLists</span><span class="p">(</span><span class="n">l1</span><span class="o">.</span><span class="n">next</span><span class="p">,</span> <span class="n">l2</span><span class="p">)</span>
        <span class="k">return</span> <span class="n">l1</span>


</code></pre></div><h3 id="complexity">Complexity</h3>
<ul>
<li>Time complexity Zaman Karmaşıklığı: Her iki yöntem için de O(n+m), burada n ve m iki bağlı listenin uzunluklarıdır.</li>
<li>Space complexity Alan Karmaşıklığı:
Yinelemeli yöntem için O(1), çünkü ekstra alan kullanılmaz.
Özyinelemeli yöntem için O(n+m), çünkü her çağrı için çağrı yığınında bir kayıt tutulur.</li>
</ul>
]]></content>
		</item>
		
		<item>
			<title>Leetcode 206 Reverse Linked List</title>
			<link>https://www.dincerbakkal.com/posts/leetcode206/</link>
			<pubDate>Fri, 12 Mar 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode206/</guid>
			<description>Soru Given the head of a singly linked list, reverse the list, and return the reversed list.
Örnek 1  Input: head = [1,2,3,4,5] Output: [5,4,3,2,1] Örnek 2  Input: head = [1,2] Output: [2,1] Örnek 3 Input: head = [] Output: [] Çözüm  Verilen tek yönlü bir bağlı listenin (linked list) elemanlarını ters çevirmenizi ister. Bu soru, verilen bir tek yönlü bağlı listenin düğümlerini ters sırayla düzenlemenizi ve ters çevrilen listenin başını (head) döndürmenizi gerektirir.</description>
			<content type="html"><![CDATA[<h3 id="soru">Soru</h3>
<p>Given the head of a singly linked list, reverse the list, and return the reversed list.</p>
<h3 id="örnek-1">Örnek 1</h3>
<figure><img src="/image/206ex1.png"
         alt="image"/>
</figure>

<pre><code>Input: head = [1,2,3,4,5]
Output: [5,4,3,2,1]
</code></pre><h3 id="örnek-2">Örnek 2</h3>
<figure><img src="/image/206ex2.png"
         alt="image"/>
</figure>

<pre><code>Input: head = [1,2]
Output: [2,1]
</code></pre><h3 id="örnek-3">Örnek 3</h3>
<pre><code>Input: head = []
Output: []
</code></pre><h3 id="çözüm">Çözüm</h3>
<ul>
<li>Verilen tek yönlü bir bağlı listenin (linked list) elemanlarını ters çevirmenizi ister. Bu soru, verilen bir tek yönlü bağlı listenin düğümlerini ters sırayla düzenlemenizi ve ters çevrilen listenin başını (head) döndürmenizi gerektirir.</li>
<li>Girdi: Tek yönlü bir bağlı listenin baş düğümü (head).</li>
<li>Çıktı: Aynı liste, ancak düğümler ters sıralı.</li>
<li>Bu problem genellikle yinelemeli (iterative) veya özyinelemeli (recursive) yöntemlerle çözülür. Her iki yöntem de liste düğümlerinin işaretçilerini (pointers) tersine çevirerek çalışır.</li>
<li>Çalışma Mekanizması:
Her iki çözüm de bağlı listenin düğümlerinin next işaretçilerini ters çevirerek listenin tersine çevrilmesini sağlar. Yinelemeli çözümde bu işlem bir döngü içinde, özyinelemeli çözümde ise özyinelemeli fonksiyon çağrılarıyla gerçekleştirilir.</li>
</ul>
<h2 id="code">Code</h2>
<ul>
<li>Yinelemeli Çözüm:
Yinelemeli çözümde, mevcut düğümü işlerken bir önceki düğümü izlemek için bir değişken kullanılır. Bu değişken, düğüm bağlantılarını ters çevirmek için gereklidir.</li>
</ul>
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">class</span> <span class="nc">ListNode</span><span class="p">:</span>
    <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">val</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="nb">next</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">val</span> <span class="o">=</span> <span class="n">val</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">next</span> <span class="o">=</span> <span class="nb">next</span>

<span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">reverseList</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">head</span><span class="p">):</span>
        <span class="n">prev</span> <span class="o">=</span> <span class="kc">None</span>
        <span class="n">current</span> <span class="o">=</span> <span class="n">head</span>
        <span class="k">while</span> <span class="n">current</span><span class="p">:</span>
            <span class="n">next_node</span> <span class="o">=</span> <span class="n">current</span><span class="o">.</span><span class="n">next</span>  <span class="c1"># Sonraki düğümü sakla</span>
            <span class="n">current</span><span class="o">.</span><span class="n">next</span> <span class="o">=</span> <span class="n">prev</span>  <span class="c1"># Mevcut düğümü ters çevir</span>
            <span class="n">prev</span> <span class="o">=</span> <span class="n">current</span>  <span class="c1"># Önceki düğümü güncelle</span>
            <span class="n">current</span> <span class="o">=</span> <span class="n">next_node</span>  <span class="c1"># İlerle</span>
        <span class="k">return</span> <span class="n">prev</span>  <span class="c1"># Yeni baş düğümü</span>

</code></pre></div><ul>
<li>Özyinelemeli Çözüm:
Özyinelemeli çözümde, fonksiyon kendisini liste sonuna kadar çağırır ve geri dönüş yolunda düğüm işaretçilerini tersine çevirir.</li>
</ul>
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">reverseList</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">head</span><span class="p">):</span>
        <span class="k">if</span> <span class="ow">not</span> <span class="n">head</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">head</span><span class="o">.</span><span class="n">next</span><span class="p">:</span>
            <span class="k">return</span> <span class="n">head</span>  <span class="c1"># Base case: Liste boş veya tek düğümlü</span>
        <span class="n">p</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">reverseList</span><span class="p">(</span><span class="n">head</span><span class="o">.</span><span class="n">next</span><span class="p">)</span>  <span class="c1"># Liste sonuna kadar git</span>
        <span class="n">head</span><span class="o">.</span><span class="n">next</span><span class="o">.</span><span class="n">next</span> <span class="o">=</span> <span class="n">head</span>  <span class="c1"># Ters çevirme işlemi</span>
        <span class="n">head</span><span class="o">.</span><span class="n">next</span> <span class="o">=</span> <span class="kc">None</span>  <span class="c1"># Eski baş düğümünü son düğüm yap</span>
        <span class="k">return</span> <span class="n">p</span>  <span class="c1"># Yeni baş düğümü</span>


</code></pre></div><h3 id="complexity">Complexity</h3>
<ul>
<li>Time complexity (Zaman Karmaşıklığı): Her iki çözüm için de O(n), burada n düğüm sayısıdır.</li>
<li>Space complexity (Alan Karmaşıklığı):
Yinelemeli çözüm için O(1), çünkü sadece sabit miktarda ekstra alan kullanılır.
Özyinelemeli çözüm için O(n), özyinelemeli çağrılar için çağrı yığınında n adet kayıt tutulur.</li>
</ul>
]]></content>
		</item>
		
		<item>
			<title>Leetcode 83 Remove Duplicates from Sorted List</title>
			<link>https://www.dincerbakkal.com/posts/leetcode083/</link>
			<pubDate>Thu, 11 Mar 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode083/</guid>
			<description># Definition for singly-linked list. class ListNode: def __init__(self, x): self.val = x self.next = None def deleteDuplicates(self, head: ListNode) -&amp;gt; ListNode: cur = head while cur: if cur.next and cur.next.val == cur.val: cur.next = cur.next.next else: cur = cur.next return head </description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="c1"># Definition for singly-linked list.</span>
 <span class="k">class</span> <span class="nc">ListNode</span><span class="p">:</span>
     <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">x</span><span class="p">):</span>
         <span class="bp">self</span><span class="o">.</span><span class="n">val</span> <span class="o">=</span> <span class="n">x</span>
         <span class="bp">self</span><span class="o">.</span><span class="n">next</span> <span class="o">=</span> <span class="kc">None</span>
        

    <span class="k">def</span> <span class="nf">deleteDuplicates</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">head</span><span class="p">:</span> <span class="n">ListNode</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">ListNode</span><span class="p">:</span>
        <span class="n">cur</span> <span class="o">=</span> <span class="n">head</span>
        <span class="k">while</span> <span class="n">cur</span><span class="p">:</span>
            <span class="k">if</span> <span class="n">cur</span><span class="o">.</span><span class="n">next</span> <span class="ow">and</span> <span class="n">cur</span><span class="o">.</span><span class="n">next</span><span class="o">.</span><span class="n">val</span> <span class="o">==</span> <span class="n">cur</span><span class="o">.</span><span class="n">val</span><span class="p">:</span>
                <span class="n">cur</span><span class="o">.</span><span class="n">next</span> <span class="o">=</span> <span class="n">cur</span><span class="o">.</span><span class="n">next</span><span class="o">.</span><span class="n">next</span>
            <span class="k">else</span><span class="p">:</span>
                <span class="n">cur</span> <span class="o">=</span> <span class="n">cur</span><span class="o">.</span><span class="n">next</span>
        <span class="k">return</span> <span class="n">head</span>
</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 203 Remove Linked List Elements</title>
			<link>https://www.dincerbakkal.com/posts/leetcode203/</link>
			<pubDate>Tue, 09 Mar 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode203/</guid>
			<description>Silme işlemi için prev adında bir değişken oluştururuz.Amacımı current node önceki node&amp;rsquo;un elimizde olmasıdır.Eğer curren node silmek istersek tek yapacağımız önceki node&amp;rsquo;u next node bağlamak olacaktır.
# Definition for singly-linked list. class ListNode: def __init__(self, x): self.val = x self.next = None def removeElements(self, head: ListNode, val: int) -&amp;gt; ListNode: dummy = ListNode(next=head) prev, curr = dummy, head while curr: nxt = curr.next if curr.val == val: prev.next = nxt else: prev = curr curr = nxt return dummy.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<!-- raw HTML omitted -->
<p>Silme işlemi için prev adında bir değişken oluştururuz.Amacımı current node önceki node&rsquo;un elimizde olmasıdır.Eğer curren node silmek istersek tek yapacağımız önceki node&rsquo;u next node bağlamak olacaktır.</p>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python">
<span class="c1"># Definition for singly-linked list.</span>
 <span class="k">class</span> <span class="nc">ListNode</span><span class="p">:</span>
     <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">x</span><span class="p">):</span>
         <span class="bp">self</span><span class="o">.</span><span class="n">val</span> <span class="o">=</span> <span class="n">x</span>
         <span class="bp">self</span><span class="o">.</span><span class="n">next</span> <span class="o">=</span> <span class="kc">None</span>
        

    <span class="k">def</span> <span class="nf">removeElements</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">head</span><span class="p">:</span> <span class="n">ListNode</span><span class="p">,</span> <span class="n">val</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">ListNode</span><span class="p">:</span>

        <span class="n">dummy</span> <span class="o">=</span> <span class="n">ListNode</span><span class="p">(</span><span class="nb">next</span><span class="o">=</span><span class="n">head</span><span class="p">)</span>
        <span class="n">prev</span><span class="p">,</span> <span class="n">curr</span> <span class="o">=</span> <span class="n">dummy</span><span class="p">,</span> <span class="n">head</span>

        <span class="k">while</span> <span class="n">curr</span><span class="p">:</span>
            <span class="n">nxt</span> <span class="o">=</span> <span class="n">curr</span><span class="o">.</span><span class="n">next</span>

            <span class="k">if</span> <span class="n">curr</span><span class="o">.</span><span class="n">val</span> <span class="o">==</span> <span class="n">val</span><span class="p">:</span>
                <span class="n">prev</span><span class="o">.</span><span class="n">next</span> <span class="o">=</span> <span class="n">nxt</span>
            <span class="k">else</span><span class="p">:</span>
                <span class="n">prev</span> <span class="o">=</span> <span class="n">curr</span>
            <span class="n">curr</span> <span class="o">=</span> <span class="n">nxt</span>
        <span class="k">return</span> <span class="n">dummy</span><span class="o">.</span><span class="n">next</span>
</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 234 Palindrome Linked List</title>
			<link>https://www.dincerbakkal.com/posts/leetcode234/</link>
			<pubDate>Mon, 08 Mar 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode234/</guid>
			<description>Follow up: Could you do it in O(n) time and O(1) space?
# Definition for singly-linked list. class ListNode: def __init__(self, x): self.val = x self.next = None def isPalindrome(self, head: ListNode) -&amp;gt; bool: fast = head slow = head #orta elemanı bulalım(slow) while fast and fast.next: fast = fast.next.next slow = slow.next #2. parçayı terse çevir prev = None while slow: tmp = slow.next slow.next = prev prev = slow slow = tmp #palindrome kontrol edelim left,right = head,prev while right: if left.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>Follow up: Could you do it in O(n) time and O(1) space?</p>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python">
<span class="c1"># Definition for singly-linked list.</span>
 <span class="k">class</span> <span class="nc">ListNode</span><span class="p">:</span>
     <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">x</span><span class="p">):</span>
         <span class="bp">self</span><span class="o">.</span><span class="n">val</span> <span class="o">=</span> <span class="n">x</span>
         <span class="bp">self</span><span class="o">.</span><span class="n">next</span> <span class="o">=</span> <span class="kc">None</span>
        

    <span class="k">def</span> <span class="nf">isPalindrome</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">head</span><span class="p">:</span> <span class="n">ListNode</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
        <span class="n">fast</span> <span class="o">=</span> <span class="n">head</span>
        <span class="n">slow</span> <span class="o">=</span> <span class="n">head</span>

        <span class="c1">#orta elemanı bulalım(slow)</span>
        <span class="k">while</span> <span class="n">fast</span> <span class="ow">and</span> <span class="n">fast</span><span class="o">.</span><span class="n">next</span><span class="p">:</span>
            <span class="n">fast</span> <span class="o">=</span> <span class="n">fast</span><span class="o">.</span><span class="n">next</span><span class="o">.</span><span class="n">next</span>
            <span class="n">slow</span> <span class="o">=</span> <span class="n">slow</span><span class="o">.</span><span class="n">next</span>

        <span class="c1">#2. parçayı terse çevir</span>
        <span class="n">prev</span> <span class="o">=</span> <span class="kc">None</span>
        <span class="k">while</span> <span class="n">slow</span><span class="p">:</span>
            <span class="n">tmp</span> <span class="o">=</span> <span class="n">slow</span><span class="o">.</span><span class="n">next</span>
            <span class="n">slow</span><span class="o">.</span><span class="n">next</span> <span class="o">=</span> <span class="n">prev</span>
            <span class="n">prev</span> <span class="o">=</span> <span class="n">slow</span>
            <span class="n">slow</span> <span class="o">=</span> <span class="n">tmp</span>
        <span class="c1">#palindrome kontrol edelim</span>
        <span class="n">left</span><span class="p">,</span><span class="n">right</span> <span class="o">=</span> <span class="n">head</span><span class="p">,</span><span class="n">prev</span>
        <span class="k">while</span> <span class="n">right</span><span class="p">:</span>
            <span class="k">if</span> <span class="n">left</span><span class="o">.</span><span class="n">val</span> <span class="o">!=</span> <span class="n">right</span><span class="o">.</span><span class="n">val</span><span class="p">:</span>
                <span class="k">return</span> <span class="kc">False</span>
            <span class="n">left</span> <span class="o">=</span> <span class="n">left</span><span class="o">.</span><span class="n">next</span>
            <span class="n">right</span> <span class="o">=</span> <span class="n">right</span><span class="o">.</span><span class="n">next</span>
        <span class="k">return</span> <span class="kc">True</span>
</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 141 Linked List Cycle</title>
			<link>https://www.dincerbakkal.com/posts/leetcode141/</link>
			<pubDate>Thu, 04 Mar 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode141/</guid>
			<description>Soru Given head, the head of a linked list, determine if the linked list has a cycle in it.
There is a cycle in a linked list if there is some node in the list that can be reached again by continuously following the next pointer. Internally, pos is used to denote the index of the node that tail&amp;rsquo;s next pointer is connected to. Note that pos is not passed as a parameter.</description>
			<content type="html"><![CDATA[<h3 id="soru">Soru</h3>
<p>Given head, the head of a linked list, determine if the linked list has a cycle in it.</p>
<p>There is a cycle in a linked list if there is some node in the list that can be reached again by continuously following the next pointer. Internally, pos is used to denote the index of the node that tail&rsquo;s next pointer is connected to. Note that pos is not passed as a parameter.</p>
<p>Return true if there is a cycle in the linked list. Otherwise, return false.</p>
<p>Follow up: Can you solve it using O(1) (i.e. constant) memory?</p>
<h3 id="örnek-1">Örnek 1</h3>
<figure><img src="/image/circularlinkedlist.png"
         alt="image"/>
</figure>

<pre><code>Input
Input: head = [3,2,0,-4], pos = 1
Output: true
Explanation: There is a cycle in the linked list, where the tail connects to the 1st node (0-indexed).
</code></pre><h3 id="örnek-2">Örnek 2</h3>
<figure><img src="/image/circularlinkedlist_test2.png"
         alt="image"/>
</figure>

<pre><code>Input: head = [1,2], pos = 0
Output: true
Explanation: There is a cycle in the linked list, where the tail connects to the 0th node.
</code></pre><h3 id="örnek-3">Örnek 3</h3>
<figure><img src="/image/circularlinkedlist_test3.png"
         alt="image"/>
</figure>

<pre><code>Input: head = [1], pos = -1
Output: false
Explanation: There is no cycle in the linked list.
</code></pre><h3 id="çözüm">Çözüm</h3>
<ul>
<li>Bir bağlı listenin (linked list) döngü içerip içermediğini kontrol etmenizi ister. Bu problem, bir bağlı liste verildiğinde, listenin herhangi bir noktasında düğümlerin tekrar başa dönüp dönmediğini (yani döngü oluşturup oluşturmadığını) belirlemenizi gerektirir.</li>
<li>Girdi: Bir bağlı listenin baş düğümü (head).</li>
<li>Çıktı: Eğer liste bir döngü içeriyorsa true, aksi takdirde false.</li>
<li>Bu problemi çözmek için yaygın kullanılan iki yöntem vardır: Floyd&rsquo;un Çevrim Tespiti Algoritması (tortoise and hare algoritması) ve Hash Tablosu kullanımı.</li>
<li>Floyd&rsquo;un Çevrim Tespiti Algoritması (Hare and Tortoise):
Bu yöntemde, iki işaretçi (pointer) kullanılır: biri yavaş (tortoise) diğeri hızlı (hare). Yavaş işaretçi her adımda bir düğüm, hızlı işaretçi her adımda iki düğüm ilerler. Eğer liste içinde bir döngü varsa, bu iki işaretçi bir noktada kesinlikle karşılaşacaktır. Karşılaşmaları, döngünün varlığını gösterir.</li>
<li>Hash Tablosu Kullanımı:
Bu yöntemde, ziyaret edilen düğümler bir hash tablosunda veya sette saklanır. Her düğüm ziyaret edildiğinde, bu düğüm daha önce ziyaret edilmiş mi diye kontrol edilir. Eğer bir düğüm daha önce ziyaret edilmişse, bu bir döngü olduğunu gösterir.</li>
<li>Çalışma Mekanizması:</li>
<li>İşaretçilerin İnitialize Edilmesi: slow başlangıçta baş düğümde, fast ise baş düğümün bir sonraki düğümünde başlar.</li>
<li>Döngü: slow her adımda bir düğüm, fast her adımda iki düğüm ilerler. Eğer fast veya fast.next None olursa, bu listenin sonuna ulaşıldığını ve döngü olmadığını gösterir.</li>
<li>Sonuç: Eğer slow ve fast işaretçileri aynı düğümde buluşursa, liste içinde bir döngü olduğu anlamına gelir.</li>
</ul>
<h2 id="code">Code</h2>
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python">
<span class="k">class</span> <span class="nc">ListNode</span><span class="p">:</span>
    <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">val</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="nb">next</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">val</span> <span class="o">=</span> <span class="n">val</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">next</span> <span class="o">=</span> <span class="nb">next</span>

<span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">hasCycle</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">head</span><span class="p">):</span>
        <span class="k">if</span> <span class="ow">not</span> <span class="n">head</span><span class="p">:</span>
            <span class="k">return</span> <span class="kc">False</span>
        
        <span class="n">slow</span> <span class="o">=</span> <span class="n">head</span>
        <span class="n">fast</span> <span class="o">=</span> <span class="n">head</span><span class="o">.</span><span class="n">next</span>
        
        <span class="k">while</span> <span class="n">slow</span> <span class="o">!=</span> <span class="n">fast</span><span class="p">:</span>
            <span class="k">if</span> <span class="ow">not</span> <span class="n">fast</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">fast</span><span class="o">.</span><span class="n">next</span><span class="p">:</span>
                <span class="k">return</span> <span class="kc">False</span>
            <span class="n">slow</span> <span class="o">=</span> <span class="n">slow</span><span class="o">.</span><span class="n">next</span>
            <span class="n">fast</span> <span class="o">=</span> <span class="n">fast</span><span class="o">.</span><span class="n">next</span><span class="o">.</span><span class="n">next</span>
        
        <span class="k">return</span> <span class="kc">True</span>

</code></pre></div><h3 id="complexity">Complexity</h3>
<ul>
<li>Time complexity (Zaman Karmaşıklığı): O(n), burada n düğüm sayısıdır. En kötü durumda tüm düğümleri ziyaret edebiliriz.</li>
<li>Space complexity (Alan Karmaşıklığı): O(1) Floyd&rsquo;un Çevrim Tespiti Algoritması için, çünkü ekstra bir alan kullanılmaz. Hash tablosu kullanıldığında alan karmaşıklığı O(n) olur.</li>
</ul>
]]></content>
		</item>
		
		<item>
			<title>Leetcode 303 Range Sum Query - Immutable</title>
			<link>https://www.dincerbakkal.com/posts/leetcode303/</link>
			<pubDate>Thu, 04 Mar 2021 19:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode303/</guid>
			<description>Calculate the sum of the elements of nums between indices left and right inclusive where left &amp;lt;= right.
Implement the NumArray class:
NumArray(int[] nums) Initializes the object with the integer array nums.
int sumRange(int left, int right) Returns the sum of the elements of nums between indices left and right inclusive (i.e. nums[left] + nums[left + 1] + &amp;hellip; + nums[right]).
Explanation NumArray numArray = new NumArray([-2, 0, 3, -5, 2, -1]); numArray.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>Calculate the sum of the elements of nums between indices left and right inclusive where left &lt;= right.</p>
<p>Implement the NumArray class:</p>
<p>NumArray(int[] nums) Initializes the object with the integer array nums.</p>
<p>int sumRange(int left, int right) Returns the sum of the elements of nums between indices left and right inclusive (i.e. nums[left] + nums[left + 1] + &hellip; + nums[right]).</p>
<!-- raw HTML omitted -->
<p>Explanation
NumArray numArray = new NumArray([-2, 0, 3, -5, 2, -1]);
numArray.sumRange(0, 2); // return (-2) + 0 + 3 = 1
numArray.sumRange(2, 5); // return 3 + (-5) + 2 + (-1) = -1
numArray.sumRange(0, 5); // return (-2) + 0 + 3 + (-5) + 2 + (-1) = -3</p>
<pre><code>&lt;h3&gt;Çözüm&lt;/h3&gt;
Dinamik programlama ile çözülebilir.
Liste yüklenirken oluşturulan bir listeye tüm sayılara kadar olan toplamlar hesaplanıp atanır.

```python
for i in range(len(nums)):
            self.sum[i+1] = self.sum[i] + nums[i]
</code></pre><p>Daha sonra istenilen aralıktaki toplamı bulmak için o aralığın indexlerine atanan değerlerin farkı alınır.</p>
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sum</span><span class="p">[</span><span class="n">j</span><span class="o">+</span><span class="mi">1</span><span class="p">]</span> <span class="o">-</span> <span class="bp">self</span><span class="o">.</span><span class="n">sum</span><span class="p">[</span><span class="n">i</span><span class="p">]</span>
</code></pre></div><!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">class</span> <span class="nc">NumArray</span><span class="p">:</span>

    <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">nums</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">]):</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">sum</span> <span class="o">=</span> <span class="p">[</span><span class="mi">0</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">nums</span><span class="p">)</span><span class="o">+</span><span class="mi">1</span><span class="p">)]</span>
        <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">nums</span><span class="p">)):</span>
            <span class="bp">self</span><span class="o">.</span><span class="n">sum</span><span class="p">[</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sum</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">+</span> <span class="n">nums</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> 
        

    <span class="k">def</span> <span class="nf">sumRange</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">i</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span> <span class="n">j</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sum</span><span class="p">[</span><span class="n">j</span><span class="o">+</span><span class="mi">1</span><span class="p">]</span> <span class="o">-</span> <span class="bp">self</span><span class="o">.</span><span class="n">sum</span><span class="p">[</span><span class="n">i</span><span class="p">]</span>
</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 53 Maximum Subarray</title>
			<link>https://www.dincerbakkal.com/posts/leetcode053/</link>
			<pubDate>Wed, 03 Mar 2021 21:15:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode053/</guid>
			<description>Follow up: If you have figured out the O(n) solution, try coding another solution using the divide and conquer approach, which is more subtle.
Ana paterni bulalım.Ana mantık elimizdeki sayıyı toplamı en büyük olan kümeye eklemek. Eğer yeni toplam kümesi önceki toplam kümeden büyükse yeni toplam kümesini en büyük toplam küme yaparız. dp[i] = max(dp[i-1]+nums[i], nums[i]) Eğer yeni toplam kümesi önceki toplam kümeden küçükse önceki en büyük toplam kümesini bırakır şu anki sayı ilk index olacak şekilde yeni bir kümeye başlarız.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>Follow up: If you have figured out the O(n) solution, try coding another solution using the divide and conquer approach, which is more subtle.</p>
<!-- raw HTML omitted -->
<p>Ana paterni bulalım.Ana mantık elimizdeki sayıyı toplamı en büyük olan kümeye eklemek.
Eğer yeni toplam kümesi önceki toplam kümeden büyükse yeni toplam kümesini en büyük toplam küme yaparız.
dp[i] = max(dp[i-1]+nums[i], nums[i])
Eğer yeni toplam kümesi önceki toplam kümeden küçükse önceki en büyük toplam kümesini bırakır şu anki sayı ilk index olacak şekilde yeni bir kümeye başlarız.</p>
<!-- raw HTML omitted -->
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">def</span> <span class="nf">maxSubArray</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">nums</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
        <span class="n">dp</span> <span class="o">=</span> <span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="nb">len</span><span class="p">(</span><span class="n">nums</span><span class="p">)</span>
        <span class="n">dp</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="n">nums</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
        <span class="n">max_num</span> <span class="o">=</span> <span class="n">nums</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
        <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">nums</span><span class="p">)):</span>
            <span class="n">dp</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="n">dp</span><span class="p">[</span><span class="n">i</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">+</span><span class="n">nums</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="n">nums</span><span class="p">[</span><span class="n">i</span><span class="p">])</span>
            <span class="k">if</span> <span class="n">dp</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">&gt;</span><span class="n">max_num</span><span class="p">:</span> <span class="n">max_num</span> <span class="o">=</span> <span class="n">dp</span><span class="p">[</span><span class="n">i</span><span class="p">]</span>
        <span class="k">return</span> <span class="n">max_num</span>
</code></pre></div><!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">def</span> <span class="nf">maxSubArray</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">nums</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
        <span class="k">if</span> <span class="nb">max</span><span class="p">(</span><span class="n">nums</span><span class="p">)</span><span class="o">&lt;</span><span class="mi">0</span><span class="p">:</span>
            <span class="k">return</span> <span class="nb">max</span><span class="p">(</span><span class="n">nums</span><span class="p">)</span>
        <span class="n">curr_sum</span><span class="p">,</span> <span class="n">max_sum</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span>
        <span class="k">for</span> <span class="n">num</span> <span class="ow">in</span> <span class="n">nums</span><span class="p">:</span>
            <span class="n">curr_sum</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">curr_sum</span> <span class="o">+</span> <span class="n">num</span><span class="p">)</span>
            <span class="n">max_sum</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="n">curr_sum</span><span class="p">,</span> <span class="n">max_sum</span><span class="p">)</span>
        <span class="k">return</span> <span class="n">max_sum</span>
</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 121 Best Time to Buy and Sell Stock</title>
			<link>https://www.dincerbakkal.com/posts/leetcode121/</link>
			<pubDate>Tue, 02 Mar 2021 23:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode121/</guid>
			<description>Soru You are given an array prices where prices[i] is the price of a given stock on the ith day.
You want to maximize your profit by choosing a single day to buy one stock and choosing a different day in the future to sell that stock.
Return the maximum profit you can achieve from this transaction. If you cannot achieve any profit, return 0.
Örnek 1 Input: prices = [7,1,5,3,6,4] Output: 5 Explanation: Buy on day 2 (price = 1) and sell on day 5 (price = 6), profit = 6-1 = 5.</description>
			<content type="html"><![CDATA[<h3 id="soru">Soru</h3>
<p>You are given an array prices where prices[i] is the price of a given stock on the ith day.</p>
<p>You want to maximize your profit by choosing a single day to buy one stock and choosing a different day in the future to sell that stock.</p>
<p>Return the maximum profit you can achieve from this transaction. If you cannot achieve any profit, return 0.</p>
<h3 id="örnek-1">Örnek 1</h3>
<pre><code>Input: prices = [7,1,5,3,6,4]
Output: 5
Explanation: Buy on day 2 (price = 1) and sell on day 5 (price = 6), profit = 6-1 = 5.
Note that buying on day 2 and selling on day 1 is not allowed because you must buy before you sell.
</code></pre><h3 id="örnek-2">Örnek 2</h3>
<pre><code>Input: prices = [7,6,4,3,1]
Output: 0
Explanation: In this case, no transactions are done and the max profit = 0.
</code></pre><h3 id="çözüm">Çözüm</h3>
<ul>
<li>Bir dizi günlük hisse senedi fiyatları verildiğinde, en yüksek kârı elde etmek için hisse senedi alım ve satım zamanlarını belirlemenizi ister. Bu problemde, yalnızca bir işlem yapma şansınız var; yani bir kez satın alabilir ve bir kez satabilirsiniz. Amaç, verilen fiyat listesine dayanarak mümkün olan en yüksek kârı hesaplamaktır.</li>
<li>Girdi: Günlük hisse senedi fiyatlarını içeren bir tam sayı dizisi prices.</li>
<li>Çıktı: Elde edilebilecek maksimum kâr miktarı.</li>
<li>Bu problem için en etkili yöntem, lineer zaman karmaşıklığına sahip bir algoritmadır. Her günün fiyatı için, o güne kadar gördüğünüz en düşük fiyatı ve o fiyatla o gün arasındaki potansiyel kârı takip edersiniz.</li>
<li>Çalışma Mekanizması:</li>
<li>Başlangıç Değerlerinin Belirlenmesi: min_price başlangıçta sonsuz olarak ayarlanır, max_profit ise 0 olarak başlar.</li>
<li>Döngü ile İşlem: Her gün için fiyatlar dizisi döngüye alınır. Eğer mevcut fiyat, şimdiye kadar gördüğünüz en düşük fiyatdan düşükse, bu en düşük fiyatı güncellersiniz. Eğer mevcut fiyat ile en düşük fiyat arasındaki fark, şimdiye kadar hesaplanan maksimum kârdan fazlaysa, maksimum kârı bu farkla güncellersiniz.</li>
<li>Maksimum Kârın Dönüşü: İşlemler tamamlandığında, hesaplanan maksimum kâr değeri döndürülür.</li>
</ul>
<h2 id="code">Code</h2>
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">maxProfit</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">prices</span><span class="p">):</span>
        <span class="k">if</span> <span class="ow">not</span> <span class="n">prices</span><span class="p">:</span>
            <span class="k">return</span> <span class="mi">0</span>

        <span class="n">min_price</span> <span class="o">=</span> <span class="nb">float</span><span class="p">(</span><span class="s1">&#39;inf&#39;</span><span class="p">)</span>
        <span class="n">max_profit</span> <span class="o">=</span> <span class="mi">0</span>
        
        <span class="k">for</span> <span class="n">price</span> <span class="ow">in</span> <span class="n">prices</span><span class="p">:</span>
            <span class="k">if</span> <span class="n">price</span> <span class="o">&lt;</span> <span class="n">min_price</span><span class="p">:</span>
                <span class="n">min_price</span> <span class="o">=</span> <span class="n">price</span>  <span class="c1"># En düşük fiyatı güncelle</span>
            <span class="k">elif</span> <span class="n">price</span> <span class="o">-</span> <span class="n">min_price</span> <span class="o">&gt;</span> <span class="n">max_profit</span><span class="p">:</span>
                <span class="n">max_profit</span> <span class="o">=</span> <span class="n">price</span> <span class="o">-</span> <span class="n">min_price</span>  <span class="c1"># Maksimum kârı güncelle</span>

        <span class="k">return</span> <span class="n">max_profit</span>

</code></pre></div><h3 id="complexity">Complexity</h3>
<ul>
<li>Time complexity (Zaman Karmaşıklığı) : O(n), burada n fiyatlar dizisinin uzunluğudur. Dizi boyunca bir kez geçiş yapılır.</li>
<li>Space complexity (Alan Karmaşıklığı) : O(1), herhangi bir ekstra alan kullanılmaz.</li>
</ul>
]]></content>
		</item>
		
		<item>
			<title>Leetcode 070 Climbing Stairs</title>
			<link>https://www.dincerbakkal.com/posts/leetcode070/</link>
			<pubDate>Mon, 01 Mar 2021 23:12:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode070/</guid>
			<description>Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top?
Bize verilen basamağa kaç farklı adımlama ile çıkacağımızı bulmak için ondan önceki 2 basamaktaki farklı adımları toplarız.
dp[i] = db[i-1] + dp [i-2]
class Solution: def climbStairs(self, n: int) -&amp;gt; int: if n&amp;lt;=2: return n dp = [0]*(n+1) # [0,0,0,0,0,0,0,0,0,0,0,0,0...] sıfırlardan oluşan bir liste oluşturduk. dp[1] = 1 dp[2] = 2 for i in range(3,n+1): dp[i] = dp[i-1]+dp[i-2] return dp[n] </description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top?</p>
<!-- raw HTML omitted -->
<p>Bize verilen basamağa kaç farklı adımlama ile çıkacağımızı bulmak için ondan önceki 2 basamaktaki farklı adımları toplarız.</p>
<p>dp[i] = db[i-1] + dp [i-2]</p>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
<span class="k">def</span> <span class="nf">climbStairs</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">n</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
        <span class="k">if</span> <span class="n">n</span><span class="o">&lt;=</span><span class="mi">2</span><span class="p">:</span> <span class="k">return</span> <span class="n">n</span>
        <span class="n">dp</span> <span class="o">=</span> <span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="p">(</span><span class="n">n</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span> <span class="c1"># [0,0,0,0,0,0,0,0,0,0,0,0,0...] sıfırlardan oluşan bir liste oluşturduk.</span>
        <span class="n">dp</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="mi">1</span>
        <span class="n">dp</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="o">=</span> <span class="mi">2</span>
        <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span><span class="n">n</span><span class="o">+</span><span class="mi">1</span><span class="p">):</span>
            <span class="n">dp</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="n">dp</span><span class="p">[</span><span class="n">i</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">+</span><span class="n">dp</span><span class="p">[</span><span class="n">i</span><span class="o">-</span><span class="mi">2</span><span class="p">]</span>
        <span class="k">return</span> <span class="n">dp</span><span class="p">[</span><span class="n">n</span><span class="p">]</span>
</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 268 Missing Number</title>
			<link>https://www.dincerbakkal.com/posts/leetcode268/</link>
			<pubDate>Tue, 23 Feb 2021 22:19:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode268/</guid>
			<description>Follow up: Could you implement a solution using only O(1) extra space complexity and O(n) runtime complexity?
 Input: nums = [3,0,1] Output: 2  Input: nums = [9,6,4,2,3,5,7,0,1] Output: 8  Toplama yönteminde 1&amp;rsquo;den n&amp;rsquo;e kadar olan sayıların toplamı bulunur ve bu toplamdan elimizdeki listenin toplamı çıkarılır.Bu bize eksik olan sayıyı verecektir.   Elimizdeki listeyi XOR layarak eksik olan elemana ulaşabiliriz.  Eksik Eleman =4∧(0∧0)∧(1∧1)∧(2∧3)∧(3∧4) =(4∧4)∧(0∧0)∧(1∧1)∧(3∧3)∧2 =0∧0∧0∧0∧2 =2 ​</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>Follow up: Could you implement a solution using only O(1) extra space complexity and O(n) runtime complexity?</p>
<!-- raw HTML omitted -->
<pre><code>
Input: nums = [3,0,1]
Output: 2

</code></pre><!-- raw HTML omitted -->
<pre><code>
Input: nums = [9,6,4,2,3,5,7,0,1]
Output: 8

</code></pre><!-- raw HTML omitted -->
<ul>
<li>Toplama yönteminde 1&rsquo;den n&rsquo;e kadar olan sayıların toplamı bulunur ve bu toplamdan elimizdeki listenin toplamı çıkarılır.Bu bize eksik olan sayıyı verecektir.</li>
</ul>
<!-- raw HTML omitted -->
<ul>
<li>Elimizdeki listeyi XOR layarak eksik olan elemana ulaşabiliriz.</li>
</ul>
<pre><code>Eksik Eleman =4∧(0∧0)∧(1∧1)∧(2∧3)∧(3∧4)
             =(4∧4)∧(0∧0)∧(1∧1)∧(3∧3)∧2
             =0∧0∧0∧0∧2
             =2

</code></pre><p>​</p>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python">  <span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">missingNumber</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">nums</span><span class="p">):</span>
        <span class="n">expected_sum</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">nums</span><span class="p">)</span><span class="o">*</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">nums</span><span class="p">)</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span><span class="o">//</span><span class="mi">2</span>
        <span class="n">actual_sum</span> <span class="o">=</span> <span class="nb">sum</span><span class="p">(</span><span class="n">nums</span><span class="p">)</span>
        <span class="k">return</span> <span class="n">expected_sum</span> <span class="o">-</span> <span class="n">actual_sum</span>
</code></pre></div><!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
 <span class="k">def</span> <span class="nf">missingNumber</span><span class="p">(</span><span class="n">nums</span><span class="p">):</span>
    <span class="n">a</span> <span class="o">=</span> <span class="mi">0</span>
    <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">nums</span><span class="p">:</span>
        <span class="n">a</span> <span class="o">^=</span> <span class="n">i</span>
    <span class="k">return</span> <span class="n">a</span>
</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 217 Contains Duplicate</title>
			<link>https://www.dincerbakkal.com/posts/leetcode217/</link>
			<pubDate>Mon, 22 Feb 2021 23:15:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode217/</guid>
			<description>Soru Given an integer array nums, return true if any value appears at least twice in the array, and return false if every element is distinct.
Örnek 1 Input: nums = [1,2,3,1] Output: true Örnek 2 Input: nums = [1,2,3,4] Output: false Örnek 3 Input: nums = [1,1,1,3,3,4,3,2,4,2] Output: true Çözüm   Bu çözümde, bir set yapısı kullanılıyor. set, Python&amp;rsquo;da benzersiz elemanları saklamak için kullanılan bir veri yapısıdır. Döngü içerisinde, dizideki her eleman kontrol ediliyor ve bu eleman daha önce set içerisine eklenmişse True döndürülüyor.</description>
			<content type="html"><![CDATA[<h3 id="soru">Soru</h3>
<p>Given an integer array nums, return true if any value appears at least twice in the array, and return false if every element is distinct.</p>
<h3 id="örnek-1">Örnek 1</h3>
<pre><code>Input: nums = [1,2,3,1]
Output: true
</code></pre><h3 id="örnek-2">Örnek 2</h3>
<pre><code>Input: nums = [1,2,3,4]
Output: false
</code></pre><h3 id="örnek-3">Örnek 3</h3>
<pre><code>Input: nums = [1,1,1,3,3,4,3,2,4,2]
Output: true
</code></pre><h3 id="çözüm">Çözüm</h3>
<ul>
<li>
<p>Bu çözümde, bir set yapısı kullanılıyor. set, Python&rsquo;da benzersiz elemanları saklamak için kullanılan bir veri yapısıdır. Döngü içerisinde, dizideki her eleman kontrol ediliyor ve bu eleman daha önce set içerisine eklenmişse True döndürülüyor. Eğer döngü bitene kadar tekrar eden bir eleman bulunmazsa False döndürülür.</p>
</li>
<li>
<p>Bu, problemi çözmek için etkili bir yöntemdir çünkü set yapısının ortama zaman karmaşıklığı O(1)’dir, bu da her bir elemanın varlığının hızlıca kontrol edilmesini sağlar. Bu çözüm, genelde O(n) zaman karmaşıklığına sahiptir, çünkü her eleman bir kez kontrol edilir.</p>
</li>
</ul>
<h2 id="code">Code</h2>
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">containsDuplicate</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">nums</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
        <span class="n">counter</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
        
        <span class="k">for</span> <span class="n">num</span> <span class="ow">in</span> <span class="n">nums</span><span class="p">:</span>
            <span class="k">if</span> <span class="n">num</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">counter</span><span class="p">:</span>
                <span class="n">counter</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">num</span><span class="p">)</span>
            <span class="k">else</span><span class="p">:</span>
                <span class="k">return</span> <span class="kc">True</span>
            
        <span class="k">return</span> <span class="kc">False</span>
</code></pre></div><h3 id="complexity">Complexity</h3>
<ul>
<li>
<p>Time complexity  : Bu çözümde for döngüsü dizideki her elemanı bir kez kontrol eder. Her iterasyonda, set yapısına eleman eklemek veya elemanın set içinde olup olmadığını kontrol etmek O(1) zamanda gerçekleşir. Bu durumda, n elemanlı bir dizi için toplam zaman karmaşıklığı O(n) olur. Burada n, dizinin uzunluğudur.</p>
</li>
<li>
<p>Space complexity : Bu algoritma, gördüğü her elemanı bir set yapısında saklar. En kötü durumda, yani tüm elemanlar benzersiz olduğunda, bu set dizinin tüm elemanlarını saklayacak kapasiteye sahip olmalıdır. Bu durumda, alan karmaşıklığı O(n) olur, burada n yine dizinin uzunluğudur.</p>
</li>
</ul>
]]></content>
		</item>
		
		<item>
			<title>Leetcode 136 Single Number</title>
			<link>https://www.dincerbakkal.com/posts/leetcode136/</link>
			<pubDate>Thu, 18 Feb 2021 21:19:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode136/</guid>
			<description>Follow up: Could you implement a solution with a linear runtime complexity and without using extra memory?
 Bir seen adında liste oluştururuz.Bize verilen listede dolaşarak gördüğümüz elemanları eğer seen listesinde yok iseler seen listesine ekleriz.Eğer seen listesinde var iseler o zaman bu elemanı seen listesinden sileriz.Verilen listeyi taramamız bittiğinde seen listesindeki eleman tek olan elemandır.   Listeyi set olacak şekilde düzenleriz. Sadece benzersiz olanları içeren set listenin toplamınını 2 ile çarparız.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>Follow up: Could you implement a solution with a linear runtime complexity and without using extra memory?</p>
<!-- raw HTML omitted -->
<ul>
<li>Bir seen adında liste oluştururuz.Bize verilen listede dolaşarak gördüğümüz elemanları eğer seen listesinde yok iseler seen listesine ekleriz.Eğer seen listesinde var iseler o zaman bu elemanı seen listesinden sileriz.Verilen listeyi taramamız bittiğinde seen listesindeki eleman tek olan elemandır.</li>
</ul>
<!-- raw HTML omitted -->
<ul>
<li>Listeyi set olacak şekilde düzenleriz.</li>
<li>Sadece benzersiz olanları içeren set listenin toplamınını 2 ile çarparız.</li>
<li>Elimizdeki ilk listenin toplamını alırız.</li>
<li>Set listenin 2 katından elimizdeki listeyi çıkardığımızda tekrar etmeyen sayı kalacaktır.</li>
</ul>
<!-- raw HTML omitted -->
<ul>
<li>Elimizdeki listeyi XOR layarak tek olan elemana ulaşabiliriz.XOR yöntemi sayesinde çiftler birbirlerini sıfırlayacaklardır.</li>
</ul>
<!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python">    <span class="k">def</span> <span class="nf">singleNumber</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">nums</span><span class="p">):</span>
        <span class="n">seen</span> <span class="o">=</span> <span class="p">[]</span>
        <span class="k">for</span> <span class="n">num</span> <span class="ow">in</span> <span class="n">nums</span><span class="p">:</span>
            <span class="k">if</span> <span class="n">num</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">seen</span><span class="p">:</span>
                <span class="n">seen</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">num</span><span class="p">)</span>
            <span class="k">else</span><span class="p">:</span>
                <span class="n">seen</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">num</span><span class="p">)</span>
        <span class="k">return</span> <span class="n">seen</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
</code></pre></div><div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python">    <span class="k">def</span> <span class="nf">singleNumber</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">nums</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
        <span class="k">return</span> <span class="mi">2</span><span class="o">*</span><span class="nb">sum</span><span class="p">(</span><span class="nb">set</span><span class="p">(</span><span class="n">nums</span><span class="p">))</span><span class="o">-</span><span class="nb">sum</span><span class="p">(</span><span class="n">nums</span><span class="p">)</span>
</code></pre></div><!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">def</span> <span class="nf">singleNumber</span><span class="p">(</span><span class="n">nums</span><span class="p">):</span>
    <span class="n">a</span> <span class="o">=</span> <span class="mi">0</span>
    <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">nums</span><span class="p">:</span>
        <span class="n">a</span> <span class="o">^=</span> <span class="n">i</span>
    <span class="k">return</span> <span class="n">a</span>
</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Leetcode 448 Find All Numbers Disappeared in an Array</title>
			<link>https://www.dincerbakkal.com/posts/leetcode448/</link>
			<pubDate>Mon, 15 Feb 2021 22:15:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/leetcode448/</guid>
			<description>Follow up: Could you do it without extra space and in O(n) runtime? You may assume the returned list does not count as extra space.
 Input: nums = [1, 3, 4, 3] Output: [2]  Input: nums = [1,1] Output: [2]  1&amp;rsquo;den n&amp;rsquo;e kadar olan sayıları içeren bir set liste oluştururuz. Örneğin [1,4] için [1,2,3,4] oluşur.Daha sonra verilen listeyi dolaşırız. Listenin içerdiği her sayıyı elimizdeki set listeden çıkarırız.Kalan ilk listede bulunmayan sayı olur.</description>
			<content type="html"><![CDATA[<!-- raw HTML omitted -->
<p>Follow up: Could you do it without extra space and in O(n) runtime? You may assume the returned list does not count as extra space.</p>
<!-- raw HTML omitted -->
<pre><code>
Input: nums = [1, 3, 4, 3]
Output: [2]

</code></pre><!-- raw HTML omitted -->
<pre><code>
Input: nums = [1,1]
Output: [2]

</code></pre><!-- raw HTML omitted -->
<ul>
<li>1&rsquo;den n&rsquo;e kadar olan sayıları içeren bir set liste oluştururuz.</li>
<li>Örneğin [1,4] için [1,2,3,4] oluşur.Daha sonra verilen listeyi dolaşırız.</li>
<li>Listenin içerdiği her sayıyı elimizdeki set listeden çıkarırız.Kalan ilk listede bulunmayan sayı olur.</li>
</ul>
<!-- raw HTML omitted -->
<ul>
<li>Elimizdeki listeyi dolaşırız.Ve oradaki her değer için değer-1 indexi negatif yaparız.Daha sonra elimizdeki listeyi tekrar dolaştığımızda pozitif kalanların indexlerinin 1 fazlası listede olmayan değerleri verir.Yeni bir liste oluşturulmadığı için Space complexity : O(1).</li>
</ul>
<pre><code> |
​[1, 3, 4, 3]	1-1 = 0 -&gt; 0. indexi -yap
     |
​[-1, 3, 4, 3]	3-1 = 2 -&gt; 2. indexi -yap
         |
​[-1, 3, -4, 3]	4-1 = 3 -&gt; 3. indexi -yap
             |
​[-1, 3, -4, -3]3-1 = 2 -&gt; 2. indexi -yap zaten -

​[-1, 3, -4, -3] pozitif olan  sadece 1. index 1+1 = 2 listedeki eksik sayı
</code></pre><!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">def</span> <span class="nf">find_disappeared_numbers_in_array</span><span class="p">(</span><span class="n">nums</span><span class="p">):</span>
    <span class="n">length_nums</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">nums</span><span class="p">)</span>
    <span class="n">all_numbers_set</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="nb">range</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="n">length_nums</span> <span class="o">+</span> <span class="mi">1</span><span class="p">))</span>

    <span class="k">for</span> <span class="n">num</span> <span class="ow">in</span> <span class="n">nums</span><span class="p">:</span>
        <span class="k">if</span> <span class="n">num</span> <span class="ow">in</span> <span class="n">all_numbers_set</span><span class="p">:</span>
            <span class="n">all_numbers_set</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">num</span><span class="p">)</span>

    <span class="k">return</span> <span class="nb">list</span><span class="p">(</span><span class="n">all_numbers_set</span><span class="p">)</span>
</code></pre></div><!-- raw HTML omitted -->
<div class="highlight"><pre class="chroma"><code class="language-python" data-lang="python"><span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">findDisappearedNumbers</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">nums</span><span class="p">):</span>
        <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">nums</span><span class="p">)):</span>            
            <span class="n">index</span> <span class="o">=</span> <span class="nb">abs</span><span class="p">(</span><span class="n">nums</span><span class="p">[</span><span class="n">i</span><span class="p">])</span> <span class="o">-</span> <span class="mi">1</span>    <span class="c1"># be aware to use absoluate value!!!  the ith element may be negative </span>
            <span class="k">if</span> <span class="n">nums</span><span class="p">[</span><span class="n">index</span><span class="p">]</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
                <span class="n">nums</span><span class="p">[</span><span class="n">index</span><span class="p">]</span> <span class="o">=</span> <span class="o">-</span><span class="n">nums</span><span class="p">[</span><span class="n">index</span><span class="p">]</span>
        <span class="n">anw</span> <span class="o">=</span> <span class="nb">list</span><span class="p">()</span>
        <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">nums</span><span class="p">)):</span>
            <span class="k">if</span> <span class="n">nums</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
                <span class="n">anw</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span>
        <span class="k">return</span> <span class="n">anw</span>
</code></pre></div><!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Caching (Önbelleğe Alma)</title>
			<link>https://www.dincerbakkal.com/posts/caching/</link>
			<pubDate>Wed, 15 Jul 2020 23:19:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/caching/</guid>
			<description>Yük dengeleme, sayısı gitgide artan serverlar üzerinde yatay ölçekleme yapmanıza yardımcı olur fakat önbelleğe alma(caching) var olan kaynaklarınızdan daha fazla faydalanmanızı sağlar ve erişilmesi güç ürün gerekliliklerine ulaşmayı kolaylaştırır. Önbelleğe alma(caching), referans prensibi sayesinde avantaj sağlar. Diğer bir deyişle, yakın zamanda istenen bir veri yeniden istenebilir. Programlamanın hemen hemen her katmanında kullanılmaktadır: donanım, işletim sistemi, web tarayıcılar, web uygulamaları vs. Önbelleğe alma(caching) kısa süreli hafızaya benzer: sınırlı alanı olmasına karşın orijinal veri kaynağından daha hızlıdır ve en son erişilen öğeleri barındırır.</description>
			<content type="html"><![CDATA[<p>Yük dengeleme, sayısı gitgide artan serverlar üzerinde yatay ölçekleme yapmanıza yardımcı olur fakat önbelleğe alma(caching) var olan kaynaklarınızdan daha fazla faydalanmanızı sağlar ve erişilmesi güç ürün gerekliliklerine ulaşmayı kolaylaştırır. Önbelleğe alma(caching), referans prensibi sayesinde avantaj sağlar. Diğer bir deyişle, yakın zamanda istenen bir veri yeniden istenebilir. Programlamanın hemen hemen her katmanında kullanılmaktadır: donanım, işletim sistemi, web tarayıcılar, web uygulamaları vs. Önbelleğe alma(caching) kısa süreli hafızaya benzer: sınırlı alanı olmasına karşın orijinal veri kaynağından daha hızlıdır ve en son erişilen öğeleri barındırır. Mimarinin her seviyesinde bulunabilir fakat genellikle veriyi alt seviyelere gerek kalmadan hızlıca geri getirmek için kullanıldığı önyüze en yakın seviyede kullanılır.</p>
<!-- raw HTML omitted -->
<p>Bir istek katmanı düğümüne, doğrudan önbellek yerleştirmek yanıt verinin yerel olarak depolanmasını sağlar. Servise her istek gönderiminde, düğüm eğer mevcut ise hızlıca yerel ve önbelleğe alınmış veriyi döner. Önbellekte mevcut değilse, istek düğümü veriyi diskte sorgular. Bir istek katmanı düğümündeki önbellek, hem oldukça hızlı olan bellekte hem de network depolamadan daha hızlı olan düğümün yerel diskinde bulunabilir.
Peki bu durum birçok düğüme genişletilirse ne olur? İstek katmanının birçok düğüme genişletilmesi durumunda her bir düğümün kendi önbelleği olması halen daha muhtemeldir. Ancak, yük dengeleyiciniz istekleri düğümlere rastgele dağıtırsa aynı istek farklı düğüme giderek önbellek kayıplarını arttıracaktır. Bunun önlenmesi için iki seçenek vardır: genel önbellek ve dağıtık önbellek.</p>
<!-- raw HTML omitted -->
<p>Dağıtık bir önbellekte, her bir düğüm önbelleğe alınmış verinin bir kısmını barındırır. Tipik olarak, önbellek tutarlı hashing özelliğini kullanarak bölünür ve bir istek düğümü, belirli bir veri birimini araması halinde verinin erişilip erişilemeyeceğini belirlemek için dağıtık önbellekte nereye bakmasını gerektiğini hemen öngörebilir. Bu durumda, her bir düğüm önbelleğin küçük bir birimini kapsar ve kaynağa gitmeden önce veri için başka bir düğüme istek gönderir. Bu nedenle, dağıtık önbelleğin yararlarından birisi de istek havuzuna düğümler eklenerek önbellek hafızasının kolaylıkla artırılabilmesidir.
Dağıtık önbelleğin dezavantajı ise eksik bir düğümün çözüme kavuşturulmasıdır. Bazı dağıtık önbellekler bunu verinin farklı düğümler üzerinde çok sayıda kopyasını depolayarak yapar. Ancak, bu durum istek katmanından düğüm eklendiğinde veya çıkarıldığında karmaşık bir hal alabilir. Bir düğüm yok olsa veya bir kısmı kaybolsa dahi istekler kaynaktan bulunabilir. Böylelikle bir felakete mahal verilmesine gerek kalmaz!</p>
<!-- raw HTML omitted -->
<p>Adından da anlaşılacağı üzere genel önbellek tüm düğümlerin aynı tek önbellek hafızasını kullanmasıdır. Buna server ekleme, belli dosyaların depolanması dahildir. Bu şekilde ana bellektekinden daha hızlı işlem yapılabilir ve tüm istek katmanı düğümlerinden erişim daha kolay sağlanabilir. Her bir istek düğümü önbellekte yerel bir düğümde yaptığı gibi önbelleği sorgular. Bu tarz bir önbelleğe alma şeması tek bir önbelleğe istemci ve istek sayısı arttıkça ekstra yük binebileceğinden karmaşık olabilir fakat bazı mimarilerde –özellikle genel önbelleği hızlandıran veya önbelleğe alınması gereken sabitlenmiş veri seti olarak özelleştirilen donanımlarda- oldukça faydalıdır.
Aşağıdaki diyagramda tanımlanan iki tür genel önbellek bulunmaktadır. Birincisinde, önbelleğe alınmış bir yanıt önbellekte bulunamadığı zaman önbellek bu eksik birimi alt bellekten kurtarmakla yükümlüdür. İkincisiyse, önbellekte bulunmayan herhangi bir verinin kurtarılması istek düğümünün görevidir.</p>
<figure><img src="/image/caching.png"
         alt="image"/>
</figure>

<p>Genel önbellek kullanan çoğu uygulama önbelleğin kendi tahliyesini kontrol ederek istemcilerden gelen aynı veri için istek yığını oluşmasını önlemek amacıyla veri getirdiği ilk yöntemi kullanmaktadır. Ancak, ikinci yöntemin daha kullanışlı olduğu bazı durumlar da mevcuttur. Örneğin, önbellek çok büyük dosyalar için kullanılıyorsa, düşük önbellek isabet oranı önbelleğin tampon görevi oluşturarak önbellek kayıplarının aşırı yük bindirmesini önleyebilir ve önbellekte oldukça büyük miktarda total veri setine (veya sıcak veri) yer açar. Bir diğer örnek ise önbellekte depolanan dosyaların statik olduğu ve tahliye edilmediği bir mimaridir (bu durum veri gecikmesine ait uygulama gerekliliklerinden kaynaklanabilir- belirli bilgi birimlerinin, uygulamanın tahliye stratejisi veya hot spotları önbellekten daha iyi tespit ettiği büyük veri setlerinde hızlı olması gerekebilir).</p>
<!-- raw HTML omitted -->
<p>CDNler yüksek miktarda statik medya yayınlayan siteler için kullanılan bir önbellek türüdür. Tipik bir CDN kurulumunda, istek öncelikle CDN’e statik medyaya ait bir birim sorar ve eğer bu birim yerel olarak ulaşılabilir ise CDN tarafından gönderilir. Eğer ulaşılabilir değilse CDN dosya için arkayüz serverları sorgular ve yerel olarak önbelleğe alarak istemciye erişimini sağlar.
Eğer kurduğumuz sistem kendi CND’si için yeterince büyük değilse statik medyayı Nginx gibi hafif bir http serverı kullanan ayrı bir alt domain üzerinden (static.yourservice.com  gibi) yayınlayarak serverlarımızdaki DNSi sonrasında bir CDN’ e aktarabilir ve ilerideki geçişleri kolay hale getirebiliriz.</p>
<!-- raw HTML omitted -->
<p>Önbelleğe alma oldukça faydalı bir şey olmasına rağmen bazen önbelleği kaynakla (örneğin veri tabanı) uyumlu tutmak için onarıma gerek duyulabilir. Eğer veri tabanındaki veri değiştirilirse, önbelleğe alma işleminin geçersiz kılınması gerekir. Eğer kılınmazsa uygulamada tutarsızlıklar görülebilir.</p>
<p>Bu sorunun çözülmesi önbelleği geçersiz kılma olarak bilinir, bunun için kullanılan üç ana şema bulunmaktadır:</p>
<!-- raw HTML omitted -->
<!-- raw HTML omitted -->
<!-- raw HTML omitted -->
<!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Load Balancing (Yük Dengeleme)</title>
			<link>https://www.dincerbakkal.com/posts/load-balancing/</link>
			<pubDate>Fri, 26 Jun 2020 23:19:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/load-balancing/</guid>
			<description>Dağıtık sistemlerdeki bir diğer önemli bileşen ise Yük Dengeleyici(LB)’dir. Bu, uygulamaların, web sitelerinin veya veri tabanlarının yanıt verebilme ve kullanılırlıklarını geliştirmek amacıyla trafiği bir küme servera yaymaya yardımcı olur. LB ayrıca istekleri dağıtırken tüm kaynakların durumunu da takip eder. Bir server yeni istekler alamıyorsa, yanıt veremiyor veya hata oranı artmış haldeyse, LB böyle bir servera trafik göndermeyi durdurur.
Tipik olarak bir LB istemci, gelen networku ve uygulama trafiğini kabul eden ve trafiği farklı algoritmalar kullanarak farklı arkayüz servera dağıtan server arasında yer alır.</description>
			<content type="html"><![CDATA[<p>Dağıtık sistemlerdeki bir diğer önemli bileşen ise Yük Dengeleyici(LB)’dir. Bu, uygulamaların, web sitelerinin veya veri tabanlarının yanıt verebilme ve kullanılırlıklarını geliştirmek amacıyla trafiği bir küme servera yaymaya yardımcı olur. LB ayrıca istekleri dağıtırken tüm kaynakların durumunu da takip eder. Bir server yeni istekler alamıyorsa, yanıt veremiyor veya hata oranı artmış haldeyse, LB böyle bir servera trafik göndermeyi durdurur.</p>
<p>Tipik olarak bir LB istemci, gelen networku ve uygulama trafiğini kabul eden ve trafiği farklı algoritmalar kullanarak farklı arkayüz servera dağıtan server arasında yer alır. Uygulama isteklerini farklı serverlar ile dengeleyerek bireysel server yükünü azaltır ve bir uygulama serverının tek arıza noktası olmasının önüne geçer ve böylelikle uygulamanın total kullanılırlık ve yanıt verebilmesini iyileştirir</p>
<figure><img src="/image/lb1.png"
         alt="image"/>
</figure>

<p>Tam ölçeklenebilirlik ve fazlalıktan yararlanmak için, sistemin her katmanındaki yükü dengelemeyi deneyebiliriz.</p>
<p>Üç yerde LB kullanabiliriz:</p>
<!-- raw HTML omitted -->
<!-- raw HTML omitted -->
<p>Kullanıcılara daha hızlı ve müdahalesiz servis sağlar. Kullanıcılar yoğun çalışan bir serverın önceki işlerini bitirmesini beklemek zorunda kalmaz. Bunun yerine istekleri o esnada kullanmaya hazır başka bir kaynağa iletilir.
Servis sağlayıcılarında daha az aksama süresi görülür ve ortaya daha fazla iş çıkar.LB çalışmayan bir serverı hatasız bir servera ileteceği için tamamen çalışmayan bir server dahi son kullanıcıya etki etmeyecektir.</p>
<!-- raw HTML omitted -->
<!-- raw HTML omitted -->
<!-- raw HTML omitted -->
<p>Farklı ihtiyaçlara dönük olarak farklı algoritmalar kullanan birçok yük dengeleme yöntemi mevcuttur.</p>
<!-- raw HTML omitted -->
<!-- raw HTML omitted -->
<figure><img src="/image/lb3.png"
         alt="image"/>
</figure>

<p>Yük dengelemenin birçok yöntemi bulunmaktadır.</p>
<!-- raw HTML omitted -->
]]></content>
		</item>
		
		<item>
			<title>Sharding or Data Partitioning(Parçalama yada Veri Bölümleme)</title>
			<link>https://www.dincerbakkal.com/posts/data-partitioning/</link>
			<pubDate>Wed, 15 Jan 2020 23:19:05 +0300</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/data-partitioning/</guid>
			<description>Veri bölümleme (parçalama olarakta bilinir) büyük bir veri tabanını (DB) küçük parçalara ayırma tekniğidir. Bir uygulamanın yönetilebilirliğini, performansını, erişilebilirliğini ve yük dengesini iyileştirmek için, veri tabanını/tabloyu çok sayıda makineye ayırma işlemidir. Belirli bir veri büyüklüğünden sonra daha güçlü sunucular ekleyerek sistemi dikey olarak büyütmek yerine daha fazla bilgisayar ekleyerek yatay olarak ölçeklemek daha kolay ve makuldür.Veri parçalama yatay olarak ölçekleme avantajı sağlar.
Buradaki ana sorun ise parçalama için kullanılan değer aralığı doğru seçilmezse bölümleme şeması sunucularda dengesizlik yaratabilir.</description>
			<content type="html"><![CDATA[<p>Veri bölümleme (parçalama olarakta bilinir) büyük bir veri tabanını (DB) küçük parçalara ayırma tekniğidir. Bir uygulamanın yönetilebilirliğini, performansını, erişilebilirliğini ve yük dengesini iyileştirmek için, veri tabanını/tabloyu çok sayıda makineye ayırma işlemidir. Belirli bir veri büyüklüğünden sonra daha güçlü sunucular ekleyerek sistemi dikey olarak büyütmek yerine daha fazla bilgisayar ekleyerek yatay olarak ölçeklemek daha kolay ve makuldür.Veri parçalama yatay olarak ölçekleme avantajı sağlar.</p>
<!-- raw HTML omitted -->
<p>Buradaki ana sorun ise parçalama için kullanılan değer aralığı doğru seçilmezse bölümleme şeması sunucularda dengesizlik yaratabilir. Bir önceki örnekte, zip kodlarına göre konum ayırmak konumların farklı zip kodlarına eşit dağıtılmasını öngörmektedir. Bu, küçük bir il ile kıyaslandığında İstanbul gibi yoğun nüfuslu bir şehirde çok fazla  konum olacağı için geçersiz bir öngörüdür.</p>
<!-- raw HTML omitted -->
<p>Dikey bölümlemenin uygulaması kolaydır ayrıca uygulama üzerinde düşük bir etkiye sahiptir. Bu yöntemin dezavantajı ise eğer uygulama büyürse, bir özelliğe yönelik veri tabanını farklı sunucular içerisinde daha fazla bölümlemek gerekebilir. (Tek bir sunucunun 140 milyon kullanıcı tarafından paylaşılan 10 milyar fotoğraf için tüm metaveri sorgusunu yapması mümkün olmayabilir.)</p>
<!-- raw HTML omitted -->
<p>Yukarıda sözü edilen şemalardaki sorunları çözmek için bağımsız bir yaklaşım olarak güncel bölümleme şemanızı bilen ve bunu veri tabanı erişim kodundan soyutlayan bir lookup servisi oluşturulabilir. Dolayısıyla belirli bir veri ögesinin nerede olduğunu bulmak için, her bir demet anahtarı(tuple key) bir veri tabanına eşlenmiş dizin sunucusunda(directory server ) sorgulama yapabiliriz. Bu yaklaşımla, DB havuzuna sunucu eklemek gibi görevleri yerine getirebilir veya uygulamayı etkilemeden bölümleme şemasını değiştirebiliriz.</p>
<!-- raw HTML omitted -->
<p>Bu şemada, depolanan verinin anahtar özniteliklerinden birine hash fonksiyonu uyguluyabilir ve böylelikle bölümleme sayısını arttırırabiliriz. Örneğin, eğer 100 tane DB sunucumuz var ve ID’miz her yeni kayıtta +1 arttırılan sayısal bir değer. Bu örnekte, hash fonksiyonu ‘ID %100’ olsun. Bu bize kaydı depoladığımız ve okuyabileceğimiz sunucuyu verir. Bu yaklaşım sunucular arasında veri paylaşımının tek bir şekilde olmasını sağlar. Dezavatantajı ise yeni sunucular eklemek, verinin yeniden dağıtılmasını gerektirdiğinden ve hash fonksiyonunun değiştirilmesi  serviste aksamaya neden olduğu için DB sunucularını total sayısını efektif bir biçimde sabitlemesidir. Bu sorun, Tutarlı Hashing(Consistent Hashing ) kullanılarak aşılabilir.</p>
<!-- raw HTML omitted -->
<p>Bu şemada, her bir bölüme bir değerler listesi atanır ve her yeni kayıt eklemek istediğimizde hangi bölümün anahtarı bulundurduğunu görebilir ve orada depolayabiliriz. Örneğin, İzlanda, Norveç, İsveç, Finlandiya veya Danimarka’da yaşayan tüm kullanıcıları Nordik ülkeler için bir bölümde depolayabiliriz.</p>
<!-- raw HTML omitted -->
<p>Verilerin tek bir şekilde dağıtılmasını sağlayan basit bir yöntemdir. ‘n’ bölümleme ile, ‘i’ demeti bölümlemeye atanır. (i mod n)</p>
<!-- raw HTML omitted -->
<p>Bu şemada, yeni bir şema oluşturmak için yukarıdaki bölümleme şemalarından herhangi ikisini birleştiriyoruz. Örnek olarak, önce bir liste bölümleme sonra da hash tabanlı bölümleme uygulanabilir. Tutarlu hashing, hash ve liste bölümlemenin bir bileşiği olarak düşünülebilir. Hash, anahtar boşluğu listelenebilecek bir boyuta küçültür.</p>
<!-- raw HTML omitted -->
<p>Parçalanmış bir veri tabanı üzerinde, yapılabilecek işlemlere dair belirli kısıtlamalar vardır. Bu kısıtlamalar, çok sayıda tablo ile veya aynı tablo içerisindeki çok fazla satırdaki işlemler için gerekli tablo ve satırların aynı sunucuda bulunmamasından kaynaklanır. Parçalamadan dolayı ortaya çıkan kısıtlamalar veya karmaşıklıklardan bazıları şunlardır:</p>
<!-- raw HTML omitted -->
<!-- raw HTML omitted -->
<p>Bölümlenmiş bir veri tabanı üzerinde shard’lar arasın sorgu yapmak kolay olmadığından, benzer şekilde parçalanmış veri tabanına yabancı anahtarlar(foreign keys) gibi veri bütünlüğü kısıtlamalarını zorlamak oldukça zor olabilir.
Çoğu RDMBS( İlişkisel Veritabanı Yönetim Sistemleri) farklı veri tabanı serverları üzerinde veri tabanlarında yabancı anahtar(foreign keys) zorlamalarını desteklemez. Bu da parçalanmış veri tabanları üzerinde veri tutarlılığı gerektiren uygulamaların bu zorlamayı uygulama kodunda yapması anlamına gelir. Böyle durumlarda uygulamalar
genellikle boşta duran başvuruları(references) temizlemek için düzenli olarak SQL işleri çalıştırır.</p>
<!-- raw HTML omitted -->
<p>Parçalama şemasının değiştirilmesi için birçok neden olabilir.</p>
<ol>
<li>
<p>Veri dağıtımı tek bir formatta gerçekleşmemiştir. Örneğin, bir veri tabanının parçalaması için uyumlu olmayacak şekilde bir ZIP kodu çok sayıda farklı yere kayıt atılmış olabilir.</p>
</li>
<li>
<p>Bir shard üzerinde çok fazla yük olabilir. Örneğin, kullanıcı fotoğraflarına ait bir DB shard’ı fazla sayıda isteği yanıtlamak zorunda kalmış olabilir.</p>
</li>
</ol>
<p>Böyle durumlarda, ya daha fazla DB shardı oluştururuz ya da var olan shardları yeniden dengeler,parçalama şeması değiştirilir ve var olan tüm veri yeni konumlara taşınır. Herhangi bir kesinti olmadan bunu yapmak oldukça zordur. Dizin tabanlı parçalama(directory based partitioning) gibi bir şema kullanmak, sistem daha komplike hale getirme ve yeni bir tek arıza noktası (lookup servisi/veri tabanı gibi) oluşturma riskini doğurmasına rağmen yeniden dengelemeyi daha kolay hale getirmektedir.</p>
]]></content>
		</item>
		
		<item>
			<title>Kitap Çevirileri</title>
			<link>https://www.dincerbakkal.com/posts/turkce-yazilim-kitaplari0/</link>
			<pubDate>Mon, 01 Oct 2018 16:15:09 +0800</pubDate>
			
			<guid>https://www.dincerbakkal.com/posts/turkce-yazilim-kitaplari0/</guid>
			<description>Clean Code Kısa Kitap Özeti
Clean Code Kitabından Öğrendiklerim: ‘Error Handling’</description>
			<content type="html"><![CDATA[<p><a href="https://medium.com/@ekici/clean-code-k%C4%B1sa-kitap-%C3%B6zeti-59242dcc1301">Clean Code Kısa Kitap Özeti</a></p>
<!-- raw HTML omitted -->
<p><a href="https://medium.com/@egealpay1/clean-code-kitab%C4%B1ndan-%C3%B6%C4%9Frendiklerim-error-handling-81abe10a539">Clean Code Kitabından Öğrendiklerim: ‘Error Handling’</a></p>
]]></content>
		</item>
		
	</channel>
</rss>
