algorithm

module
v0.0.0-...-97e7716 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 30, 2026 License: MIT

README ΒΆ

πŸ“š Algorithm

A data structures and algorithms learning repository based on Go language, combining LeetCode practice and various learning resources (books, tutorials, blogs, videos).

Go Obsidian uv Python License

English | δΈ­ζ–‡

Algorithm

This project integrates various learning resources (books, tutorials, blogs, videos) on data structures and algorithm analysis with the practical platform LeetCode. It aims to build a comprehensive algorithm knowledge system through a trinity approach of "theoretical learning + coding practice + documentation accumulation."

The project documentation is organized using Obsidian, supporting full-repository bidirectional linking for seamless switching between theoretical analysis and code implementation.

πŸ“– Project Introduction

  • LeetCode Problem Solving: Select high-frequency algorithm problems, implement them in Go, and include comprehensive unit tests.

  • Go Data Structures (gods): Custom implementations of common data structures (lists, trees, heaps, stacks, queues, hash tables, etc.) from scratch for deep learning.

  • Obsidian Knowledge Base: Record problem-solving ideas, complexity analysis, and study notes in the docs directory to build a personal algorithm encyclopedia.

  • AI Empowerment: Planned intelligent translation and RAG-based Q&A assistant to enhance learning efficiency using modern technology.

πŸ“Š LeetCode Progress

Currently, this repository contains solutions to 78 LeetCode problems, covering a range of difficulty levels and algorithmic topics.

Total Easy Medium Hard
78 18 47 13

The pie chart below shows the distribution of problems by difficulty level, while the bar chart highlights the top 10 most frequently encountered tags. The majority of problems fall into the Medium category, with a focus on fundamental topics like Array, Hash Table, Tree.

Difficulty Distribution Top 10 Tags

The word cloud below provides a visual overview of all tags covered in this repository, with larger words indicating more frequently practiced topics.

Tag Cloud

πŸ’‘ Why Golang

Selecting the right programming language is crucial for learning data structures and algorithms. This project adopts Go for the following reasons:

  1. Pointers for Data Structures: The best way to understand data structures is through a language with explicit pointers (C, C++, Go, Rust). Pointers provide direct visibility into memory layout, making concepts like linked lists, trees, and graphs more tangible.

  2. Rich Standard Library for Algorithms: Effective algorithm learning benefits from built-in data structures and algorithms in the standard library. This eliminates C from consideration, as it lacks comprehensive built-in containers.

  3. Simple Build System and Testing: To focus on data structures and algorithms themselvesβ€”rather than fighting with build toolsβ€”a language should offer a straightforward build system and unit testing. This rules out C++, where setting up a proper testing environment can be cumbersome.

  4. Accessibility and Practicality: While Rust meets the technical criteria above, its ownership model makes implementing certain data structures (like linked lists) overly complex, and its steep learning curve can distract from algorithmic concepts. In contrast, Go satisfies all requirements while offering:

    • Simple, clean syntax that's easy to learn
    • Built-in testing framework with excellent tooling
    • Direct applicability to real-world scenarios (backend development, microservices, cloud-native applications)

Go strikes an ideal balance: it's simple enough for learning yet powerful enough for production use, making it the perfect choice for building a bridge between theoretical understanding and practical application.

πŸš€ Quick Start

Environment Dependencies

  • Go: 1.25+
  • Obsidian: Recommended for the best documentation reading experience.

Running and Testing

  1. Clone the Repository
$ git clone https://github.com/MorePeanuts/algorithm.git
$ cd algorithm
  1. Run Tests Each LeetCode problem comes with test files:
# Test a specific problem (quick way)
$ ./lc-test.sh 0001

# Test a specific problem (full path)
$ go test ./leetcode/0001-0100/0001_two_sum/...

# Run all tests
$ go test ./...
  1. Crawl LeetCode Problems Use the crawler tool to fetch problem descriptions and generate templates:
$ uv sync
$ source .venv/bin/activate
$ crawler https://leetcode.cn/problems/two-sum/
  1. Enable Auto Statistics Update (Optional) The progress statistics and charts can be automatically updated when you commit with a message containing "Add leetcode":
# Enable the git hook
$ git config core.hooksPath .githooks

# Now when you commit like this:
$ git commit -m "Add leetcode 0001_two_sum solution"
# The statistics will be auto-updated and included in your commit

To manually update statistics:

$ uv run --package lc-stats lc-stats

πŸ“ Repository Structure

.
β”œβ”€β”€ assets/                      # Static assets (images, etc.)
β”œβ”€β”€ gods/                        # Go Data Structures - custom implementations
β”‚   β”œβ”€β”€ tree/                    # Tree data structures
β”‚   β”œβ”€β”€ hash/                    # Hash-based structures
β”‚   β”œβ”€β”€ heap/                    # Heap implementations
β”‚   β”œβ”€β”€ list/                    # Linked lists and list structures
β”‚   β”œβ”€β”€ queue/                   # Queue implementations
β”‚   └── stack/                   # Stack implementations
β”œβ”€β”€ leetcode/                    # LeetCode problem-solving code
β”‚   └── 0001-0100/               # Grouped by problem number range
β”‚       └── 0001_two_sum/
β”‚           β”œβ”€β”€ solution.go      # Core algorithm
β”‚           └── solution_test.go # Unit tests
β”œβ”€β”€ docs/                        # Obsidian documentation library root
β”‚   └── leetcode/                # Problem descriptions and solution analyses (linked to source code)
β”œβ”€β”€ python/                      # Python tools workspace (uv)
β”‚   β”œβ”€β”€ crawler/                 # LeetCode problem crawler
β”‚   β”œβ”€β”€ test-gen/                # Unit test generator
β”‚   └── auto-docs/               # Documentation automation
β”œβ”€β”€ go.mod                       # Go module configuration
└── README.md

Documents are stored in the docs/ directory, following these principles:

  1. Structured: Named as problem_number_problem_name.md, corresponding to the code directory.
  2. Code Linking: Link to Go source files in Markdown.

πŸ› οΈ Future Feature Plans

  • Automated Unit Test Generation: Leverage AI agents to automatically generate comprehensive unit tests based on problem descriptions, ensuring thorough test coverage for algorithm implementations.

  • Intelligent Chinese-English Documentation Translation Agent: Develop an LLM Agent to automatically monitor changes in docs and translate Chinese notes into English, maintaining bilingual synchronization.

  • RAG-Based Intelligent Q&A Assistant: Build a knowledge index based on the local docs library; implement Q&A combining theory and practice, e.g., "How is a hash table implemented? What related problems are there on LeetCode?"

πŸ“œ License

This project is licensed under the MIT License. See LICENSE for details.

Directories ΒΆ

Path Synopsis
cmd
demo/calc command
demo/du command
demo/tree command
gods
examples/infix2postfix
Package infix2postfix provides functions to convert infix expressions to postfix (Reverse Polish Notation) and evaluate postfix expressions.
Package infix2postfix provides functions to convert infix expressions to postfix (Reverse Polish Notation) and evaluate postfix expressions.
examples/sort
Package sort
Package sort
heaps
Package heaps
Package heaps
heaps/binaryheap
Package binaryheap provides a generic min-heap implementation.
Package binaryheap provides a generic min-heap implementation.
lists
Package lists
Package lists
lists/arraylist
Package arraylist provides a generic dynamic array implementation.
Package arraylist provides a generic dynamic array implementation.
lists/doublylinkedlist
Package doublylinkedlist provides a generic doubly linked list implementation.
Package doublylinkedlist provides a generic doubly linked list implementation.
lists/linkedlist
Package linkedlist provides a generic doubly linked list implementation.
Package linkedlist provides a generic doubly linked list implementation.
maps
Package maps
Package maps
maps/hashmap
Package hashmap provides a generic hash map implementation backed by Go's built-in map.
Package hashmap provides a generic hash map implementation backed by Go's built-in map.
queues
Package queues
Package queues
queues/arrayqueue
Package arrayqueue provides a generic queue implementation using a dynamic array.
Package arrayqueue provides a generic queue implementation using a dynamic array.
queues/circularqueue
Package circularqueue implements a circular queue based on a slice.
Package circularqueue implements a circular queue based on a slice.
queues/linkedqueue
Package linkedqueue provides a generic queue implementation using a singly linked list.
Package linkedqueue provides a generic queue implementation using a singly linked list.
stacks
Package stacks
Package stacks
stacks/arraystack
Package arraystack provides a generic stack implementation using a dynamic array.
Package arraystack provides a generic stack implementation using a dynamic array.
stacks/linkedstack
Package linkedstack provides a generic stack implementation using a singly linked list.
Package linkedstack provides a generic stack implementation using a singly linked list.
trees
Package trees
Package trees
trees/avltree
Package avltree provides a generic AVL tree implementation.
Package avltree provides a generic AVL tree implementation.
utils
Package utils provides utility functions and types for the gods package.
Package utils provides utility functions and types for the gods package.
leetcode
0001-0100/0001_two_sum
Package leetcode0001 solves LeetCode 1.
Package leetcode0001 solves LeetCode 1.
0001-0100/0002_add_two_numbers
Package leetcode0002 solves LeetCode 2.
Package leetcode0002 solves LeetCode 2.
0001-0100/0003_longest_substring_without_repeating_characters
Package leetcode0003 solves LeetCode 3.
Package leetcode0003 solves LeetCode 3.
0001-0100/0004_median_of_two_sorted_arrays
Package leetcode0004 solves LeetCode 4.
Package leetcode0004 solves LeetCode 4.
0001-0100/0007_reverse_integer
Package leetcode0007 solves LeetCode 7.
Package leetcode0007 solves LeetCode 7.
0001-0100/0011_container_with_most_water
Package leetcode0011 solves LeetCode 11.
Package leetcode0011 solves LeetCode 11.
0001-0100/0015_3sum
Package leetcode0015 solves LeetCode 15.
Package leetcode0015 solves LeetCode 15.
0001-0100/0019_remove_nth_node_from_end_of_list
Package leetcode0019 solves LeetCode 19.
Package leetcode0019 solves LeetCode 19.
0001-0100/0020_valid_parentheses
Package leetcode0020 solves LeetCode 20.
Package leetcode0020 solves LeetCode 20.
0001-0100/0021_merge_two_sorted_lists
Package leetcode0021 solves LeetCode 21.
Package leetcode0021 solves LeetCode 21.
0001-0100/0023_merge_k_sorted_lists
Package leetcode0023 solves LeetCode 23.
Package leetcode0023 solves LeetCode 23.
0001-0100/0025_reverse_nodes_in_k_group
Package leetcode0025 solves LeetCode 25.
Package leetcode0025 solves LeetCode 25.
0001-0100/0033_search_in_rotated_sorted_array
Package leetcode0033 solves LeetCode 33.
Package leetcode0033 solves LeetCode 33.
0001-0100/0036_valid_sudoku
Package leetcode0036 solves LeetCode 36.
Package leetcode0036 solves LeetCode 36.
0001-0100/0042_trapping_rain_water
Package leetcode0042 solves LeetCode 42.
Package leetcode0042 solves LeetCode 42.
0001-0100/0049_group_anagrams
Package leetcode0049 solves LeetCode 49.
Package leetcode0049 solves LeetCode 49.
0001-0100/0053_maximum_subarray
Package leetcode0053 solves LeetCode 53.
Package leetcode0053 solves LeetCode 53.
0001-0100/0074_search_a_2d_matrix
Package leetcode0074 solves LeetCode 74.
Package leetcode0074 solves LeetCode 74.
0001-0100/0075_sort_colors
Package leetcode0075 solves LeetCode 75.
Package leetcode0075 solves LeetCode 75.
0001-0100/0076_minimum_window_substring
Package leetcode0076 solves LeetCode 76.
Package leetcode0076 solves LeetCode 76.
0001-0100/0084_largest_rectangle_in_histogram
Package leetcode0084 solves LeetCode 84.
Package leetcode0084 solves LeetCode 84.
0001-0100/0092_reverse_linked_list_ii
Package leetcode0092 solves LeetCode 92.
Package leetcode0092 solves LeetCode 92.
0001-0100/0098_validate_binary_search_tree
Package leetcode0098 solves LeetCode 98.
Package leetcode0098 solves LeetCode 98.
0001-0100/0100_same_tree
Package leetcode0100 solves LeetCode 100.
Package leetcode0100 solves LeetCode 100.
0101-0200/0102_binary_tree_level_order_traversal
Package leetcode0102 solves LeetCode 102.
Package leetcode0102 solves LeetCode 102.
0101-0200/0104_maximum_depth_of_binary_tree
Package leetcode0104 solves LeetCode 104.
Package leetcode0104 solves LeetCode 104.
Package leetcode0105 solves LeetCode 105.
0101-0200/0110_balanced_binary_tree
Package leetcode0110 solves LeetCode 110.
Package leetcode0110 solves LeetCode 110.
0101-0200/0121_best_time_to_buy_and_sell_stock
Package leetcode0121 solves LeetCode 121.
Package leetcode0121 solves LeetCode 121.
0101-0200/0124_binary_tree_maximum_path_sum
Package leetcode0124 solves LeetCode 124.
Package leetcode0124 solves LeetCode 124.
0101-0200/0125_valid_palindrome
Package leetcode0125 solves LeetCode 125.
Package leetcode0125 solves LeetCode 125.
0101-0200/0128_longest_consecutive_sequence
Package leetcode0128 solves LeetCode 128.
Package leetcode0128 solves LeetCode 128.
0101-0200/0138_copy_list_with_random_pointer
Package leetcode0138 solves LeetCode 138.
Package leetcode0138 solves LeetCode 138.
0101-0200/0141_linked_list_cycle
Package leetcode0141 solves LeetCode 141.
Package leetcode0141 solves LeetCode 141.
0101-0200/0142_linked_list_cycle_ii
Package leetcode0142 solves LeetCode 142.
Package leetcode0142 solves LeetCode 142.
0101-0200/0143_reorder_list
Package leetcode0143 solves LeetCode 143.
Package leetcode0143 solves LeetCode 143.
0101-0200/0146_lru_cache
Package leetcode0146 solves LeetCode 146.
Package leetcode0146 solves LeetCode 146.
0101-0200/0150_evaluate_reverse_polish_notation
Package leetcode0150 solves LeetCode 150.
Package leetcode0150 solves LeetCode 150.
0101-0200/0153_find_minimum_in_rotated_sorted_array
Package leetcode0153 solves LeetCode 153.
Package leetcode0153 solves LeetCode 153.
0101-0200/0155_min_stack
Package leetcode0155 solves LeetCode 155.
Package leetcode0155 solves LeetCode 155.
0101-0200/0167_two_sum_ii_input_array_is_sorted
Package leetcode0167 solves LeetCode 167.
Package leetcode0167 solves LeetCode 167.
0101-0200/0199_binary_tree_right_side_view
Package leetcode0199 solves LeetCode 199.
Package leetcode0199 solves LeetCode 199.
0201-0300/0206_reverse_linked_list
Package leetcode0206 solves LeetCode 206.
Package leetcode0206 solves LeetCode 206.
0201-0300/0208_implement_trie_prefix_tree
Package leetcode0208 solves LeetCode 208.
Package leetcode0208 solves LeetCode 208.
0201-0300/0209_minimum_size_subarray_sum
Package leetcode0209 solves LeetCode 209.
Package leetcode0209 solves LeetCode 209.
0201-0300/0211_design_add_and_search_words_data_structure
Package leetcode0211 solves LeetCode 211.
Package leetcode0211 solves LeetCode 211.
0201-0300/0212_word_search_ii
Package leetcode0212 solves LeetCode 212.
Package leetcode0212 solves LeetCode 212.
0201-0300/0215_kth_largest_element_in_an_array
Package leetcode0215 solves LeetCode 215.
Package leetcode0215 solves LeetCode 215.
0201-0300/0217_contains_duplicate
Package leetcode0217 solves LeetCode 217.
Package leetcode0217 solves LeetCode 217.
0201-0300/0224_basic_calculator
Package leetcode0224 solves LeetCode 224.
Package leetcode0224 solves LeetCode 224.
0201-0300/0226_invert_binary_tree
Package leetcode0226 solves LeetCode 226.
Package leetcode0226 solves LeetCode 226.
0201-0300/0227_basic_calculator_ii
Package leetcode0227 solves LeetCode 227.
Package leetcode0227 solves LeetCode 227.
0201-0300/0230_kth_smallest_element_in_a_bst
Package leetcode0230 solves LeetCode 230.
Package leetcode0230 solves LeetCode 230.
0201-0300/0235_lowest_common_ancestor_of_a_binary_search_tree
Package leetcode0235 solves LeetCode 235.
Package leetcode0235 solves LeetCode 235.
0201-0300/0238_product_of_array_except_self
Package leetcode0238 solves LeetCode 238.
Package leetcode0238 solves LeetCode 238.
0201-0300/0239_sliding_window_maximum
Package leetcode0239 solves LeetCode 239.
Package leetcode0239 solves LeetCode 239.
0201-0300/0242_valid_anagram
Package leetcode0242 solves LeetCode 242.
Package leetcode0242 solves LeetCode 242.
0201-0300/0287_find_the_duplicate_number
Package leetcode0287 solves LeetCode 287.
Package leetcode0287 solves LeetCode 287.
0201-0300/0295_find_median_from_data_stream
Package leetcode0295 solves LeetCode 295.
Package leetcode0295 solves LeetCode 295.
0201-0300/0297_serialize_and_deserialize_binary_tree
Package leetcode0297 solves LeetCode 297.
Package leetcode0297 solves LeetCode 297.
0301-0400/0347_top_k_frequent_elements
Package leetcode0347 solves LeetCode 347.
Package leetcode0347 solves LeetCode 347.
0301-0400/0355_design_twitter
Package leetcode0355 solves LeetCode 355.
Package leetcode0355 solves LeetCode 355.
0401-0500/0424_longest_repeating_character_replacement
Package leetcode0424 solves LeetCode 424.
Package leetcode0424 solves LeetCode 424.
0401-0500/0460_lfu_cache
Package leetcode0460 solves LeetCode 460.
Package leetcode0460 solves LeetCode 460.
0501-0600/0543_diameter_of_binary_tree
Package leetcode0543 solves LeetCode 543.
Package leetcode0543 solves LeetCode 543.
0501-0600/0567_permutation_in_string
Package leetcode0567 solves LeetCode 567.
Package leetcode0567 solves LeetCode 567.
0501-0600/0572_subtree_of_another_tree
Package leetcode0572 solves LeetCode 572.
Package leetcode0572 solves LeetCode 572.
0601-0700/0621_task_scheduler
Package leetcode0621 solves LeetCode 621.
Package leetcode0621 solves LeetCode 621.
0701-0800/0703_kth_largest_element_in_a_stream
Package leetcode0703 solves LeetCode 703.
Package leetcode0703 solves LeetCode 703.
0701-0800/0704_binary_search
Package leetcode0704 solves LeetCode 704.
Package leetcode0704 solves LeetCode 704.
0701-0800/0739_daily_temperatures
Package leetcode0739 solves LeetCode 739.
Package leetcode0739 solves LeetCode 739.
0801-0900/0853_car_fleet
Package leetcode0853 solves LeetCode 853.
Package leetcode0853 solves LeetCode 853.
0801-0900/0875_koko_eating_bananas
Package leetcode0875 solves LeetCode 875.
Package leetcode0875 solves LeetCode 875.
0901-1000/0912_sort_an_array
Package leetcode0912 solves LeetCode 912.
Package leetcode0912 solves LeetCode 912.
0901-1000/0973_k_closest_points_to_origin
Package leetcode0973 solves LeetCode 973.
Package leetcode0973 solves LeetCode 973.
0901-1000/0981_time_based_key_value_store
Package leetcode0981 solves LeetCode 981.
Package leetcode0981 solves LeetCode 981.
1001-1100/1046_last_stone_weight
Package leetcode1046 solves LeetCode 1046.
Package leetcode1046 solves LeetCode 1046.
1401-1500/1448_count_good_nodes_in_binary_tree
Package leetcode1448 solves LeetCode 1448.
Package leetcode1448 solves LeetCode 1448.
utils
Package utils: contains common data structures and util functions used in leetcode
Package utils: contains common data structures and util functions used in leetcode

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL