Files
leetcode/README.md

142 lines
15 KiB
Markdown

# 🧠 LeetCode Practice by CarGDev
This repo tracks my journey solving LeetCode problems — not just code, but my thought process, reflections, and patterns I'm mastering.
[![LeetCode Problems](https://img.shields.io/badge/LeetCode-79%2B%20Solved-brightgreen?style=for-the-badge&logo=leetcode)](https://leetcode.com/u/cargdev/)
[![Python](https://img.shields.io/badge/Python-3.8%2B-blue?style=for-the-badge&logo=python)](https://www.python.org/)
[![JavaScript](https://img.shields.io/badge/JavaScript-ES6%2B-yellow?style=for-the-badge&logo=javascript)](https://developer.mozilla.org/en-US/docs/Web/JavaScript)
[![SQL](https://img.shields.io/badge/SQL-MySQL%2B-orange?style=for-the-badge&logo=mysql)](https://www.mysql.com/)
[![License](https://img.shields.io/badge/License-MIT-green?style=for-the-badge)](LICENSE)
[![Last Commit](https://img.shields.io/github/last-commit/CarGDev/leetcode?style=for-the-badge&color=orange)](https://github.com/CarGDev/leetcode/commits/master)
[![Repository Size](https://img.shields.io/github/repo-size/CarGDev/leetcode?style=for-the-badge&color=blueviolet)](https://github.com/CarGDev/leetcode)
## ✅ Progress
[![Easy Problems](https://img.shields.io/badge/Easy-40%2B-brightgreen?style=flat-square)](https://leetcode.com/problemset/?difficulty=EASY)
[![Medium Problems](https://img.shields.io/badge/Medium-30%2B-orange?style=flat-square)](https://leetcode.com/problemset/?difficulty=MEDIUM)
[![Hard Problems](https://img.shields.io/badge/Hard-5%2B-red?style=flat-square)](https://leetcode.com/problemset/?difficulty=HARD)
[![Success Rate](https://img.shields.io/badge/Success%20Rate-95%25-brightgreen?style=flat-square)](https://leetcode.com/u/cargdev/)
[![Streak](https://img.shields.io/badge/Current%20Streak-Active-blue?style=flat-square)](https://leetcode.com/u/cargdev/)
- **Total Problems Solved**: 79+
- **Notes Written**: 1+ (expanding soon)
- **Categories Covered**: Arrays, Hash Maps, Dynamic Programming, Two Pointers, Binary Search, Trees, etc.
## 🗂 Directory Structure
- `src/exercises/`: Auto-downloaded solutions via [leetcode.nvim](https://github.com/kawre/leetcode.nvim) caching
## 🧩 Problem Index
| # | LeetCode # | Title | Difficulty | Technology | Notes |
|---|------------|-------|------------|------------|-------|
| 1 | 001 | [Two Sum](src/exercises/1.two-sum.py) | Easy | Python | [📝](src/notes/001_two_sum.md) |
| 2 | 002 | [Add Two Numbers](src/exercises/2.add-two-numbers.py) | Medium | Python | [📝](src/notes/002_add_two_numbers.md) |
| 3 | 003 | [Longest Substring Without Repeating Characters](src/exercises/3.longest-substring-without-repeating-characters.py) | Medium | Python | [📝](src/notes/003_longest_substring_without_repeating_characters.md) |
| 4 | 004 | [Median of Two Sorted Arrays](src/exercises/4.median-of-two-sorted-arrays.py) | Hard | Python | [📝](src/notes/004_median_of_two_sorted_arrays.md) |
| 5 | 005 | [Longest Palindromic Substring](src/exercises/5.longest-palindromic-substring.py) | Medium | Python | [📝](src/notes/005_longest_palindromic_substring.md) |
| 6 | 009 | [Palindrome Number](src/exercises/9.palindrome-number.py) | Easy | Python | [📝](src/notes/009_palindrome_number.md) |
| 7 | 011 | [Container With Most Water](src/exercises/11.container-with-most-water.py) | Medium | Python | [📝](src/notes/011_container_with_most_water.md) |
| 8 | 013 | [Roman to Integer](src/exercises/13.roman-to-integer.py) | Easy | Python | [📝](src/notes/013_roman_to_integer.md) |
| 9 | 014 | [Longest Common Prefix](src/exercises/14.longest-common-prefix.py) | Easy | Python | [📝](src/notes/014_longest_common_prefix.md) |
| 10 | 015 | [3Sum](src/exercises/15.3sum.py) | Medium | Python | [📝](src/notes/015_3sum.md) |
| 11 | 020 | [Valid Parentheses](src/exercises/20.valid-parentheses.py) | Easy | Python | [📝](src/notes/020_valid_parentheses.md) |
| 12 | 022 | [Generate Parentheses](src/exercises/22.generate-parentheses.py) | Medium | Python | [📝](src/notes/022_generate_parentheses.md) |
| 13 | 026 | [Remove Duplicates from Sorted Array](src/exercises/26.remove-duplicates-from-sorted-array.py) | Easy | Python | [📝](src/notes/026_remove_duplicates_from_sorted_array.md) |
| 14 | 027 | [Remove Element](src/exercises/27.remove-element.py) | Easy | Python | [📝](src/notes/027_remove_element.md) |
| 15 | 028 | [Find the Index of the First Occurrence in a String](src/exercises/28.find-the-index-of-the-first-occurrence-in-a-string.py) | Easy | Python | [📝](src/notes/028_find_the_index_of_the_first_occurrence_in_a_string.md) |
| 16 | 035 | [Search Insert Position](src/exercises/35.search-insert-position.py) | Easy | Python | [📝](src/notes/035_search_insert_position.md) |
| 17 | 036 | [Valid Sudoku](src/exercises/36.valid-sudoku.py) | Medium | Python | [📝](src/notes/036_valid_sudoku.md) |
| 18 | 042 | [Trapping Rain Water](src/exercises/42.trapping-rain-water.py) | Hard | Python | [📝](src/notes/042_trapping_rain_water.md) |
| 19 | 049 | [Group Anagrams](src/exercises/49.group-anagrams.js) | Medium | JavaScript | [📝](src/notes/049_group_anagrams.md) |
| 20 | 050 | [Pow(x, n)](src/exercises/50.powx-n.py) | Medium | Python | [📝](src/notes/050_powx_n.md) |
| 21 | 055 | [Jump Game](src/exercises/55.jump-game.py) | Medium | Python | [📝](src/notes/055_jump_game.md) |
| 22 | 058 | [Length of Last Word](src/exercises/58.length-of-last-word.py) | Easy | Python | [📝](src/notes/058_length_of_last_word.md) |
| 23 | 066 | [Plus One](src/exercises/66.plus-one.py) | Easy | Python | [📝](src/notes/066_plus_one.md) |
| 24 | 069 | [Sqrt(x)](src/exercises/69.sqrtx.py) | Easy | Python | [📝](src/notes/069_sqrtx.md) |
| 25 | 070 | [Climbing Stairs](src/exercises/70.climbing-stairs.js) | Easy | JavaScript | [📝](src/notes/070_climbing_stairs.md) |
| 26 | 074 | [Search a 2D Matrix](src/exercises/74.search-a-2d-matrix.py) | Medium | Python | [📝](src/notes/074_search_a_2d_matrix.md) |
| 27 | 080 | [Remove Duplicates from Sorted Array II](src/exercises/80.remove-duplicates-from-sorted-array-ii.py) | Medium | Python | [📝](src/notes/080_remove_duplicates_from_sorted_array_ii.md) |
| 28 | 088 | [Merge Sorted Array](src/exercises/88.merge-sorted-array.py) | Easy | Python | [📝](src/notes/088_merge_sorted_array.md) |
| 29 | 089 | [Gray Code](src/exercises/89.gray-code.py) | Medium | Python | [📝](src/notes/089_gray_code.md) |
| 30 | 090 | [Subsets II](src/exercises/90.subsets-ii.py) | Medium | Python | [📝](src/notes/090_subsets_ii.md) |
| 31 | 091 | [Decode Ways](src/exercises/91.decode-ways.py) | Medium | Python | [📝](src/notes/091_decode_ways.md) |
| 32 | 104 | [Maximum Depth of Binary Tree](src/exercises/104.maximum-depth-of-binary-tree.py) | Easy | Python | [📝](src/notes/104_maximum_depth_of_binary_tree.md) |
| 33 | 121 | [Best Time to Buy and Sell Stock](src/exercises/121.best-time-to-buy-and-sell-stock.py) | Easy | Python | [📝](src/notes/121_best_time_to_buy_and_sell_stock.md) |
| 34 | 122 | [Best Time to Buy and Sell Stock II](src/exercises/122.best-time-to-buy-and-sell-stock-ii.py) | Medium | Python | [📝](src/notes/122_best_time_to_buy_and_sell_stock_ii.md) |
| 35 | 125 | [Valid Palindrome](src/exercises/125.valid-palindrome.py) | Easy | Python | [📝](src/notes/125_valid_palindrome.md) |
| 36 | 128 | [Longest Consecutive Sequence](src/exercises/128.longest-consecutive-sequence.py) | Medium | Python | [📝](src/notes/128_longest_consecutive_sequence.md) |
| 37 | 135 | [Candy](src/exercises/135.candy.py) | Hard | Python | [📝](src/notes/135_candy.md) |
| 38 | 141 | [Linked List Cycle](src/exercises/141.linked-list-cycle.py) | Easy | Python | [📝](src/notes/141_linked_list_cycle.md) |
| 39 | 149 | [Max Points on a Line](src/exercises/149.max-points-on-a-line.py) | Hard | Python | [📝](src/notes/149_max_points_on_a_line.md) |
| 40 | 151 | [Reverse Words in a String](src/exercises/151.reverse-words-in-a-string.py) | Medium | Python | [📝](src/notes/151_reverse_words_in_a_string.md) |
| 41 | 153 | [Find Minimum in Rotated Sorted Array](src/exercises/153.find-minimum-in-rotated-sorted-array.py) | Medium | Python | [📝](src/notes/153_find_minimum_in_rotated_sorted_array.md) |
| 42 | 155 | [Min Stack](src/exercises/155.min-stack.py) | Medium | Python | [📝](src/notes/155_min_stack.md) |
| 43 | 167 | [Two Sum II - Input Array Is Sorted](src/exercises/167.two-sum-ii-input-array-is-sorted.py) | Medium | Python | [📝](src/notes/167_two_sum_ii_input_array_is_sorted.md) |
| 44 | 169 | [Majority Element](src/exercises/169.majority-element.py) | Easy | Python | [📝](src/notes/169_majority_element.md) |
| 45 | 172 | [Factorial Trailing Zeroes](src/exercises/172.factorial-trailing-zeroes.py) | Medium | Python | [📝](src/notes/172_factorial_trailing_zeroes.md) |
| 46 | 189 | [Rotate Array](src/exercises/189.rotate-array.py) | Medium | Python | [📝](src/notes/189_rotate_array.md) |
| 47 | 202 | [Happy Number](src/exercises/202.happy-number.py) | Easy | Python | [📝](src/notes/202_happy_number.md) |
| 48 | 205 | [Isomorphic Strings](src/exercises/205.isomorphic-strings.py) | Easy | Python | [📝](src/notes/205_isomorphic_strings.md) |
| 49 | 206 | [Reverse Linked List](src/exercises/206.reverse-linked-list.py) | Easy | Python | [📝](src/notes/206_reverse_linked_list.md) |
| 50 | 217 | [Contains Duplicate](src/exercises/217.contains-duplicate.py) | Easy | Python | [📝](src/notes/217_contains_duplicate.md) |
| 51 | 219 | [Contains Duplicate II](src/exercises/219.contains-duplicate-ii.py) | Easy | Python | [📝](src/notes/219_contains_duplicate_ii.md) |
| 52 | 228 | [Summary Ranges](src/exercises/228.summary-ranges.py) | Easy | Python | [📝](src/notes/228_summary_ranges.md) |
| 53 | 238 | [Product of Array Except Self](src/exercises/238.product-of-array-except-self.py) | Medium | Python | [📝](src/notes/238_product_of_array_except_self.md) |
| 54 | 242 | [Valid Anagram](src/exercises/242.valid-anagram.py) | Easy | Python | [📝](src/notes/242_valid_anagram.md) |
| 55 | 243 | [Shortest Word Distance](src/exercises/243.shortest-word-distance.py) | Easy | Python | [📝](src/notes/243_shortest_word_distance.md) |
| 56 | 244 | [Shortest Word Distance II](src/exercises/244.shortest-word-distance-ii.py) | Medium | Python | [📝](src/notes/244_shortest_word_distance_ii.md) |
| 57 | 245 | [Shortest Word Distance III](src/exercises/245.shortest-word-distance-iii.py) | Medium | Python | [📝](src/notes/245_shortest_word_distance_iii.md) |
| 58 | 246 | [Strobogrammatic Number](src/exercises/246.strobogrammatic-number.py) | Easy | Python | [📝](src/notes/246_strobogrammatic_number.md) |
| 59 | 248 | [Strobogrammatic Number III](src/exercises/248.strobogrammatic-number-iii.py) | Hard | Python | [📝](src/notes/248_strobogrammatic_number_iii.md) |
| 60 | 271 | [Encode and Decode Strings](src/exercises/271.encode-and-decode-strings.js) | Medium | JavaScript | [📝](src/notes/271_encode_and_decode_strings.md) |
| 61 | 274 | [H-Index](src/exercises/274.h-index.py) | Medium | Python | [📝](src/notes/274_h_index.md) |
| 62 | 290 | [Word Pattern](src/exercises/290.word-pattern.py) | Easy | Python | [📝](src/notes/290_word_pattern.md) |
| 63 | 347 | [Top K Frequent Elements](src/exercises/347.top-k-frequent-elements.js) | Medium | JavaScript | [📝](src/notes/347_top_k_frequent_elements.md) |
| 64 | 383 | [Ransom Note](src/exercises/383.ransom-note.py) | Easy | Python | [📝](src/notes/383_ransom_note.md) |
| 65 | 392 | [Is Subsequence](src/exercises/392.is-subsequence.py) | Easy | Python | [📝](src/notes/392_is_subsequence.md) |
| 66 | 595 | [Big Countries](src/exercises/595.big-countries.sql) | Easy | SQL | [📝](src/notes/595_big_countries.md) |
| 67 | 704 | [Binary Search](src/exercises/704.binary-search.py) | Easy | Python | [📝](src/notes/704_binary_search.md) |
| 68 | 760 | [Find Anagram Mappings](src/exercises/760.find-anagram-mappings.py) | Easy | Python | [📝](src/notes/760_find_anagram_mappings.md) |
| 69 | 875 | [Koko Eating Bananas](src/exercises/875.koko-eating-bananas.py) | Medium | Python | [📝](src/notes/875_koko_eating_bananas.md) |
| 70 | 1048 | [Longest String Chain](src/exercises/1048.longest-string-chain.js) | Medium | JavaScript | [📝](src/notes/1048_longest_string_chain.md) |
| 71 | 1200 | [Minimum Absolute Difference](src/exercises/1200.minimum-absolute-difference.py) | Easy | Python | [📝](src/notes/1200_minimum_absolute_difference.md) |
| 72 | 1302 | [Deepest Leaves Sum](src/exercises/1302.deepest-leaves-sum.py) | Medium | Python | [📝](src/notes/1302_deepest_leaves_sum.md) |
| 73 | 2016 | [Maximum Difference Between Increasing Elements](src/exercises/2016.maximum-difference-between-increasing-elements.py) | Easy | Python | [📝](src/notes/2016_maximum_difference_between_increasing_elements.md) |
| 74 | 2053 | [Kth Distinct String in an Array](src/exercises/2053.kth-distinct-string-in-an-array.py) | Easy | Python | [📝](src/notes/2053_kth_distinct_string_in_an_array.md) |
| 75 | 2116 | [Check if a Parentheses String Can Be Valid](src/exercises/2116.check-if-a-parentheses-string-can-be-valid.py) | Medium | Python | [📝](src/notes/2116_check_if_a_parentheses_string_can_be_valid.md) |
| 76 | 2294 | [Partition Array Such That Maximum Difference Is K](src/exercises/2294.partition-array-such-that-maximum-difference-is-k.py) | Medium | Python | [📝](src/notes/2294_partition_array_such_that_maximum_difference_is_k.md) |
| 77 | 3442 | [Maximum Difference Between Even and Odd Frequency I](src/exercises/3442.maximum-difference-between-even-and-odd-frequency-i.py) | Easy | Python | [📝](src/notes/3442_maximum_difference_between_even_and_odd_frequency_i.md) |
| 78 | 3582 | [Generate Tag for Video Caption](src/exercises/3582.generate-tag-for-video-caption.py) | Easy | Python | [📝](src/notes/3582_generate_tag_for_video_caption.md) |
| 79 | 3583 | [Count Special Triplets](src/exercises/3583.count-special-triplets.py) | Easy | Python | [📝](src/notes/3583_count_special_triplets.md) |
## 🛠️ Tools & Scripts
- `create_missing_notes.sh`: Automatically creates missing note files for solved problems
- `update_difficulties.sh`: Manage problem difficulties dynamically without hardcoding
### Script Usage Examples:
```bash
# Create missing notes for new problems
./create_missing_notes.sh
# Add difficulty mapping for a problem
./update_difficulties.sh -a 1 Easy
./update_difficulties.sh -a 4 Hard
# List all difficulty mappings
./update_difficulties.sh -l
# Update all note files with correct difficulties
./update_difficulties.sh -u
# Remove difficulty mapping
./update_difficulties.sh -r 1
```
## 📚 Resources
- [LeetCode Problem Set](https://leetcode.com/problemset/)
- [My LeetCode Profile](https://leetcode.com/u/cargdev/)
---
*This repository is a living document of my algorithmic learning journey. Each note captures my thought process, mistakes, and insights.*