# LeetCode Solutions ## 🧠 Why This Repository Exists I'm practicing to master data structures, algorithms, and problem-solving patterns. This repository serves as my personal learning journey through LeetCode problems, helping me: - **Build algorithmic thinking** and problem-solving skills - **Master fundamental data structures** (arrays, linked lists, trees, graphs, etc.) - **Learn advanced algorithms** (dynamic programming, binary search, two pointers, etc.) - **Track my progress** and identify areas for improvement - **Create a reference library** of solutions for future review ## ✅ Progress Overview ### Current Status - **Problems Solved**: 90+ / 2000+ (LeetCode total) - **Success Rate**: ~95% - **Streak**: Active daily practice - **Languages**: Python (primary), TypeScript (secondary) ### Difficulty Breakdown | Difficulty | Count | Percentage | |------------|-------|------------| | 🟢 Easy | ~40 | 44% | | 🟡 Medium | ~45 | 50% | | 🔴 Hard | ~5 | 6% | ### Recent Activity - **Last Solved**: Multiple problems this week - **Focus Areas**: Dynamic Programming, Graph Algorithms - **Next Goals**: Advanced tree problems, system design concepts ## 🧩 Topics Covered ### ✅ Mastered - **Arrays & Strings** - Two pointers, sliding window, prefix sums - **Hash Tables** - Lookup optimization, frequency counting - **Binary Search** - Standard and rotated array variations - **Two Pointers** - Array manipulation, linked list operations - **Basic Dynamic Programming** - Memoization, tabulation ### 🔄 In Progress - **Advanced DP** - State compression, optimization techniques - **Graph Algorithms** - BFS, DFS, topological sorting - **Tree Structures** - Binary trees, BST operations - **Advanced Data Structures** - Heaps, Tries, Union-Find ### 📚 Planned - **System Design** - Scalability, distributed systems - **Advanced Algorithms** - Segment trees, advanced graph algorithms - **Competitive Programming** - Advanced optimization techniques ## 📋 Problem Checklist ### Core Data Structures | Topic | Easy | Medium | Hard | Total | |-------|------|--------|------|-------| | **Arrays** | 15 | 20 | 2 | 37 | | **Strings** | 8 | 12 | 1 | 21 | | **Linked Lists** | 1 | 4 | 0 | 5 | | **Trees** | 0 | 0 | 0 | 0 | | **Graphs** | 0 | 2 | 0 | 2 | | **Stacks/Queues** | 2 | 3 | 0 | 5 | ### Algorithmic Techniques | Technique | Easy | Medium | Hard | Total | |-----------|------|--------|------|-------| | **Hash Tables** | 8 | 12 | 0 | 20 | | **Two Pointers** | 6 | 15 | 0 | 21 | | **Binary Search** | 2 | 8 | 0 | 10 | | **Dynamic Programming** | 0 | 8 | 0 | 8 | | **Greedy** | 0 | 6 | 0 | 6 | | **Backtracking** | 0 | 3 | 0 | 3 | | **Sliding Window** | 1 | 1 | 0 | 2 | ### Problem Categories | Category | Count | Mastery Level | |----------|-------|---------------| | **Array Manipulation** | 25 | ⭐⭐⭐⭐⭐ | | **String Processing** | 18 | ⭐⭐⭐⭐ | | **Hash Table Usage** | 20 | ⭐⭐⭐⭐⭐ | | **Binary Search** | 10 | ⭐⭐⭐⭐ | | **Dynamic Programming** | 8 | ⭐⭐⭐ | | **Two Pointers** | 21 | ⭐⭐⭐⭐⭐ | | **Linked Lists** | 5 | ⭐⭐⭐ | | **Graphs** | 2 | ⭐⭐ | | **Stacks/Queues** | 5 | ⭐⭐⭐ | ## 🎯 Learning Roadmap ### Phase 1: Fundamentals ✅ - [x] Basic array operations - [x] String manipulation - [x] Hash table implementations - [x] Two pointer techniques - [x] Basic binary search ### Phase 2: Intermediate 🔄 - [x] Dynamic programming basics - [x] Linked list operations - [x] Stack and queue problems - [x] Greedy algorithms - [ ] Tree traversal algorithms - [ ] Graph basics (BFS/DFS) ### Phase 3: Advanced 📚 - [ ] Advanced DP techniques - [ ] Advanced tree structures - [ ] Graph algorithms - [ ] System design concepts - [ ] Competitive programming ### Phase 4: Mastery 🏆 - [ ] Advanced optimization - [ ] Algorithm design - [ ] Interview preparation - [ ] Teaching others --- This repository contains my solutions to various LeetCode problems. Each solution is implemented in Python and follows a consistent structure. ## 📊 Statistics - **Total Problems Solved**: 90+ - **Languages**: Python, TypeScript - **Difficulty Distribution**: Easy, Medium, Hard ## 📁 Solutions Index ### 🔢 Arrays & Strings #### Easy - [1. Two Sum](src/exercises/1.two-sum.py) - Hash Table, Array - [9. Palindrome Number](src/exercises/9.palindrome-number.py) - Math - [13. Roman to Integer](src/exercises/13.roman-to-integer.py) - Hash Table, Math, String - [14. Longest Common Prefix](src/exercises/14.longest-common-prefix.py) - String, Trie - [20. Valid Parentheses](src/exercises/20.valid-parentheses.py) - Stack, String - [21. Merge Two Sorted Lists](src/exercises/21.merge-two-sorted-lists.py) - Linked List, Recursion - [26. Remove Duplicates from Sorted Array](src/exercises/80.remove-duplicates-from-sorted-array-ii.py) - Array, Two Pointers - [27. Remove Element](src/exercises/80.remove-duplicates-from-sorted-array-ii.py) - Array, Two Pointers - [28. Find the Index of the First Occurrence in a String](src/exercises/28.find-the-index-of-the-first-occurrence-in-a-string.py) - String, Two Pointers - [35. Search Insert Position](src/exercises/35.search-insert-position.py) - Array, Binary Search - [66. Plus One](src/exercises/66.plus-one.py) - Array, Math - [69. Sqrt(x)](src/exercises/69.sqrtx.py) - Math, Binary Search - [88. Merge Sorted Array](src/exercises/88.merge-sorted-array.py) - Array, Two Pointers - [125. Valid Palindrome](src/exercises/125.valid-palindrome.py) - String, Two Pointers - [169. Majority Element](src/exercises/169.majority-element.py) - Array, Hash Table, Divide and Conquer - [202. Happy Number](src/exercises/202.happy-number.py) - Hash Table, Math, Two Pointers - [205. Isomorphic Strings](src/exercises/205.isomorphic-strings.py) - Hash Table, String - [217. Contains Duplicate](src/exercises/217.contains-duplicate.py) - Array, Hash Table, Sorting - [219. Contains Duplicate II](src/exercises/219.contains-duplicate-ii.py) - Array, Hash Table, Sliding Window - [242. Valid Anagram](src/exercises/242.valid-anagram.py) - String, Sorting, Hash Table - [290. Word Pattern](src/exercises/290.word-pattern.py) - Hash Table, String - [383. Ransom Note](src/exercises/383.ransom-note.py) - String, Hash Table, Counting - [392. Is Subsequence](src/exercises/392.is-subsequence.py) - String, Two Pointers, Dynamic Programming - [704. Binary Search](src/exercises/704.binary-search.py) - Array, Binary Search - [1200. Minimum Absolute Difference](src/exercises/1200.minimum-absolute-difference.py) - Array, Sorting - [2053. Kth Distinct String in an Array](src/exercises/2053.kth-distinct-string-in-an-array.py) - Array, Hash Table, String - [2441. Largest Positive Integer That Exists With Its Negative](src/exercises/2441.largest-positive-integer-that-exists-with-its-negative.py) - Array, Hash Table, Two Pointers #### Medium - [2. Add Two Numbers](src/exercises/2.add-two-numbers.py) - Linked List, Math, Recursion - [3. Longest Substring Without Repeating Characters](src/exercises/3.longest-substring-without-repeating-characters.py) - Hash Table, String, Sliding Window - [3. Longest Substring Without Repeating Characters (TypeScript)](src/exercises/3.longest-substring-without-repeating-characters.ts) - Hash Table, String, Sliding Window - [4. Median of Two Sorted Arrays](src/exercises/4.median-of-two-sorted-arrays.py) - Array, Binary Search, Divide and Conquer - [5. Longest Palindromic Substring](src/exercises/5.longest-palindromic-substring.py) - String, Dynamic Programming - [6. Zigzag Conversion](src/exercises/6.zigzag-conversion.py) - String - [7. Reverse Integer](src/exercises/7.reverse-integer.py) - Math - [10. Regular Expression Matching](src/exercises/10.regular-expression-matching.py) - String, Dynamic Programming, Recursion - [11. Container With Most Water](src/exercises/11.container-with-most-water.py) - Array, Two Pointers, Greedy - [15. 3Sum](src/exercises/15.3sum.py) - Array, Two Pointers, Sorting - [22. Generate Parentheses](src/exercises/22.generate-parentheses.py) - String, Dynamic Programming, Backtracking - [36. Valid Sudoku](src/exercises/36.valid-sudoku.py) - Array, Hash Table, Matrix - [42. Trapping Rain Water](src/exercises/42.trapping-rain-water.py) - Array, Two Pointers, Dynamic Programming, Stack - [45. Jump Game II](src/exercises/45.jump-game-ii.py) - Array, Dynamic Programming, Greedy - [50. Pow(x, n)](src/exercises/50.powx-n.py) - Math, Recursion - [55. Jump Game](src/exercises/55.jump-game.py) - Array, Dynamic Programming, Greedy - [74. Search a 2D Matrix](src/exercises/74.search-a-2d-matrix.py) - Array, Binary Search, Matrix - [80. Remove Duplicates from Sorted Array II](src/exercises/80.remove-duplicates-from-sorted-array-ii.py) - Array, Two Pointers - [89. Gray Code](src/exercises/89.gray-code.py) - Math, Backtracking, Bit Manipulation - [90. Subsets II](src/exercises/90.subsets-ii.py) - Array, Backtracking, Bit Manipulation - [91. Decode Ways](src/exercises/91.decode-ways.py) - String, Dynamic Programming - [92. Reverse Linked List II](src/exercises/92.reverse-linked-list-ii.py) - Linked List - [121. Best Time to Buy and Sell Stock](src/exercises/121.best-time-to-buy-and-sell-stock.py) - Array, Dynamic Programming - [122. Best Time to Buy and Sell Stock II](src/exercises/122.best-time-to-buy-and-sell-stock-ii.py) - Array, Dynamic Programming, Greedy - [128. Longest Consecutive Sequence](src/exercises/128.longest-consecutive-sequence.py) - Array, Hash Table, Union Find - [135. Candy](src/exercises/135.candy.py) - Array, Greedy - [141. Linked List Cycle](src/exercises/141.linked-list-cycle.py) - Hash Table, Linked List, Two Pointers - [149. Max Points on a Line](src/exercises/149.max-points-on-a-line.py) - Array, Hash Table, Math, Geometry - [150. Evaluate Reverse Polish Notation](src/exercises/150.evaluate-reverse-polish-notation.py) - Array, Math, Stack - [153. Find Minimum in Rotated Sorted Array](src/exercises/153.find-minimum-in-rotated-sorted-array.py) - Array, Binary Search - [155. Min Stack](src/exercises/155.min-stack.py) - Stack, Design - [167. Two Sum II - Input Array Is Sorted](src/exercises/167.two-sum-ii-input-array-is-sorted.py) - Array, Two Pointers, Binary Search - [172. Factorial Trailing Zeroes](src/exercises/172.factorial-trailing-zeroes.py) - Math - [189. Rotate Array](src/exercises/189.rotate-array.py) - Array, Math, Two Pointers - [206. Reverse Linked List](src/exercises/206.reverse-linked-list.py) - Linked List, Recursion - [228. Summary Ranges](src/exercises/228.summary-ranges.py) - Array - [238. Product of Array Except Self](src/exercises/238.product-of-array-except-self.py) - Array, Prefix Sum - [246. Strobogrammatic Number](src/exercises/246.strobogrammatic-number.py) - Hash Table, Two Pointers, String - [248. Strobogrammatic Number III](src/exercises/248.strobogrammatic-number-iii.py) - Math, Recursion - [243. Shortest Word Distance](src/exercises/243.shortest-word-distance.py) - Array, String - [244. Shortest Word Distance II](src/exercises/244.shortest-word-distance-ii.py) - Array, Hash Table, Design, Two Pointers - [245. Shortest Word Distance III](src/exercises/245.shortest-word-distance-iii.py) - Array, String - [875. Koko Eating Bananas](src/exercises/875.koko-eating-bananas.py) - Array, Binary Search - [990. Satisfiability of Equality Equations](src/exercises/990.satisfiability-of-equality-equations.py) - Array, Union Find, Graph - [1298. Maximum Candies You Can Get from Boxes](src/exercises/1298.maximum-candies-you-can-get-from-boxes.py) - Breadth-First Search, Array - [1820. Maximum Number of Accepted Invitations](src/exercises/1820.maximum-number-of-accepted-invitations.py) - Graph, Backtracking - [2040. Kth Smallest Product of Two Sorted Arrays](src/exercises/2040.kth-smallest-product-of-two-sorted-arrays.py) - Array, Binary Search - [2116. Check if a Parentheses String Can Be Valid](src/exercises/2116.check-if-a-parentheses-string-can-be-valid.py) - String, Stack, Greedy - [2294. Partition Array Such That Maximum Difference Is K](src/exercises/2294.partition-array-such-that-maximum-difference-is-k.py) - Array, Greedy, Sorting - [2616. Minimize the Maximum Difference of Pairs](src/exercises/2616.minimize-the-maximum-difference-of-pairs.py) - Array, Binary Search, Greedy - [2966. Divide Array Into Arrays With Max Difference](src/exercises/2966.divide-array-into-arrays-with-max-difference.py) - Array, Greedy, Sorting - [3442. Maximum Difference Between Even and Odd Frequency I](src/exercises/3442.maximum-difference-between-even-and-odd-frequency-i.py) - Array, Hash Table - [3445. Maximum Difference Between Even and Odd Frequency II](src/exercises/3445.maximum-difference-between-even-and-odd-frequency-ii.py) - Array, Hash Table ### 🔗 Linked Lists - [2. Add Two Numbers](src/exercises/2.add-two-numbers.py) - Linked List, Math, Recursion - [21. Merge Two Sorted Lists](src/exercises/21.merge-two-sorted-lists.py) - Linked List, Recursion - [92. Reverse Linked List II](src/exercises/92.reverse-linked-list-ii.py) - Linked List - [141. Linked List Cycle](src/exercises/141.linked-list-cycle.py) - Hash Table, Linked List, Two Pointers - [206. Reverse Linked List](src/exercises/206.reverse-linked-list.py) - Linked List, Recursion ### 🌳 Trees & Graphs - [1298. Maximum Candies You Can Get from Boxes](src/exercises/1298.maximum-candies-you-can-get-from-boxes.py) - Breadth-First Search, Array - [1820. Maximum Number of Accepted Invitations](src/exercises/1820.maximum-number-of-accepted-invitations.py) - Graph, Backtracking - [990. Satisfiability of Equality Equations](src/exercises/990.satisfiability-of-equality-equations.py) - Array, Union Find, Graph ### 🔍 Binary Search - [4. Median of Two Sorted Arrays](src/exercises/4.median-of-two-sorted-arrays.py) - Array, Binary Search, Divide and Conquer - [35. Search Insert Position](src/exercises/35.search-insert-position.py) - Array, Binary Search - [50. Pow(x, n)](src/exercises/50.powx-n.py) - Math, Recursion - [69. Sqrt(x)](src/exercises/69.sqrtx.py) - Math, Binary Search - [74. Search a 2D Matrix](src/exercises/74.search-a-2d-matrix.py) - Array, Binary Search, Matrix - [153. Find Minimum in Rotated Sorted Array](src/exercises/153.find-minimum-in-rotated-sorted-array.py) - Array, Binary Search - [167. Two Sum II - Input Array Is Sorted](src/exercises/167.two-sum-ii-input-array-is-sorted.py) - Array, Two Pointers, Binary Search - [704. Binary Search](src/exercises/704.binary-search.py) - Array, Binary Search - [875. Koko Eating Bananas](src/exercises/875.koko-eating-bananas.py) - Array, Binary Search - [2040. Kth Smallest Product of Two Sorted Arrays](src/exercises/2040.kth-smallest-product-of-two-sorted-arrays.py) - Array, Binary Search - [2616. Minimize the Maximum Difference of Pairs](src/exercises/2616.minimize-the-maximum-difference-of-pairs.py) - Array, Binary Search, Greedy ### 🧮 Dynamic Programming - [5. Longest Palindromic Substring](src/exercises/5.longest-palindromic-substring.py) - String, Dynamic Programming - [10. Regular Expression Matching](src/exercises/10.regular-expression-matching.py) - String, Dynamic Programming, Recursion - [22. Generate Parentheses](src/exercises/22.generate-parentheses.py) - String, Dynamic Programming, Backtracking - [42. Trapping Rain Water](src/exercises/42.trapping-rain-water.py) - Array, Two Pointers, Dynamic Programming, Stack - [45. Jump Game II](src/exercises/45.jump-game-ii.py) - Array, Dynamic Programming, Greedy - [55. Jump Game](src/exercises/55.jump-game.py) - Array, Dynamic Programming, Greedy - [91. Decode Ways](src/exercises/91.decode-ways.py) - String, Dynamic Programming - [121. Best Time to Buy and Sell Stock](src/exercises/121.best-time-to-buy-and-sell-stock.py) - Array, Dynamic Programming - [122. Best Time to Buy and Sell Stock II](src/exercises/122.best-time-to-buy-and-sell-stock-ii.py) - Array, Dynamic Programming, Greedy - [128. Longest Consecutive Sequence](src/exercises/128.longest-consecutive-sequence.py) - Array, Hash Table, Union Find - [135. Candy](src/exercises/135.candy.py) - Array, Greedy - [392. Is Subsequence](src/exercises/392.is-subsequence.py) - String, Two Pointers, Dynamic Programming ### 🎯 Two Pointers - [3. Longest Substring Without Repeating Characters](src/exercises/3.longest-substring-without-repeating-characters.py) - Hash Table, String, Sliding Window - [11. Container With Most Water](src/exercises/11.container-with-most-water.py) - Array, Two Pointers, Greedy - [15. 3Sum](src/exercises/15.3sum.py) - Array, Two Pointers, Sorting - [26. Remove Duplicates from Sorted Array](src/exercises/80.remove-duplicates-from-sorted-array-ii.py) - Array, Two Pointers - [27. Remove Element](src/exercises/80.remove-duplicates-from-sorted-array-ii.py) - Array, Two Pointers - [28. Find the Index of the First Occurrence in a String](src/exercises/28.find-the-index-of-the-first-occurrence-in-a-string.py) - String, Two Pointers - [42. Trapping Rain Water](src/exercises/42.trapping-rain-water.py) - Array, Two Pointers, Dynamic Programming, Stack - [80. Remove Duplicates from Sorted Array II](src/exercises/80.remove-duplicates-from-sorted-array-ii.py) - Array, Two Pointers - [88. Merge Sorted Array](src/exercises/88.merge-sorted-array.py) - Array, Two Pointers - [125. Valid Palindrome](src/exercises/125.valid-palindrome.py) - String, Two Pointers - [141. Linked List Cycle](src/exercises/141.linked-list-cycle.py) - Hash Table, Linked List, Two Pointers - [167. Two Sum II - Input Array Is Sorted](src/exercises/167.two-sum-ii-input-array-is-sorted.py) - Array, Two Pointers, Binary Search - [189. Rotate Array](src/exercises/189.rotate-array.py) - Array, Math, Two Pointers - [202. Happy Number](src/exercises/202.happy-number.py) - Hash Table, Math, Two Pointers - [219. Contains Duplicate II](src/exercises/219.contains-duplicate-ii.py) - Array, Hash Table, Sliding Window - [243. Shortest Word Distance](src/exercises/243.shortest-word-distance.py) - Array, String - [244. Shortest Word Distance II](src/exercises/244.shortest-word-distance-ii.py) - Array, Hash Table, Design, Two Pointers - [245. Shortest Word Distance III](src/exercises/245.shortest-word-distance-iii.py) - Array, String - [246. Strobogrammatic Number](src/exercises/246.strobogrammatic-number.py) - Hash Table, Two Pointers, String - [392. Is Subsequence](src/exercises/392.is-subsequence.py) - String, Two Pointers, Dynamic Programming - [2441. Largest Positive Integer That Exists With Its Negative](src/exercises/2441.largest-positive-integer-that-exists-with-its-negative.py) - Array, Hash Table, Two Pointers ### 🗃️ Hash Tables - [1. Two Sum](src/exercises/1.two-sum.py) - Hash Table, Array - [13. Roman to Integer](src/exercises/13.roman-to-integer.py) - Hash Table, Math, String - [20. Valid Parentheses](src/exercises/20.valid-parentheses.py) - Stack, String - [36. Valid Sudoku](src/exercises/36.valid-sudoku.py) - Array, Hash Table, Matrix - [141. Linked List Cycle](src/exercises/141.linked-list-cycle.py) - Hash Table, Linked List, Two Pointers - [149. Max Points on a Line](src/exercises/149.max-points-on-a-line.py) - Array, Hash Table, Math, Geometry - [169. Majority Element](src/exercises/169.majority-element.py) - Array, Hash Table, Divide and Conquer - [202. Happy Number](src/exercises/202.happy-number.py) - Hash Table, Math, Two Pointers - [205. Isomorphic Strings](src/exercises/205.isomorphic-strings.py) - Hash Table, String - [217. Contains Duplicate](src/exercises/217.contains-duplicate.py) - Array, Hash Table, Sorting - [219. Contains Duplicate II](src/exercises/219.contains-duplicate-ii.py) - Array, Hash Table, Sliding Window - [242. Valid Anagram](src/exercises/242.valid-anagram.py) - String, Sorting, Hash Table - [243. Shortest Word Distance](src/exercises/243.shortest-word-distance.py) - Array, String - [244. Shortest Word Distance II](src/exercises/244.shortest-word-distance-ii.py) - Array, Hash Table, Design, Two Pointers - [246. Strobogrammatic Number](src/exercises/246.strobogrammatic-number.py) - Hash Table, Two Pointers, String - [290. Word Pattern](src/exercises/290.word-pattern.py) - Hash Table, String - [383. Ransom Note](src/exercises/383.ransom-note.py) - String, Hash Table, Counting - [128. Longest Consecutive Sequence](src/exercises/128.longest-consecutive-sequence.py) - Array, Hash Table, Union Find - [2053. Kth Distinct String in an Array](src/exercises/2053.kth-distinct-string-in-an-array.py) - Array, Hash Table, String - [2441. Largest Positive Integer That Exists With Its Negative](src/exercises/2441.largest-positive-integer-that-exists-with-its-negative.py) - Array, Hash Table, Two Pointers - [3442. Maximum Difference Between Even and Odd Frequency I](src/exercises/3442.maximum-difference-between-even-and-odd-frequency-i.py) - Array, Hash Table - [3445. Maximum Difference Between Even and Odd Frequency II](src/exercises/3445.maximum-difference-between-even-and-odd-frequency-ii.py) - Array, Hash Table ### 📚 Stacks & Queues - [20. Valid Parentheses](src/exercises/20.valid-parentheses.py) - Stack, String - [42. Trapping Rain Water](src/exercises/42.trapping-rain-water.py) - Array, Two Pointers, Dynamic Programming, Stack - [150. Evaluate Reverse Polish Notation](src/exercises/150.evaluate-reverse-polish-notation.py) - Array, Math, Stack - [155. Min Stack](src/exercises/155.min-stack.py) - Stack, Design - [2116. Check if a Parentheses String Can Be Valid](src/exercises/2116.check-if-a-parentheses-string-can-be-valid.py) - String, Stack, Greedy ### 🔄 Backtracking - [22. Generate Parentheses](src/exercises/22.generate-parentheses.py) - String, Dynamic Programming, Backtracking - [89. Gray Code](src/exercises/89.gray-code.py) - Math, Backtracking, Bit Manipulation - [90. Subsets II](src/exercises/90.subsets-ii.py) - Array, Backtracking, Bit Manipulation - [1820. Maximum Number of Accepted Invitations](src/exercises/1820.maximum-number-of-accepted-invitations.py) - Graph, Backtracking ### 🎲 Greedy - [11. Container With Most Water](src/exercises/11.container-with-most-water.py) - Array, Two Pointers, Greedy - [45. Jump Game II](src/exercises/45.jump-game-ii.py) - Array, Dynamic Programming, Greedy - [55. Jump Game](src/exercises/55.jump-game.py) - Array, Dynamic Programming, Greedy - [122. Best Time to Buy and Sell Stock II](src/exercises/122.best-time-to-buy-and-sell-stock-ii.py) - Array, Dynamic Programming, Greedy - [135. Candy](src/exercises/135.candy.py) - Array, Greedy - [2116. Check if a Parentheses String Can Be Valid](src/exercises/2116.check-if-a-parentheses-string-can-be-valid.py) - String, Stack, Greedy - [2294. Partition Array Such That Maximum Difference Is K](src/exercises/2294.partition-array-such-that-maximum-difference-is-k.py) - Array, Greedy, Sorting - [2616. Minimize the Maximum Difference of Pairs](src/exercises/2616.minimize-the-maximum-difference-of-pairs.py) - Array, Binary Search, Greedy - [2966. Divide Array Into Arrays With Max Difference](src/exercises/2966.divide-array-into-arrays-with-max-difference.py) - Array, Greedy, Sorting ### 🔢 Math - [7. Reverse Integer](src/exercises/7.reverse-integer.py) - Math - [9. Palindrome Number](src/exercises/9.palindrome-number.py) - Math - [13. Roman to Integer](src/exercises/13.roman-to-integer.py) - Hash Table, Math, String - [50. Pow(x, n)](src/exercises/50.powx-n.py) - Math, Recursion - [66. Plus One](src/exercises/66.plus-one.py) - Array, Math - [69. Sqrt(x)](src/exercises/69.sqrtx.py) - Math, Binary Search - [89. Gray Code](src/exercises/89.gray-code.py) - Math, Backtracking, Bit Manipulation - [149. Max Points on a Line](src/exercises/149.max-points-on-a-line.py) - Array, Hash Table, Math, Geometry - [172. Factorial Trailing Zeroes](src/exercises/172.factorial-trailing-zeroes.py) - Math - [189. Rotate Array](src/exercises/189.rotate-array.py) - Array, Math, Two Pointers - [202. Happy Number](src/exercises/202.happy-number.py) - Hash Table, Math, Two Pointers - [150. Evaluate Reverse Polish Notation](src/exercises/150.evaluate-reverse-polish-notation.py) - Array, Math, Stack ### 🧮 Bit Manipulation - [89. Gray Code](src/exercises/89.gray-code.py) - Math, Backtracking, Bit Manipulation - [90. Subsets II](src/exercises/90.subsets-ii.py) - Array, Backtracking, Bit Manipulation ### 🏗️ Design - [155. Min Stack](src/exercises/155.min-stack.py) - Stack, Design - [244. Shortest Word Distance II](src/exercises/244.shortest-word-distance-ii.py) - Array, Hash Table, Design, Two Pointers ### 🔗 Union Find - [128. Longest Consecutive Sequence](src/exercises/128.longest-consecutive-sequence.py) - Array, Hash Table, Union Find - [990. Satisfiability of Equality Equations](src/exercises/990.satisfiability-of-equality-equations.py) - Array, Union Find, Graph ### 📊 Sorting - [15. 3Sum](src/exercises/15.3sum.py) - Array, Two Pointers, Sorting - [80. Remove Duplicates from Sorted Array II](src/exercises/80.remove-duplicates-from-sorted-array-ii.py) - Array, Two Pointers - [88. Merge Sorted Array](src/exercises/88.merge-sorted-array.py) - Array, Two Pointers - [1200. Minimum Absolute Difference](src/exercises/1200.minimum-absolute-difference.py) - Array, Sorting - [217. Contains Duplicate](src/exercises/217.contains-duplicate.py) - Array, Hash Table, Sorting - [242. Valid Anagram](src/exercises/242.valid-anagram.py) - String, Sorting, Hash Table - [2294. Partition Array Such That Maximum Difference Is K](src/exercises/2294.partition-array-such-that-maximum-difference-is-k.py) - Array, Greedy, Sorting - [2966. Divide Array Into Arrays With Max Difference](src/exercises/2966.divide-array-into-arrays-with-max-difference.py) - Array, Greedy, Sorting ### 🔄 Recursion - [2. Add Two Numbers](src/exercises/2.add-two-numbers.py) - Linked List, Math, Recursion - [10. Regular Expression Matching](src/exercises/10.regular-expression-matching.py) - String, Dynamic Programming, Recursion - [21. Merge Two Sorted Lists](src/exercises/21.merge-two-sorted-lists.py) - Linked List, Recursion - [22. Generate Parentheses](src/exercises/22.generate-parentheses.py) - String, Dynamic Programming, Backtracking - [50. Pow(x, n)](src/exercises/50.powx-n.py) - Math, Recursion - [206. Reverse Linked List](src/exercises/206.reverse-linked-list.py) - Linked List, Recursion - [248. Strobogrammatic Number III](src/exercises/248.strobogrammatic-number-iii.py) - Math, Recursion ### 🎯 Sliding Window - [3. Longest Substring Without Repeating Characters](src/exercises/3.longest-substring-without-repeating-characters.py) - Hash Table, String, Sliding Window - [219. Contains Duplicate II](src/exercises/219.contains-duplicate-ii.py) - Array, Hash Table, Sliding Window ### 📐 Geometry - [149. Max Points on a Line](src/exercises/149.max-points-on-a-line.py) - Array, Hash Table, Math, Geometry ### 🔍 Divide and Conquer - [4. Median of Two Sorted Arrays](src/exercises/4.median-of-two-sorted-arrays.py) - Array, Binary Search, Divide and Conquer - [169. Majority Element](src/exercises/169.majority-element.py) - Array, Hash Table, Divide and Conquer ### 📝 String Manipulation - [3. Longest Substring Without Repeating Characters](src/exercises/3.longest-substring-without-repeating-characters.py) - Hash Table, String, Sliding Window - [5. Longest Palindromic Substring](src/exercises/5.longest-palindromic-substring.py) - String, Dynamic Programming - [6. Zigzag Conversion](src/exercises/6.zigzag-conversion.py) - String - [10. Regular Expression Matching](src/exercises/10.regular-expression-matching.py) - String, Dynamic Programming, Recursion - [13. Roman to Integer](src/exercises/13.roman-to-integer.py) - Hash Table, Math, String - [14. Longest Common Prefix](src/exercises/14.longest-common-prefix.py) - String, Trie - [20. Valid Parentheses](src/exercises/20.valid-parentheses.py) - Stack, String - [22. Generate Parentheses](src/exercises/22.generate-parentheses.py) - String, Dynamic Programming, Backtracking - [28. Find the Index of the First Occurrence in a String](src/exercises/28.find-the-index-of-the-first-occurrence-in-a-string.py) - String, Two Pointers - [125. Valid Palindrome](src/exercises/125.valid-palindrome.py) - String, Two Pointers - [205. Isomorphic Strings](src/exercises/205.isomorphic-strings.py) - Hash Table, String - [242. Valid Anagram](src/exercises/242.valid-anagram.py) - String, Sorting, Hash Table - [246. Strobogrammatic Number](src/exercises/246.strobogrammatic-number.py) - Hash Table, Two Pointers, String - [248. Strobogrammatic Number III](src/exercises/248.strobogrammatic-number-iii.py) - Math, Recursion - [290. Word Pattern](src/exercises/290.word-pattern.py) - Hash Table, String - [383. Ransom Note](src/exercises/383.ransom-note.py) - String, Hash Table, Counting - [392. Is Subsequence](src/exercises/392.is-subsequence.py) - String, Two Pointers, Dynamic Programming - [91. Decode Ways](src/exercises/91.decode-ways.py) - String, Dynamic Programming - [2116. Check if a Parentheses String Can Be Valid](src/exercises/2116.check-if-a-parentheses-string-can-be-valid.py) - String, Stack, Greedy ### 📊 Matrix - [36. Valid Sudoku](src/exercises/36.valid-sudoku.py) - Array, Hash Table, Matrix - [74. Search a 2D Matrix](src/exercises/74.search-a-2d-matrix.py) - Array, Binary Search, Matrix ### 🔢 Counting - [383. Ransom Note](src/exercises/383.ransom-note.py) - String, Hash Table, Counting ### 🌐 Breadth-First Search - [1298. Maximum Candies You Can Get from Boxes](src/exercises/1298.maximum-candies-you-can-get-from-boxes.py) - Breadth-First Search, Array ## 📈 Progress Tracking ### Difficulty Distribution - **Easy**: ~40 problems - **Medium**: ~45 problems - **Hard**: ~5 problems ### Top Problem Types 1. **Arrays & Strings** - Most common 2. **Hash Tables** - Frequently used technique 3. **Two Pointers** - Efficient array manipulation 4. **Binary Search** - Optimization problems 5. **Dynamic Programming** - Complex problem solving ## 🛠️ Solution Structure Each solution follows a consistent structure: - Standard library imports - Type hints for better code clarity - Solution class with required method - Clean, readable implementation - Proper comments and documentation ## 🎯 Learning Focus Areas Based on the solutions, key areas of expertise include: - **Array manipulation** and **two-pointer techniques** - **Hash table** optimization for lookups - **Binary search** for efficient searching - **Dynamic programming** for complex problems - **String manipulation** and **palindrome problems** - **Linked list** operations and **cycle detection** ## 📚 Resources - [LeetCode Problem Set](https://leetcode.com/problemset/) - [LeetCode Profile](https://leetcode.com/u/cargdev/) --- *This index is automatically generated and organized by problem categories and difficulty levels. Each solution includes the relevant tags and techniques used.*