{"id":24113764,"url":"https://github.com/gkonovalov/algorithms","last_synced_at":"2025-09-18T02:33:03.672Z","repository":{"id":221897591,"uuid":"635538481","full_name":"gkonovalov/algorithms","owner":"gkonovalov","description":"Algorithms and Data Structures a comprehensive collection of fundamental Algorithms and Data structures organized into various categories to cater to the needs of software engineers and computer science students.","archived":false,"fork":false,"pushed_at":"2025-01-06T05:08:50.000Z","size":881,"stargazers_count":9,"open_issues_count":0,"forks_count":2,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-06-05T17:45:38.099Z","etag":null,"topics":["a-star","algorithm","algorithms","algorithms-and-data-structures","bellman-ford","binary-search","convex-hull","data-structures","dijkstra","dynamic-programming","floyd-warshall","huffman-coding","interview-questions","kruskal","levenshtein-distance","merge-sort","network-flow","prim","quick-sort","topological-sort"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/gkonovalov.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2023-05-02T23:04:57.000Z","updated_at":"2025-05-01T18:11:55.000Z","dependencies_parsed_at":null,"dependency_job_id":"56f0a268-ded7-4226-90ef-cac3b791f450","html_url":"https://github.com/gkonovalov/algorithms","commit_stats":null,"previous_names":["gkonovalov/algorithms"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/gkonovalov/algorithms","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gkonovalov%2Falgorithms","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gkonovalov%2Falgorithms/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gkonovalov%2Falgorithms/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gkonovalov%2Falgorithms/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gkonovalov","download_url":"https://codeload.github.com/gkonovalov/algorithms/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gkonovalov%2Falgorithms/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":275697291,"owners_count":25511592,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-18T02:00:09.552Z","response_time":77,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["a-star","algorithm","algorithms","algorithms-and-data-structures","bellman-ford","binary-search","convex-hull","data-structures","dijkstra","dynamic-programming","floyd-warshall","huffman-coding","interview-questions","kruskal","levenshtein-distance","merge-sort","network-flow","prim","quick-sort","topological-sort"],"created_at":"2025-01-11T04:39:57.004Z","updated_at":"2025-09-18T02:33:03.288Z","avatar_url":"https://github.com/gkonovalov.png","language":"Java","readme":"## Algorithms and Data Structures\n\n\u003e **_Donald Knuth:_**  \"An algorithm must be seen to be believed\".\n\nWelcome to curated GitHub repository, featuring a comprehensive collection of fundamental Algorithms and \nData structures organized into various categories to cater to the needs of software engineers and \ncomputer science students. Each Algorithm and Data structure is systematically classified, ensuring easy \nnavigation and efficient learning. You will find concise explanations and clear Java implementation code,\nmaking it easy to understand and implement the concepts in your projects.\n\nAdditionally, the repository includes sample problems and solutions, designed to help practice and \napply the concepts learned from each Algorithm and Data structure. \nThese problems serve as valuable exercises to enhance your problem-solving skills.\n\n## Algorithms\n\u003cpre\u003e\n\u003ca href=\"src/main/java/com/gkonovalov/algorithms/\"\u003e\u003cb\u003eAlgorithms\u003c/b\u003e\u003c/a\u003e\n├── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/arrays/\"\u003e\u003cb\u003eArrays\u003c/b\u003e\u003c/a\u003e\n│   ├── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/arrays/searching/\"\u003e\u003cb\u003eSearching\u003c/b\u003e\u003c/a\u003e\n│   │   ├── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/arrays/searching/LinearSearch.java\"\u003e\u003cb\u003eLinear Search\u003c/b\u003e\u003c/a\u003e\n│   │   ├── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/arrays/searching/BinarySearch.java\"\u003e\u003cb\u003eBinary Search\u003c/b\u003e\u003c/a\u003e\n│   │   ├── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/arrays/searching/ExponentialSearch.java\"\u003e\u003cb\u003eExponential Search\u003c/b\u003e\u003c/a\u003e\n│   │   ├── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/arrays/searching/JumpSearch.java\"\u003e\u003cb\u003eJump Search\u003c/b\u003e\u003c/a\u003e\n│   │   ├── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/arrays/searching/InterpolationSearch.java\"\u003e\u003cb\u003eInterpolation Search\u003c/b\u003e\u003c/a\u003e\n│   │   └── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/arrays/searching/TernarySearch.java\"\u003e\u003cb\u003eTernary Search\u003c/b\u003e\u003c/a\u003e\n│   ├── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/arrays/sorting/\"\u003e\u003cb\u003eSorting\u003c/b\u003e\u003c/a\u003e\n│   │   ├── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/arrays/sorting/BubbleSort.java\"\u003e\u003cb\u003eBubble Sort\u003c/b\u003e\u003c/a\u003e\n│   │   ├── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/arrays/sorting/SelectionSort.java\"\u003e\u003cb\u003eSelection Sort\u003c/b\u003e\u003c/a\u003e\n│   │   ├── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/arrays/sorting/InsertionSort.java\"\u003e\u003cb\u003eInsertion Sort\u003c/b\u003e\u003c/a\u003e\n│   │   ├── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/arrays/sorting/MergeSort.java\"\u003e\u003cb\u003eMerge Sort\u003c/b\u003e\u003c/a\u003e\n│   │   ├── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/arrays/sorting/quicksort\"\u003e\u003cb\u003eQuick Sort\u003c/b\u003e\u003c/a\u003e\n│   │   │   ├── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/arrays/sorting/quicksort/QuickSortPartitionHoare.java\"\u003e\u003cb\u003ePartition Hoare\u003c/b\u003e\u003c/a\u003e\n│   │   │   ├── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/arrays/sorting/quicksort/QuickSortPartitionLomuto.java\"\u003e\u003cb\u003ePartition Lomuto\u003c/b\u003e\u003c/a\u003e\n│   │   │   └── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/arrays/sorting/quicksort/QuickSort3WayPartitioning.java\"\u003e\u003cb\u003e3-Way Partitioning\u003c/b\u003e\u003c/a\u003e\n│   │   ├── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/arrays/sorting/HeapSort.java\"\u003e\u003cb\u003eHeap Sort\u003c/b\u003e\u003c/a\u003e\n│   │   ├── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/arrays/sorting/CountingSort.java\"\u003e\u003cb\u003eCounting Sort\u003c/b\u003e\u003c/a\u003e\n│   │   └── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/arrays/sorting/BucketSort.java\"\u003e\u003cb\u003eBucket Sort\u003c/b\u003e\u003c/a\u003e\n│   └── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/arrays/selection/\"\u003e\u003cb\u003eSelection\u003c/b\u003e\u003c/a\u003e\n│       ├── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/arrays/selection/quickselect/\"\u003e\u003cb\u003eQuick Select\u003c/b\u003e\u003c/a\u003e\n│       │   ├── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/arrays/selection/quickselect/QuickSelectPartitionHoare.java\"\u003e\u003cb\u003ePartition Hoare\u003c/b\u003e\u003c/a\u003e\n│       │   └── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/arrays/selection/quickselect/QuickSelectPartitionHoare.java\"\u003e\u003cb\u003ePartition Lomuto\u003c/b\u003e\u003c/a\u003e\n│       └── Median of medians\n├── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/strings/\"\u003e\u003cb\u003eStrings\u003c/b\u003e\u003c/a\u003e\n│   ├── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/strings/sorting/\"\u003e\u003cb\u003eSorting\u003c/b\u003e\u003c/a\u003e\n│   │   └── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/strings/sorting/LSDSort.java\"\u003e\u003cb\u003eLSD Radix Sort\u003c/b\u003e\u003c/a\u003e\n│   ├── Compression\n│   │   └── Huffman Coding\n│   └── String Matching\n│       ├── Naive String Search\n│       ├── Brute-force\n│       ├── Rabin-Karp\n│       ├── Knuth-Morris-Pratt\n│       ├── Boyer-Moore\n│       ├── Aho-Corasick\n│       ├── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/strings/matching/regularexpressions/\"\u003e\u003cb\u003eRegular Expressions\u003c/b\u003e\u003c/a\u003e\n│       │   ├── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/strings/matching/regularexpressions/RegularExpressionMatching.java\"\u003e\u003cb\u003eRegular Expression Matching\u003c/b\u003e\u003c/a\u003e\n│       │   └── Thompson NFA\n│       └── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/strings/matching/editdistance/\"\u003e\u003cb\u003eEdit Distance\u003c/b\u003e\u003c/a\u003e\n│           ├── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/strings/matching/editdistance/LevenshteinDistance.java\"\u003e\u003cb\u003eLevenshtein Distance\u003c/b\u003e\u003c/a\u003e\n│           └── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/strings/matching/editdistance/HammingDistance.java\"\u003e\u003cb\u003eHamming Distance\u003c/b\u003e\u003c/a\u003e\n├── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/linkedlist\"\u003e\u003cb\u003eLinked List\u003c/b\u003e\u003c/a\u003e\n│   └── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/linkedlist/FloydCycleDetection.java\"\u003e\u003cb\u003eFloyd's Cycle Detection\u003c/b\u003e\u003c/a\u003e\n├── \u003ca href=\"src/main/java/com/gkonovalov/datastructures/trees/TreeNode.java\"\u003e\u003cb\u003eTree\u003c/b\u003e\u003c/a\u003e\n│   └── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/tree/searching\"\u003e\u003cb\u003eSearching\u003c/b\u003e\u003c/a\u003e\n│       ├── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/tree/searching/DFS.java\"\u003e\u003cb\u003eDFS\u003c/b\u003e\u003c/a\u003e\n│       │   ├── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/tree/searching/DFS.java#L28\"\u003e\u003cb\u003ePre-order traversal\u003c/b\u003e\u003c/a\u003e\n│       │   ├── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/tree/searching/DFS.java#L57\"\u003e\u003cb\u003eIn-order traversal\u003c/b\u003e\u003c/a\u003e\n│       │   └── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/tree/searching/DFS.java#L85\"\u003e\u003cb\u003ePost-order traversal\u003c/b\u003e\u003c/a\u003e\n│       └── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/tree/searching/BFS.java\"\u003e\u003cb\u003eBFS\u003c/b\u003e\u003c/a\u003e \n│           └── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/tree/searching/BFS.java#L22\"\u003e\u003cb\u003eLevel-order traversal\u003c/b\u003e\u003c/a\u003e\n├── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/graphs\"\u003e\u003cb\u003eGraphs\u003c/b\u003e\u003c/a\u003e\n│   ├── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/graphs/searching\"\u003e\u003cb\u003eSearching\u003c/b\u003e\u003c/a\u003e\n│   │ \t├── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/graphs/searching/dfs/DFS.java\"\u003e\u003cb\u003eDFS\u003c/b\u003e\u003c/a\u003e \n│   │ \t│   ├── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/graphs/searching/dfs/DFSPath.java\"\u003e\u003cb\u003ePath\u003c/b\u003e\u003c/a\u003e \n│   │ \t│   └── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/graphs/searching/dfs/DFSID.java\"\u003e\u003cb\u003eDFS-ID\u003c/b\u003e\u003c/a\u003e\n│   │ \t├── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/graphs/searching/bfs/BFS.java\"\u003e\u003cb\u003eBFS\u003c/b\u003e\u003c/a\u003e\n│   │ \t│   ├── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/graphs/searching/bfs/BFSPath.java\"\u003e\u003cb\u003ePath\u003c/b\u003e\u003c/a\u003e \n│   │   │   └── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/graphs/searching/bfs/BidirectionalBFS.java\"\u003e\u003cb\u003eBidirectional BFS\u003c/b\u003e\u003c/a\u003e\n│   │ \t└── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/graphs/searching/shortestpath\"\u003e\u003cb\u003eShortest Path\u003c/b\u003e\u003c/a\u003e\n│   │ \t    ├── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/graphs/searching/bfs/BFS.java\"\u003e\u003cb\u003eBFS\u003c/b\u003e\u003c/a\u003e\n│   │ \t    ├── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/graphs/searching/shortestpath/dijkstra/\"\u003e\u003cb\u003eDijkstra's\u003c/b\u003e\u003c/a\u003e\n│   │ \t    │   ├── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/graphs/searching/shortestpath/dijkstra/DijkstraEager.java\"\u003e\u003cb\u003eEager\u003c/b\u003e\u003c/a\u003e\n│   │ \t    │   └── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/graphs/searching/shortestpath/dijkstra/DijkstraLazy.java\"\u003e\u003cb\u003eLazy\u003c/b\u003e\u003c/a\u003e\n│   │ \t    ├── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/graphs/searching/shortestpath/BellmanFord.java\"\u003e\u003cb\u003eBellman–Ford\u003c/b\u003e\u003c/a\u003e\n│   │ \t    ├──\t\u003ca href=\"src/main/java/com/gkonovalov/algorithms/graphs/searching/shortestpath/FloydWarshall.java\"\u003e\u003cb\u003eFloyd-Warshall\u003c/b\u003e\u003c/a\u003e\n│   │ \t    └── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/graphs/searching/shortestpath/AStar.java\"\u003e\u003cb\u003eA-star\u003c/b\u003e\u003c/a\u003e\n│   ├── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/graphs/mst\"\u003e\u003cb\u003eMinimum Spanning Tree\u003c/b\u003e\u003c/a\u003e\n│   │   ├── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/graphs/mst/prim/\"\u003e\u003cb\u003ePrim’s\u003c/b\u003e\u003c/a\u003e\n│   │   │   ├── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/graphs/mst/prim/MSTPrimEager.java\"\u003e\u003cb\u003eEager\u003c/b\u003e\u003c/a\u003e\n│   │   │   └── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/graphs/mst/prim/MSTPrimLazy.java\"\u003e\u003cb\u003eLazy\u003c/b\u003e\u003c/a\u003e\n│   │ \t└── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/graphs/mst/MSTKruskal.java\"\u003e\u003cb\u003eKruskal’s\u003c/b\u003e\u003c/a\u003e\n│   ├── Network Flow\n│   │   ├── Maximum Flow\n│   │   │   ├── Ford-Fulkerson\n│   │   │   ├── Edmonds-Karp\n│   │   │   ├── Push-Relabel\n│   │   │   └── Dinic's\n│   │   ├── Minimum Cut \n│   │   │   └── Karger's\n│   │   └── Maximum Bipartite\n│   ├── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/graphs/sorting/\"\u003e\u003cb\u003eSorting\u003c/b\u003e\u003c/a\u003e\n│   │ \t└── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/graphs/sorting/topological/\"\u003e\u003cb\u003eTopological Sort\u003c/b\u003e\u003c/a\u003e\n│   │       ├── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/graphs/sorting/topological/TopologicalSortKahn.java\"\u003e\u003cb\u003eKahn's\u003c/b\u003e\u003c/a\u003e\n│   │       └── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/graphs/sorting/topological/TopologicalSortTarjan.java\"\u003e\u003cb\u003eTarjan's\u003c/b\u003e\u003c/a\u003e \n│   ├── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/graphs/connectivity/\"\u003e\u003cb\u003eConnectivity\u003c/b\u003e\u003c/a\u003e\n│   │   ├── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/graphs/connectivity/Bridge.java\"\u003e\u003cb\u003eBridge\u003c/b\u003e\u003c/a\u003e\n│   │   ├── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/graphs/connectivity/Connectivity.java\"\u003e\u003cb\u003eConnectivity\u003c/b\u003e\u003c/a\u003e\n│   │   ├── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/graphs/connectivity/cc/\"\u003e\u003cb\u003eConnected Components\u003c/b\u003e\u003c/a\u003e\n│   │   ├── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/graphs/connectivity/scc/\"\u003e\u003cb\u003eStrongly Connected Components\u003c/b\u003e\u003c/a\u003e\n│   │   │   ├── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/graphs/connectivity/scc/SCCKosarajuSharir.java\"\u003e\u003cb\u003eKosaraju-Sharir's\u003c/b\u003e\u003c/a\u003e\n│   │   │   └── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/graphs/connectivity/scc/SCCTarjan.java\"\u003e\u003cb\u003eTarjan's\u003c/b\u003e\u003c/a\u003e\n│   │   └── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/graphs/connectivity/unionfind\"\u003e\u003cb\u003eUnion-Find\u003c/b\u003e\u003c/a\u003e\n│   │        ├── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/graphs/connectivity/unionfind/QuickFind.java\"\u003e\u003cb\u003eQuick Find\u003c/b\u003e\u003c/a\u003e\n│   │        └── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/graphs/connectivity/unionfind/quickunion/QuickUnion.java\"\u003e\u003cb\u003eQuick Union\u003c/b\u003e\u003c/a\u003e\n│   │            ├── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/graphs/connectivity/unionfind/quickunion/QuickUnionWeighted.java\"\u003e\u003cb\u003eWeighted\u003c/b\u003e\u003c/a\u003e\n│   │            └── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/graphs/connectivity/unionfind/quickunion/QuickUnionWeightedPathCompression.java\"\u003e\u003cb\u003eWeighted with Path Compression\u003c/b\u003e\u003c/a\u003e\n│   ├── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/graphs/CycleDetection.java\"\u003e\u003cb\u003eCycle Detection\u003c/b\u003e\u003c/a\u003e\n│   ├── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/graphs/Bipartite.java\"\u003e\u003cb\u003eIs Bipartite\u003c/b\u003e\u003c/a\u003e\n│   ├── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/graphs/MColoring.java\"\u003e\u003cb\u003eGraph coloring\u003c/b\u003e\u003c/a\u003e\n│   ├── Eulerian Path\n│   ├── Eulerian Cycle\n│   ├── Hamiltonian Path\n│   └── Hamiltonian Cycle\n├── Divide and Conquer\n│   ├── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/arrays/searching/BinarySearch.java\"\u003e\u003cb\u003eBinary Search\u003c/b\u003e\u003c/a\u003e\n│   ├── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/arrays/sorting/MergeSort.java\"\u003e\u003cb\u003eMerge Sort\u003c/b\u003e\u003c/a\u003e\n│   ├── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/arrays/sorting/quicksort/\"\u003e\u003cb\u003eQuick Sort\u003c/b\u003e\u003c/a\u003e\n│   └── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/math/matrix/multiplication/MatrixStrassenMultiplication.java\"\u003e\u003cb\u003eStrassen's Matrix multiplication\u003c/b\u003e\u003c/a\u003e\n├── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/recursion/\"\u003e\u003cb\u003eRecursion\u003c/b\u003e\u003c/a\u003e\n│   ├── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/math/Factorial.java\"\u003e\u003cb\u003eFactorial\u003c/b\u003e\u003c/a\u003e\n│   ├── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/recursion/dp\"\u003e\u003cb\u003eDynamic Programming\u003c/b\u003e\u003c/a\u003e\n│   │   ├── Approaches\n│   │   │   ├── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/math/FibonacciNumbers.java#L25\"\u003e\u003cb\u003eTop-Down  - Memoization\u003c/b\u003e\u003c/a\u003e\n│   │   │   └── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/math/FibonacciNumbers.java#L45\"\u003e\u003cb\u003eBottom-Up - Tabulation\u003c/b\u003e\u003c/a\u003e\n│   │   ├── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/math/FibonacciNumbers.java\"\u003e\u003cb\u003eFibonacci Numbers\u003c/b\u003e\u003c/a\u003e\n│   │ \t├── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/graphs/searching/shortestpath/BellmanFord.java\"\u003e\u003cb\u003eBellman–Ford\u003c/b\u003e\u003c/a\u003e\n│   │ \t├── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/graphs/searching/shortestpath/FloydWarshall.java\"\u003e\u003cb\u003eFloyd-Warshall\u003c/b\u003e\u003c/a\u003e\n│   │   ├── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/strings/matching/editdistance/LevenshteinDistance.java\"\u003e\u003cb\u003eLevenshtein Distance\u003c/b\u003e\u003c/a\u003e\n│   │   ├── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/strings/matching/regularexpressions/RegularExpressionMatching.java\"\u003e\u003cb\u003eRegular Expression Matching\u003c/b\u003e\u003c/a\u003e\n│   │   ├── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/math/matrix/multiplication/MatrixChainMultiplication.java\"\u003e\u003cb\u003eMatrix Chain Multiplication\u003c/b\u003e\u003c/a\u003e\n│   │   └── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/math/BinomialCoefficient.java\"\u003e\u003cb\u003eBinomial Coefficient\u003c/b\u003e\u003c/a\u003e\n│   └── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/recursion/backtracking/\"\u003e\u003cb\u003eBacktracking\u003c/b\u003e\u003c/a\u003e\n│       └── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/recursion/backtracking/combinatorics/\"\u003e\u003cb\u003eCombinatorics\u003c/b\u003e\u003c/a\u003e\n│           ├── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/recursion/backtracking/combinatorics/Permutations.java\"\u003e\u003cb\u003ePermutations\u003c/b\u003e\u003c/a\u003e\n│           ├── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/recursion/backtracking/combinatorics/Combinations.java\"\u003e\u003cb\u003eCombinations\u003c/b\u003e\u003c/a\u003e\n│           ├── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/recursion/backtracking/combinatorics/Subsets.java\"\u003e\u003cb\u003eSubsets\u003c/b\u003e\u003c/a\u003e\n│           └── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/recursion/backtracking/combinatorics/Partitions.java\"\u003e\u003cb\u003ePartitions\u003c/b\u003e\u003c/a\u003e\n├── Greedy\n│   ├── Huffman Coding\n│   ├── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/graphs/searching/shortestpath/dijkstra/DijkstraLazy.java\"\u003e\u003cb\u003eDijkstra's Lazy\u003c/b\u003e\u003c/a\u003e\n│   └── Minimum Spanning Tree\n│       ├── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/graphs/mst/prim/MSTPrimLazy.java\"\u003e\u003cb\u003ePrim’s Lazy\u003c/b\u003e\u003c/a\u003e\n│       └── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/graphs/mst/MSTKruskal.java\"\u003e\u003cb\u003eKruskal’s\u003c/b\u003e\u003c/a\u003e\n├── Randomized\n│   ├── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/arrays/sorting/quicksort/QuickSortPartitionLomuto.java#L47\"\u003e\u003cb\u003eRandomized Quick Sort\u003c/b\u003e\u003c/a\u003e\n│   ├── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/randomized/FisherYatesShuffle.java\"\u003e\u003cb\u003eFisher-Yates Shuffle\u003c/b\u003e\u003c/a\u003e\n│   ├── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/arrays/selection/quickselect/QuickSelectPartitionLomuto.java#L52\"\u003e\u003cb\u003eRandomized Quick Select\u003c/b\u003e\u003c/a\u003e\n│   ├── Las Vegas\n│   └── Monte Carlo\n├── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/gametheory/\"\u003e\u003cb\u003eGame Theory\u003c/b\u003e\u003c/a\u003e\n│   ├── Minimax\n│   └── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/gametheory/prisonersdilemma/PrisonersDilemma.java\"\u003e\u003cb\u003ePrisoner's Dilemma\u003c/b\u003e\u003c/a\u003e\n├── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/geometry/\"\u003e\u003cb\u003eGeometry\u003c/b\u003e\u003c/a\u003e\n│   ├── Closest Pair of Points\n│   ├── Line Intersection\n│   ├── Voronoi Diagram\n│   ├── Delaunay Triangulation\n│   └── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/geometry/convexhull/\"\u003e\u003cb\u003eConvex Hull\u003c/b\u003e\u003c/a\u003e\n│       ├── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/geometry/convexhull/GrahamScan.java\"\u003e\u003cb\u003eGraham Scan\u003c/b\u003e\u003c/a\u003e\n│       └── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/geometry/convexhull/JarvisMarch.java\"\u003e\u003cb\u003eJarvis March\u003c/b\u003e\u003c/a\u003e\n├── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/bits/BitsOperations.java\"\u003e\u003cb\u003eBits Operations\u003c/b\u003e\u003c/a\u003e\n└── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/math\"\u003e\u003cb\u003eMath\u003c/b\u003e\u003c/a\u003e\n    ├── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/math/FibonacciNumbers.java\"\u003e\u003cb\u003eFibonacci Numbers\u003c/b\u003e\u003c/a\u003e\n    ├── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/math/Factorial.java\"\u003e\u003cb\u003eFactorial\u003c/b\u003e\u003c/a\u003e\n    ├── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/math/primenumbers\"\u003e\u003cb\u003ePrime Numbers\u003c/b\u003e\u003c/a\u003e\n    │   ├── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/math/primenumbers/SieveOfEratosthenes.java\"\u003e\u003cb\u003eSieve of Eratosthenes\u003c/b\u003e\u003c/a\u003e\n    │   ├── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/math/primenumbers/primalitytest/\"\u003e\u003cb\u003ePrimality Tests\u003c/b\u003e\u003c/a\u003e\n    │   │   ├── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/math/primenumbers/primalitytest/TrialDivisionPrimalityTest.java\"\u003e\u003cb\u003eTrial Division\u003c/b\u003e\u003c/a\u003e\n    │   │   ├── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/math/primenumbers/primalitytest/FermatPrimalityTest.java\"\u003e\u003cb\u003eFermat\u003c/b\u003e\u003c/a\u003e\n    │   │   └── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/math/primenumbers/primalitytest/MillerRabinPrimalityTest.java\"\u003e\u003cb\u003eMiller-Rabin\u003c/b\u003e\u003c/a\u003e\n    │   └── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/math/primenumbers/factorization\"\u003e\u003cb\u003ePrime Factorizations\u003c/b\u003e\u003c/a\u003e\n    │       ├── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/math/primenumbers/factorization/TrialDivisionPrimeFactorization.java\"\u003e\u003cb\u003eTrial Division\u003c/b\u003e\u003c/a\u003e\n    │       └── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/math/primenumbers/factorization/WheelPrimeFactorization.java\"\u003e\u003cb\u003eWheel Factorization\u003c/b\u003e\u003c/a\u003e\n    ├── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/math/GreatestCommonDivisorEuclidean.java\"\u003e\u003cb\u003eGCD Euclidean Algorithm\u003c/b\u003e\u003c/a\u003e\n    ├── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/math/FastExponentiation.java\"\u003e\u003cb\u003eFast Exponentiation\u003c/b\u003e\u003c/a\u003e\n    ├── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/math/CatalanNumbers.java\"\u003e\u003cb\u003eCatalan Numbers\u003c/b\u003e\u003c/a\u003e\n    ├── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/math/BinomialCoefficient.java\"\u003e\u003cb\u003eBinomial Coefficient\u003c/b\u003e\u003c/a\u003e\n    ├── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/math/PascalTriangle.java\"\u003e\u003cb\u003ePascal Triangle\u003c/b\u003e\u003c/a\u003e\n    ├── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/math/LeastCommonMultiple.java\"\u003e\u003cb\u003eLeast Common Multiple (LCM)\u003c/b\u003e\u003c/a\u003e\n    ├── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/math/SumOfDigits.java\"\u003e\u003cb\u003eSum of Digits\u003c/b\u003e\u003c/a\u003e\n    ├── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/math/PowerOfTwo.java\"\u003e\u003cb\u003ePower of Two\u003c/b\u003e\u003c/a\u003e\n    ├── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/math/EuclideanDistance.java\"\u003e\u003cb\u003eEuclidean Distance\u003c/b\u003e\u003c/a\u003e\n    └── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/math/matrix\"\u003e\u003cb\u003eMatrix\u003c/b\u003e\u003c/a\u003e\n        ├── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/math/matrix/MatrixInversion.java\"\u003e\u003cb\u003eInversion\u003c/b\u003e\u003c/a\u003e\n        ├── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/math/matrix/MatrixTransposition.java\"\u003e\u003cb\u003eTransposition\u003c/b\u003e\u003c/a\u003e\n        ├── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/math/matrix/MatrixSquareRotation.java\"\u003e\u003cb\u003eSquare Rotation\u003c/b\u003e\u003c/a\u003e\n        └── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/math/matrix/multiplication/MatrixMultiplication.java\"\u003e\u003cb\u003eMultiplication\u003c/b\u003e\u003c/a\u003e  \n            ├── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/math/matrix/multiplication/MatrixExponentiation.java\"\u003e\u003cb\u003eExponentiation\u003c/b\u003e\u003c/a\u003e \n            ├── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/math/matrix/multiplication/SparseMatrixMultiplication.java\"\u003e\u003cb\u003eSparse Matrix\u003c/b\u003e\u003c/a\u003e\n            ├── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/math/matrix/multiplication/MatrixChainMultiplication.java\"\u003e\u003cb\u003eChain\u003c/b\u003e\u003c/a\u003e\n            └── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/math/matrix/multiplication/MatrixStrassenMultiplication.java\"\u003e\u003cb\u003eStrassen's\u003c/b\u003e\u003c/a\u003e\n\u003c/pre\u003e\n\n## Data Structures\n\u003cpre\u003e\n\u003ca href=\"src/main/java/com/gkonovalov/datastructures/\"\u003e\u003cb\u003eData Structures\u003c/b\u003e\u003c/a\u003e\n├── \u003ca href=\"src/main/java/com/gkonovalov/datastructures/strings/String.java\"\u003e\u003cb\u003eString\u003c/b\u003e\u003c/a\u003e\n├── \u003ca href=\"src/main/java/com/gkonovalov/datastructures/arrays\"\u003e\u003cb\u003eArrays\u003c/b\u003e\u003c/a\u003e\n│   ├── \u003ca href=\"src/main/java/com/gkonovalov/datastructures/arrays/Array.java\"\u003e\u003cb\u003eArray\u003c/b\u003e\u003c/a\u003e\n│   ├── \u003ca href=\"src/main/java/com/gkonovalov/datastructures/arrays/DynamicArray.java\"\u003e\u003cb\u003eDynamic Array\u003c/b\u003e\u003c/a\u003e\n│   └── Suffix Arrays\n├── \u003ca href=\"src/main/java/com/gkonovalov/datastructures/linkedlist\"\u003e\u003cb\u003eLinked Lists\u003c/b\u003e\u003c/a\u003e\n│   ├── \u003ca href=\"src/main/java/com/gkonovalov/datastructures/linkedlist/SinglyLinkedList.java\"\u003e\u003cb\u003eSingly\u003c/b\u003e\u003c/a\u003e  \n│   ├── \u003ca href=\"src/main/java/com/gkonovalov/datastructures/linkedlist/DoublyLinkedList.java\"\u003e\u003cb\u003eDoubly\u003c/b\u003e\u003c/a\u003e \n│   └── Skip List\n├── \u003ca href=\"src/main/java/com/gkonovalov/datastructures/stack/Stack.java\"\u003e\u003cb\u003eStacks\u003c/b\u003e\u003c/a\u003e\n├── \u003ca href=\"src/main/java/com/gkonovalov/datastructures/queues\"\u003e\u003cb\u003eQueues\u003c/b\u003e\u003c/a\u003e\n│   ├── \u003ca href=\"src/main/java/com/gkonovalov/datastructures/queues/Queue.java\"\u003e\u003cb\u003eQueue\u003c/b\u003e\u003c/a\u003e\n│   ├── \u003ca href=\"src/main/java/com/gkonovalov/datastructures/queues/Deque.java\"\u003e\u003cb\u003eDeque\u003c/b\u003e\u003c/a\u003e\n│   └── \u003ca href=\"src/main/java/com/gkonovalov/datastructures/queues/CircularQueue.java\"\u003e\u003cb\u003eCircular Queue\u003c/b\u003e\u003c/a\u003e\n├── \u003ca href=\"src/main/java/com/gkonovalov/datastructures/hashtables\"\u003e\u003cb\u003eHash Tables\u003c/b\u003e\u003c/a\u003e\n│   ├── \u003ca href=\"src/main/java/com/gkonovalov/datastructures/hashtables/HashMap.java\"\u003e\u003cb\u003eHashMap\u003c/b\u003e\u003c/a\u003e\n│   ├── \u003ca href=\"src/main/java/com/gkonovalov/datastructures/hashtables/HashSet.java\"\u003e\u003cb\u003eHashSet\u003c/b\u003e\u003c/a\u003e\n│   ├── \u003ca href=\"src/main/java/com/gkonovalov/datastructures/hashtables/SparseVector.java\"\u003e\u003cb\u003eSparse Vector\u003c/b\u003e\u003c/a\u003e\n│   └── Collision Resolution\n│       ├── \u003ca href=\"src/main/java/com/gkonovalov/datastructures/hashtables/HashMap.java#L159\"\u003e\u003cb\u003eSeparate Chaining\u003c/b\u003e\u003c/a\u003e\n│       └── \u003ca href=\"src/main/java/com/gkonovalov/datastructures/hashtables/HashSet.java#L107\"\u003e\u003cb\u003eOpen Addressing\u003c/b\u003e\u003c/a\u003e\n├── \u003ca href=\"src/main/java/com/gkonovalov/datastructures/bloomfilter/BloomFilter.java\"\u003e\u003cb\u003eBloom Filter\u003c/b\u003e\u003c/a\u003e \n├── \u003ca href=\"src/main/java/com/gkonovalov/datastructures/trees/\"\u003e\u003cb\u003eTrees\u003c/b\u003e\u003c/a\u003e\n│   ├── \u003ca href=\"src/main/java/com/gkonovalov/datastructures/trees/BinarySearchTree.java\"\u003e\u003cb\u003eBinary Search Tree\u003c/b\u003e\u003c/a\u003e\n│   ├── \u003ca href=\"src/main/java/com/gkonovalov/datastructures/trees/trie\"\u003e\u003cb\u003eTrie-trees\u003c/b\u003e\u003c/a\u003e\n│   │    ├── \u003ca href=\"src/main/java/com/gkonovalov/datastructures/trees/trie/Trie.java\"\u003e\u003cb\u003ePrefix Tree - Trie\u003c/b\u003e\u003c/a\u003e\n│   │    └── Suffix Tree\n│   ├── \u003ca href=\"src/main/java/com/gkonovalov/datastructures/trees/heaps\"\u003e\u003cb\u003eHeaps\u003c/b\u003e\u003c/a\u003e\n│   │   ├── \u003ca href=\"src/main/java/com/gkonovalov/datastructures/trees/heaps/BinaryHeap.java\"\u003e\u003cb\u003eBinary Heap - Priority Queue\u003c/b\u003e\u003c/a\u003e\n│   │   │   ├── \u003ca href=\"src/main/java/com/gkonovalov/datastructures/trees/heaps/BinaryHeap.java#L124\"\u003e\u003cb\u003eMin Heap\u003c/b\u003e\u003c/a\u003e\n│   │   │   └── \u003ca href=\"src/main/java/com/gkonovalov/datastructures/trees/heaps/BinaryHeap.java#L122\"\u003e\u003cb\u003eMax Heap\u003c/b\u003e\u003c/a\u003e\n│   │   ├── \u003ca href=\"src/main/java/com/gkonovalov/datastructures/trees/heaps/IndexedBinaryHeap.java\"\u003e\u003cb\u003eIndexed Binary Heap\u003c/b\u003e\u003c/a\u003e\n│   │   └── Fibonacci Heaps\n│   ├── Self-balanced\n│   │   ├── AVL Tree\n│   │   ├── Red Black Tree\n│   │   ├── B Tree\n│   │   │   └── B+ Tree\n│   │   ├── 2-3 Tree\n│   │   ├── Splay Tree\n│   │   └── Treaps\n│   ├── Cartesian Tree\n│   ├── K-D Tree\n│   ├── Fenwick Tree\n│   └── Segment Tree\n└── \u003ca href=\"src/main/java/com/gkonovalov/datastructures/graphs/Graph.java\"\u003e\u003cb\u003eGraphs\u003c/b\u003e\u003c/a\u003e\n    ├── Types\n    │   ├── \u003ca href=\"src/main/java/com/gkonovalov/datastructures/graphs/representation/AdjacencyList.java#L32\"\u003e\u003cb\u003eUndirected Graph\u003c/b\u003e\u003c/a\u003e\n    │   ├── \u003ca href=\"src/main/java/com/gkonovalov/datastructures/graphs/representation/AdjacencyList.java#L59\"\u003e\u003cb\u003eDirected Graph\u003c/b\u003e\u003c/a\u003e\n    │   ├── \u003ca href=\"src/main/java/com/gkonovalov/datastructures/graphs/representation/AdjacencyList.java#L106\"\u003e\u003cb\u003eWeighted Undirected Graph\u003c/b\u003e\u003c/a\u003e\n    │   ├── \u003ca href=\"src/main/java/com/gkonovalov/datastructures/graphs/representation/AdjacencyList.java#L122\"\u003e\u003cb\u003eWeighted Directed Graph\u003c/b\u003e\u003c/a\u003e\n    │   ├── \u003ca href=\"src/main/java/com/gkonovalov/datastructures/graphs/representation/AdjacencyList.java#L51\"\u003e\u003cb\u003eCyclic Graph\u003c/b\u003e\u003c/a\u003e\n    │   ├── \u003ca href=\"src/main/java/com/gkonovalov/datastructures/graphs/representation/AdjacencyList.java#L51\"\u003e\u003cb\u003eAcyclic Graph\u003c/b\u003e\u003c/a\u003e\n    │   ├── \u003ca href=\"src/main/java/com/gkonovalov/datastructures/graphs/representation/AdjacencyList.java#L71\"\u003e\u003cb\u003eDirected Acyclic Graph\u003c/b\u003e\u003c/a\u003e\n    │   ├── \u003ca href=\"src/main/java/com/gkonovalov/datastructures/graphs/representation/AdjacencyList.java#L97\"\u003e\u003cb\u003eLabeled Graph\u003c/b\u003e\u003c/a\u003e\n    │   ├── \u003ca href=\"src/main/java/com/gkonovalov/datastructures/graphs/representation/AdjacencyList.java#L78\"\u003e\u003cb\u003eBipartite Graph\u003c/b\u003e\u003c/a\u003e\n    │   ├── \u003ca href=\"src/main/java/com/gkonovalov/datastructures/trees/TreeNode.java\"\u003e\u003cb\u003eTree\u003c/b\u003e\u003c/a\u003e\n    │   ├── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/graphs/connectivity/unionfind/\"\u003e\u003cb\u003eForest\u003c/b\u003e\u003c/a\u003e\n    │   └── \u003ca href=\"src/main/java/com/gkonovalov/algorithms/graphs/mst\"\u003e\u003cb\u003eSpanning Tree\u003c/b\u003e\u003c/a\u003e\n    └── \u003ca href=\"src/main/java/com/gkonovalov/datastructures/graphs/representation/\"\u003e\u003cb\u003eRepresentation in memory\u003c/b\u003e\u003c/a\u003e\n        ├── \u003ca href=\"src/main/java/com/gkonovalov/datastructures/graphs/representation/AdjacencyList.java\"\u003e\u003cb\u003eAdjacency List\u003c/b\u003e\u003c/a\u003e\n        ├── \u003ca href=\"src/main/java/com/gkonovalov/datastructures/graphs/representation/AdjacencyMatrix.java\"\u003e\u003cb\u003eAdjacency Matrix\u003c/b\u003e\u003c/a\u003e\n        └── \u003ca href=\"src/main/java/com/gkonovalov/datastructures/graphs/representation/EdgeList.java\"\u003e\u003cb\u003eEdge List\u003c/b\u003e\u003c/a\u003e\n\u003c/pre\u003e\n\n## Coding Problems and Techniques\n\u003cpre\u003e\n\u003ca href=\"src/main/java/com/gkonovalov/problems/\"\u003e\u003cb\u003eProblems\u003c/b\u003e\u003c/a\u003e\n├── Arrays\n│   ├── \u003ca href=\"src/main/java/com/gkonovalov/problems/arrays/sorting\"\u003e\u003cb\u003eSorting\u003c/b\u003e\u003c/a\u003e\n│   │   ├── \u003ca href=\"src/main/java/com/gkonovalov/problems/arrays/sorting/MergeIntervals.java\"\u003e\u003cb\u003eMerge Intervals\u003c/b\u003e\u003c/a\u003e\n│   │   ├── \u003ca href=\"src/main/java/com/gkonovalov/problems/arrays/sorting/MergeSortedArray.java\"\u003e\u003cb\u003eMerge Sorted Array\u003c/b\u003e\u003c/a\u003e\n│   ├── Searching\n│   │   └── \u003ca href=\"src/main/java/com/gkonovalov/problems/arrays/searching/binarysearch/\"\u003e\u003cb\u003eBinary Search\u003c/b\u003e\u003c/a\u003e\n│   │       ├── \u003ca href=\"src/main/java/com/gkonovalov/problems/arrays/searching/binarysearch/CapacityToShipPackagesWithinDDays.java\"\u003e\u003cb\u003eCapacity to Ship Packages Within N Days\u003c/b\u003e\u003c/a\u003e\n│   │       ├── \u003ca href=\"src/main/java/com/gkonovalov/problems/arrays/searching/binarysearch/CuttingRibbons.java\"\u003e\u003cb\u003eCutting Ribbons\u003c/b\u003e\u003c/a\u003e\n│   │       ├── \u003ca href=\"src/main/java/com/gkonovalov/problems/arrays/searching/binarysearch/FindFirstLastPositionOfElementInSortedArray.java\"\u003e\u003cb\u003eFind First and Last Position of Element in Sorted Array\u003c/b\u003e\u003c/a\u003e\n│   │       ├── \u003ca href=\"src/main/java/com/gkonovalov/problems/arrays/searching/binarysearch/FindPeakElement.java\"\u003e\u003cb\u003eFind Peak Element\u003c/b\u003e\u003c/a\u003e\n│   │       ├── \u003ca href=\"src/main/java/com/gkonovalov/problems/arrays/searching/binarysearch/FirstBadVersion.java\"\u003e\u003cb\u003eFirst Bad Version\u003c/b\u003e\u003c/a\u003e\n│   │       ├── \u003ca href=\"src/main/java/com/gkonovalov/problems/arrays/searching/binarysearch/KokoEatingBananas.java\"\u003e\u003cb\u003eKoko Eating Bananas\u003c/b\u003e\u003c/a\u003e\n│   │       ├── \u003ca href=\"src/main/java/com/gkonovalov/problems/arrays/searching/binarysearch/MissingNumber.java\"\u003e\u003cb\u003eMissing Number\u003c/b\u003e\u003c/a\u003e\n│   │       ├── \u003ca href=\"src/main/java/com/gkonovalov/problems/arrays/searching/binarysearch/SearchInsertPosition.java\"\u003e\u003cb\u003eSearch Insert Position\u003c/b\u003e\u003c/a\u003e\n│   │       └── \u003ca href=\"src/main/java/com/gkonovalov/problems/arrays/searching/binarysearch/SearchRotatedSortedArray.java\"\u003e\u003cb\u003eSearch Rotated Sorted Array\u003c/b\u003e\u003c/a\u003e\n│   ├── \u003ca href=\"src/main/java/com/gkonovalov/problems/arrays/selection/\"\u003e\u003cb\u003eSelection\u003c/b\u003e\u003c/a\u003e\n│   │   ├── \u003ca href=\"src/main/java/com/gkonovalov/problems/arrays/selection/KClosestPointsToOrigin.java\"\u003e\u003cb\u003eKth Closest Points to Origin\u003c/b\u003e\u003c/a\u003e\n│   │   └── \u003ca href=\"src/main/java/com/gkonovalov/problems/arrays/selection/KthLargestElementArray.java\"\u003e\u003cb\u003eKth Largest Element in Array\u003c/b\u003e\u003c/a\u003e\n│   ├── \u003ca href=\"src/main/java/com/gkonovalov/problems/strings/slidingwindow/\"\u003e\u003cb\u003eSliding Window\u003c/b\u003e\u003c/a\u003e\n│   │   └── \u003ca href=\"src/main/java/com/gkonovalov/problems/strings/slidingwindow/LongestSubstringWithoutRepeatingCharacters.java\"\u003e\u003cb\u003eLongest Substring Without Repeating Characters\u003c/b\u003e\u003c/a\u003e\n│   ├── \u003ca href=\"src/main/java/com/gkonovalov/problems/arrays/twopointers/\"\u003e\u003cb\u003eTwo Pointers\u003c/b\u003e\u003c/a\u003e\n│   │   └── \u003ca href=\"src/main/java/com/gkonovalov/problems/arrays/twopointers/ContainerWithMostWater.java\"\u003e\u003cb\u003eContainer With Most Water\u003c/b\u003e\u003c/a\u003e\n│   ├── \u003ca href=\"src/main/java/com/gkonovalov/problems/arrays/matrix\"\u003e\u003cb\u003eMatrix\u003c/b\u003e\u003c/a\u003e\n│   │   ├── \u003ca href=\"src/main/java/com/gkonovalov/problems/arrays/matrix/GameOfLife.java\"\u003e\u003cb\u003eGame of Life\u003c/b\u003e\u003c/a\u003e\n│   │   ├── \u003ca href=\"src/main/java/com/gkonovalov/problems/arrays/matrix/RotateImage.java\"\u003e\u003cb\u003eRotate Image\u003c/b\u003e\u003c/a\u003e\n│   │   ├── \u003ca href=\"src/main/java/com/gkonovalov/problems/arrays/matrix/Search2DMatrix.java\"\u003e\u003cb\u003eSearch in 2D Matrix\u003c/b\u003e\u003c/a\u003e\n│   │   └── \u003ca href=\"src/main/java/com/gkonovalov/problems/arrays/matrix/SetMatrixZeroes.java\"\u003e\u003cb\u003eSet Matrix Zeroes\u003c/b\u003e\u003c/a\u003e\n│   ├── \u003ca href=\"src/main/java/com/gkonovalov/problems/arrays/MaximumSubarray.java\"\u003e\u003cb\u003eMaximum Sum Subarray - Kadane's \u003c/b\u003e\u003c/a\u003e\n│   ├── Prefix Sum\n│   └── Range Sum \n├── Strings\n│   ├── \u003ca href=\"src/main/java/com/gkonovalov/problems/strings/SpellingCorrection.java\"\u003e\u003cb\u003eSpelling Correction\u003c/b\u003e\u003c/a\u003e\n│   ├── Reverse String\n│   ├── Anagram Checking\n│   └── Palindromes\n│       ├── Palindrome Checking\n│       ├── Palindrome Substrings\n│       └── Longest Palindromic Substring\n├── \u003ca href=\"src/main/java/com/gkonovalov/problems/linkedlist/\"\u003e\u003cb\u003eLinked List\u003c/b\u003e\u003c/a\u003e\n│   ├── \u003ca href=\"src/main/java/com/gkonovalov/problems/linkedlist/AddTwoNumbers.java\"\u003e\u003cb\u003eAdd Two Numbers\u003c/b\u003e\u003c/a\u003e\n│   ├── \u003ca href=\"src/main/java/com/gkonovalov/problems/linkedlist/IntersectionTwoLinkedLists.java\"\u003e\u003cb\u003eIntersection of Two Linked Lists\u003c/b\u003e\u003c/a\u003e\n│   ├── \u003ca href=\"src/main/java/com/gkonovalov/problems/linkedlist/MergeTwoSortedLists.java\"\u003e\u003cb\u003eMerge Two Sorted Lists\u003c/b\u003e\u003c/a\u003e\n│   ├── \u003ca href=\"src/main/java/com/gkonovalov/problems/linkedlist/PalindromeLinkedList.java\"\u003e\u003cb\u003ePalindrome Linked List\u003c/b\u003e\u003c/a\u003e\n│   ├── \u003ca href=\"src/main/java/com/gkonovalov/problems/linkedlist/RemoveNthNodeFromEndOfList.java\"\u003e\u003cb\u003eRemove Nth Node From End of List\u003c/b\u003e\u003c/a\u003e\n│   ├── \u003ca href=\"src/main/java/com/gkonovalov/problems/linkedlist/SortList.java\"\u003e\u003cb\u003eSort List\u003c/b\u003e\u003c/a\u003e\n│   ├── \u003ca href=\"src/main/java/com/gkonovalov/problems/linkedlist/cycle/\"\u003e\u003cb\u003eCycle\u003c/b\u003e\u003c/a\u003e\n│   │   ├── \u003ca href=\"src/main/java/com/gkonovalov/problems/linkedlist/cycle/LinkedListCycle.java\"\u003e\u003cb\u003eLinked List Cycle\u003c/b\u003e\u003c/a\u003e\n│   │   └── \u003ca href=\"src/main/java/com/gkonovalov/problems/linkedlist/cycle/LinkedListCycleTwo.java\"\u003e\u003cb\u003eLinked List Cycle II\u003c/b\u003e\u003c/a\u003e\n│   ├── \u003ca href=\"src/main/java/com/gkonovalov/problems/linkedlist/reversal/\"\u003e\u003cb\u003eReversal\u003c/b\u003e\u003c/a\u003e\n│   │   ├── \u003ca href=\"src/main/java/com/gkonovalov/problems/linkedlist/reversal/ReverseLinkedList.java\"\u003e\u003cb\u003eReverse Linked List\u003c/b\u003e\u003c/a\u003e\n│   │   └── \u003ca href=\"src/main/java/com/gkonovalov/problems/linkedlist/reversal/ReverseLinkedListTwo.java\"\u003e\u003cb\u003eReverse Linked List II\u003c/b\u003e\u003c/a\u003e\n│   └── \u003ca href=\"src/main/java/com/gkonovalov/problems/linkedlist/cache/\"\u003e\u003cb\u003eCache\u003c/b\u003e\u003c/a\u003e\n│       ├── \u003ca href=\"src/main/java/com/gkonovalov/problems/linkedlist/cache/LRUCache.java\"\u003e\u003cb\u003eLRU\u003c/b\u003e\u003c/a\u003e\n│       └── \u003ca href=\"src/main/java/com/gkonovalov/problems/linkedlist/cache/LFUCache.java\"\u003e\u003cb\u003eLFU\u003c/b\u003e\u003c/a\u003e \n├── \u003ca href=\"src/main/java/com/gkonovalov/problems/stack/\"\u003e\u003cb\u003eStacks\u003c/b\u003e\u003c/a\u003e\n│   ├── \u003ca href=\"src/main/java/com/gkonovalov/problems/stack/SimplifyPath.java\"\u003e\u003cb\u003eSimplify Path\u003c/b\u003e\u003c/a\u003e\n│   ├── \u003ca href=\"src/main/java/com/gkonovalov/problems/stack/ValidParentheses.java\"\u003e\u003cb\u003eValid Parentheses\u003c/b\u003e\u003c/a\u003e\n│   └── \u003ca href=\"src/main/java/com/gkonovalov/problems/stack/BasicCalculatorII.java\"\u003e\u003cb\u003eBasic Calculator II\u003c/b\u003e\u003c/a\u003e\n├── Queues\n├── \u003ca href=\"src/main/java/com/gkonovalov/problems/hashtable/\"\u003e\u003cb\u003eHash Table\u003c/b\u003e\u003c/a\u003e\n│   ├── \u003ca href=\"src/main/java/com/gkonovalov/problems/hashtable/GroupAnagrams.java\"\u003e\u003cb\u003eGroup Anagrams\u003c/b\u003e\u003c/a\u003e\n│   ├── \u003ca href=\"src/main/java/com/gkonovalov/problems/hashtable/LoggerRateLimiter.java\"\u003e\u003cb\u003eLogger Rate Limiter\u003c/b\u003e\u003c/a\u003e\n│   ├── \u003ca href=\"src/main/java/com/gkonovalov/problems/hashtable/RomanToInteger.java\"\u003e\u003cb\u003eRoman to Integer\u003c/b\u003e\u003c/a\u003e\n│   └── \u003ca href=\"src/main/java/com/gkonovalov/problems/hashtable/VerifyingAnAlienDictionary.java\"\u003e\u003cb\u003eVerifying an Alien Dictionary\u003c/b\u003e\u003c/a\u003e\n├── \u003ca href=\"src/main/java/com/gkonovalov/problems/tree/\"\u003e\u003cb\u003eTrees\u003c/b\u003e\u003c/a\u003e\n│   ├── \u003ca href=\"src/main/java/com/gkonovalov/problems/tree/MaximumDepthOfBinaryTree.java\"\u003e\u003cb\u003eMaximum Depth of Binary Tree\u003c/b\u003e\u003c/a\u003e\n│   ├── \u003ca href=\"src/main/java/com/gkonovalov/problems/tree/BinaryTreeInorderTraversal.java\"\u003e\u003cb\u003eBinary Tree Inorder Traversal\u003c/b\u003e\u003c/a\u003e\n│   ├── \u003ca href=\"src/main/java/com/gkonovalov/problems/tree/BinaryTreeMaximumPathSum.java\"\u003e\u003cb\u003eBinary Tree Maximum Path Sum\u003c/b\u003e\u003c/a\u003e\n│   ├── \u003ca href=\"src/main/java/com/gkonovalov/problems/tree/BinaryTreeRightSideView.java\"\u003e\u003cb\u003eBinary Tree Right Side View\u003c/b\u003e\u003c/a\u003e\n│   ├── \u003ca href=\"src/main/java/com/gkonovalov/problems/tree/BinaryTreeVerticalOrderTraversal.java\"\u003e\u003cb\u003eBinary Tree Vertical Order Traversal\u003c/b\u003e\u003c/a\u003e\n│   ├── \u003ca href=\"src/main/java/com/gkonovalov/problems/tree/BoundaryOfBinaryTree.java\"\u003e\u003cb\u003eBoundary of Binary Tree\u003c/b\u003e\u003c/a\u003e\n│   ├── \u003ca href=\"src/main/java/com/gkonovalov/problems/tree/LowestCommonAncestorOfBinaryTree.java\"\u003e\u003cb\u003eLowest Common Ancestor of a Binary Tree\u003c/b\u003e\u003c/a\u003e\n│   ├── \u003ca href=\"src/main/java/com/gkonovalov/problems/tree/DiameterOfBinaryTree.java\"\u003e\u003cb\u003eDiameter of Binary Tree\u003c/b\u003e\u003c/a\u003e\n│   ├── \u003ca href=\"src/main/java/com/gkonovalov/problems/tree/InvertBinaryTree.java\"\u003e\u003cb\u003eInvert Binary Tree\u003c/b\u003e\u003c/a\u003e\n│   ├── \u003ca href=\"src/main/java/com/gkonovalov/problems/tree/RecoverBinarySearchTree.java\"\u003e\u003cb\u003eRecover Binary Search Tree\u003c/b\u003e\u003c/a\u003e\n│   ├── \u003ca href=\"src/main/java/com/gkonovalov/problems/tree/SameTree.java\"\u003e\u003cb\u003eSame Tree\u003c/b\u003e\u003c/a\u003e\n│   ├── \u003ca href=\"src/main/java/com/gkonovalov/problems/tree/ValidateBinarySearchTree.java\"\u003e\u003cb\u003eValidate Binary Search Tree\u003c/b\u003e\u003c/a\u003e\n│   ├── \u003ca href=\"src/main/java/com/gkonovalov/problems/tree/heap/\"\u003e\u003cb\u003eHeap\u003c/b\u003e\u003c/a\u003e\n│   │   └── \u003ca href=\"src/main/java/com/gkonovalov/problems/tree/heap/MergeKSortedLists.java\"\u003e\u003cb\u003eMerge k Sorted Lists\u003c/b\u003e\u003c/a\u003e\n│   ├── \u003ca href=\"src/main/java/com/gkonovalov/problems/tree/trie/\"\u003e\u003cb\u003eTrie\u003c/b\u003e\u003c/a\u003e\n│   │   └── \u003ca href=\"src/main/java/com/gkonovalov/problems/tree/trie/LongestCommonPrefix.java\"\u003e\u003cb\u003eLongest Common Prefix\u003c/b\u003e\u003c/a\u003e\n│   └── \u003ca href=\"src/main/java/com/gkonovalov/problems/tree/nary/\"\u003e\u003cb\u003eN-ary Tree\u003c/b\u003e\u003c/a\u003e\n│       ├── \u003ca href=\"src/main/java/com/gkonovalov/problems/tree/nary/CloneNAryTree.java\"\u003e\u003cb\u003eClone N-ary Tree\u003c/b\u003e\u003c/a\u003e\n│       ├── \u003ca href=\"src/main/java/com/gkonovalov/problems/tree/nary/DiameterNAryTree.java\"\u003e\u003cb\u003eDiameter of N-Ary Tree\u003c/b\u003e\u003c/a\u003e\n│       └── \u003ca href=\"src/main/java/com/gkonovalov/problems/tree/nary/MaximumDepthOfNAryTree.java\"\u003e\u003cb\u003eMaximum Depth of N-ary Tree\u003c/b\u003e\u003c/a\u003e\n├── \u003ca href=\"src/main/java/com/gkonovalov/problems/graph/\"\u003e\u003cb\u003eGraphs\u003c/b\u003e\u003c/a\u003e\n│   ├── \u003ca href=\"src/main/java/com/gkonovalov/problems/graph/bipartite/IsGraphBipartite.java\"\u003e\u003cb\u003eIs Graph Bipartite\u003c/b\u003e\u003c/a\u003e\n│   ├── \u003ca href=\"src/main/java/com/gkonovalov/problems/graph/sorting\"\u003e\u003cb\u003eSorting\u003c/b\u003e\u003c/a\u003e\n│   │   └── \u003ca href=\"src/main/java/com/gkonovalov/problems/graph/sorting\"\u003e\u003cb\u003eTopological Sort\u003c/b\u003e\u003c/a\u003e\n│   │       └── \u003ca href=\"src/main/java/com/gkonovalov/problems/graph/sorting/topologicalsort/AlienDictionary.java\"\u003e\u003cb\u003eAlien Dictionary\u003c/b\u003e\u003c/a\u003e\n│   └── \u003ca href=\"src/main/java/com/gkonovalov/problems/graph/searching\"\u003e\u003cb\u003eSearching\u003c/b\u003e\u003c/a\u003e\n│       ├── \u003ca href=\"src/main/java/com/gkonovalov/problems/graph/searching/bfs\"\u003e\u003cb\u003eBFS\u003c/b\u003e\u003c/a\u003e\n│       │   ├── \u003ca href=\"src/main/java/com/gkonovalov/problems/graph/searching/bfs/NumberOfIslands.java\"\u003e\u003cb\u003eNumber of Islands\u003c/b\u003e\u003c/a\u003e\n│       │   ├── \u003ca href=\"src/main/java/com/gkonovalov/problems/graph/searching/bfs/WordBreak.java\"\u003e\u003cb\u003eWord Break\u003c/b\u003e\u003c/a\u003e\n│       │   └── \u003ca href=\"src/main/java/com/gkonovalov/problems/graph/searching/bfs/WordLadder.java\"\u003e\u003cb\u003eWord Ladder\u003c/b\u003e\u003c/a\u003e\n│       └── \u003ca href=\"src/main/java/com/gkonovalov/problems/graph/searching/dfs\"\u003e\u003cb\u003eDFS\u003c/b\u003e\u003c/a\u003e\n│           ├── \u003ca href=\"src/main/java/com/gkonovalov/problems/graph/searching/dfs/CloneGraph.java\"\u003e\u003cb\u003eClone Graph\u003c/b\u003e\u003c/a\u003e\n│           ├── \u003ca href=\"src/main/java/com/gkonovalov/problems/graph/searching/dfs/IslandPerimeter.java\"\u003e\u003cb\u003eIsland Perimeter\u003c/b\u003e\u003c/a\u003e\n│           ├── \u003ca href=\"src/main/java/com/gkonovalov/problems/graph/searching/dfs/WallsAndGates.java\"\u003e\u003cb\u003eWalls and Gates\u003c/b\u003e\u003c/a\u003e\n│           ├── \u003ca href=\"src/main/java/com/gkonovalov/problems/graph/searching/dfs/SpiralMatrix.java\"\u003e\u003cb\u003eSpiral Matrix\u003c/b\u003e\u003c/a\u003e\n│           └── \u003ca href=\"src/main/java/com/gkonovalov/problems/graph/searching/dfs/WordSearch.java\"\u003e\u003cb\u003eWord Search\u003c/b\u003e\u003c/a\u003e\n├── Recursion\n│   ├── \u003ca href=\"src/main/java/com/gkonovalov/problems/recursion/dp/\"\u003e\u003cb\u003eDynamic Programming\u003c/b\u003e\u003c/a\u003e\n│   │   ├── \u003ca href=\"src/main/java/com/gkonovalov/problems/recursion/dp/FibonacciNumbers.java\"\u003e\u003cb\u003eFibonacci Numbers\u003c/b\u003e\u003c/a\u003e\n│   │   ├── \u003ca href=\"src/main/java/com/gkonovalov/problems/recursion/dp/Knapsack01.java\"\u003e\u003cb\u003eKnapsack 0/1\u003c/b\u003e\u003c/a\u003e\n│   │   ├── \u003ca href=\"src/main/java/com/gkonovalov/problems/recursion/dp/KnapsackUnbounded.java\"\u003e\u003cb\u003eKnapsack Unbounded\u003c/b\u003e\u003c/a\u003e\n│   │   ├── \u003ca href=\"src/main/java/com/gkonovalov/problems/recursion/dp/TravelingSalesmanProblem.java\"\u003e\u003cb\u003eTraveling Salesman\u003c/b\u003e\u003c/a\u003e\n│   │   ├── \u003ca href=\"src/main/java/com/gkonovalov/problems/recursion/dp/LongestCommonSubsequence.java\"\u003e\u003cb\u003eLongest Common Subsequence (LCS)\u003c/b\u003e\u003c/a\u003e\n│   │   ├── \u003ca href=\"src/main/java/com/gkonovalov/problems/recursion/dp/LongestIncreasingSubsequence.java\"\u003e\u003cb\u003eLongest Increasing Subsequence (LIS)\u003c/b\u003e\u003c/a\u003e \n│   │   ├── \u003ca href=\"src/main/java/com/gkonovalov/problems/recursion/dp/LongestPalindromicSubstring.java\"\u003e\u003cb\u003eLongest Palindrome Subsequence (LPS)\u003c/b\u003e\u003c/a\u003e\n│   │   ├── Shortest Common Supersequence (SCS)\n│   │   ├── Maximum Sum Increasing Subsequence\n│   │   ├── Maximum Subarray Sum\n│   │   ├── Combination Sum\n│   │   ├── Rod Cutting\n│   │   ├── \u003ca href=\"src/main/java/com/gkonovalov/problems/recursion/dp/JumpGame.java\"\u003e\u003cb\u003eJump Game\u003c/b\u003e\u003c/a\u003e\n│   │   ├── Partition problem\n│   │   ├── Russian Dolls Envelope\n│   │   ├── Dungeon Game\n│   │   ├── Subset Sum problem\n│   │   ├── Minimum Path Sum\n│   │   ├── Unique Paths in a Grid\n│   │   ├── Counting Paths in a Grid\n│   │   ├── Wildcard Matching\n│   │   ├── Word Break\n│   │   ├── Paint House\n│   │   ├── Palindrome Partitioning\n│   │   ├── Maximum Product Subarray\n│   │   ├── Staircase\n│   │   └── Coin Change\n│   └── \u003ca href=\"src/main/java/com/gkonovalov/problems/recursion/backtracking/\"\u003e\u003cb\u003eBacktracking\u003c/b\u003e\u003c/a\u003e\n│       ├── \u003ca href=\"src/main/java/com/gkonovalov/problems/recursion/backtracking/TravelingSalesmanProblem.java\"\u003e\u003cb\u003eTraveling Salesman\u003c/b\u003e\u003c/a\u003e\n│       ├── \u003ca href=\"src/main/java/com/gkonovalov/problems/recursion/backtracking/NQueens.java\"\u003e\u003cb\u003eN-Queens\u003c/b\u003e\u003c/a\u003e\n│       ├── Knight's Tour \n│       ├── Sudoku Solver\n│       ├── Unique Paths\n│       ├── Rat in a Maze \n│       ├── Subset Sum\n│       └── Word Search\n├── Greedy\n│   ├── \u003ca href=\"src/main/java/com/gkonovalov/problems/greedy/Knapsack.java\"\u003e\u003cb\u003eKnapsack\u003c/b\u003e\u003c/a\u003e\n│   ├── Interval Scheduling\n│   ├── Job Scheduling \n│   └── Coin Change\n├── \u003ca href=\"src/main/java/com/gkonovalov/problems/gametheory/\"\u003e\u003cb\u003eGame Theory\u003c/b\u003e\u003c/a\u003e\n│   └── \u003ca href=\"src/main/java/com/gkonovalov/problems/gametheory/GuessTheWord.java\"\u003e\u003cb\u003eGuess The Word\u003c/b\u003e\u003c/a\u003e\n├── Bit Manipulation\n└── NP-complete problems\n     ├── \u003ca href=\"src/main/java/com/gkonovalov/problems/recursion/dp/TravelingSalesmanProblem.java\"\u003e\u003cb\u003eTraveling Salesman\u003c/b\u003e\u003c/a\u003e\n     ├── \u003ca href=\"src/main/java/com/gkonovalov/problems/recursion/dp/KnapsackUnbounded.java\"\u003e\u003cb\u003eKnapsack Unbounded\u003c/b\u003e\u003c/a\u003e\n     ├── SAT\n     ├── Clique\n     ├── Factorization\n     └── Hamiltonian Cycle\n\u003c/pre\u003e\n\n\n## Requirements\nJDK 8.0 or later.\n\n## Development\n\nTo open the project in Intellij Idea:\n\n1. Go to *File* menu or the *Welcome Screen*\n2. Click on *Open...*\n3. Navigate to `algorithms` root directory.\n4. Select `setting.gradle`\n\n------------\nGeorgiy Konovalov 2024 (c) [MIT License](LICENSE)","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgkonovalov%2Falgorithms","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgkonovalov%2Falgorithms","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgkonovalov%2Falgorithms/lists"}