Data Structures and Algorithms

May 6, 2026 · View on GitHub

A comprehensive collection of data structures and algorithms implemented in multiple programming languages. This repository serves as a resource for learning and practicing fundamental computer science concepts.

Overview

This repository contains implementations of various data structures and algorithms, organized by category. Each implementation includes:

  • Source code
  • Interactive playground (where available)
  • Documentation explaining the concept, approach, and complexity

The implementations are primarily in JavaScript, with some examples in other languages like Java, TypeScript, and Go.

Data Structures

Stack

No.NameSourceLiveDocumentationLevelPatternHint
1Stack using arraySourceJavaScript-EasyUsing Array operationsUse array push/pop for stack behavior
2Stack using linkedlistSourceJavaScript-EasyUsing LinkedList operationsUse linked list nodes for stack push/pop

Queue

No.NameSourceLiveDocumentationLevelPatternHint
1Queue using arraySourceJavaScriptDocumentationEasyUsing Array operationsUse array shift/unshift or circular buffer
2Queue using linkedlistSourceJavaScriptDocumentationEasyUsing LinkedList operationsMaintain head/tail pointers for enqueue/dequeue

SinglyLinkedList

No.NameSourceLiveDocumentationLevelPatternHint
1SinglyLinkedList implementationSourceJavaScriptDocumentationEasyLinked List operationsUse nodes with next pointer for insert/delete

DoublyLinkedList

No.NameSourceLiveDocumentationLevelPatternHint
1DoublyLinkedList implementationSourceJavaScriptDocumentationEasyLinked List operationsUse nodes with prev/next pointers for insert/delete

Tree

No.NameSourceLiveDocumentationLevelPatternHint
1Binary Search TreeSourceJavaScriptDocumentationMediumTree operationsUse left/right pointers, recursive insert/search

Graphs

No.NameSourceLiveDocumentationLevelPatternHint
1Unweighted undirected graphSourceJavaScriptDocumentationMediumGraph operationsUse adjacency list/matrix for traversal

HashTable

No.NameSourceLiveDocumentationLevelPatternHint
1HashTableSourceJavaScript-MediumHash operationsUse hash function for key-value storage

Algorithms

Array

No.NameSourceLiveDocumentationLevelPatternHint
1Contains duplicatesSourcePlaygroundDocumentationEasySet/ObjectVerify duplicate using set or map/dict/object
2Two sum2- Input array sortedSourcePlaygroundDocumentationMediumTwo pointersUse left/right pointers to find target sum
33 sumSourcePlaygroundDocumentationMediumTwo pointersSort, fix one element, use two pointers for others
4Product of array except selfSourcePlaygroundDocumentationMediumPrefix and postfix patternCompute left and right products for each index
5Max sum subarraySourcePlaygroundDocumentationMediumKadane's algorithmTrack max sum ending at each index
6Minimum size subarray sumSourcePlaygroundDocumentationMediumSliding windowExpand/shrink window to meet sum
7Sort ColorsSourcePlaygroundDocumentationMediumTwo pointersDutch National Flag: 3-way partition
8Maximum product subarraySourcePlaygroundDocumentationMediumKadane's algorithmTrack max/min products at each index
9Find minimum in rotated sorted arraySourcePlaygroundDocumentationMediumBinary search techniqueUse binary search to find inflection point
10Maximum Circular subarraySourcePlaygroundDocumentationMediumKadane's algorithmMax of normal and circular subarray sum
11Rotate arraySourcePlaygroundDocumentationMediumTwo pointersReverse parts and whole array
12Search in rotated sorted arraySourcePlaygroundDocumentationMediumBinary searchModified binary search for rotation
13Container with most waterSourcePlaygroundDocumentationMediumTwo pointersCalculate max area and move shorter pointer inward
14First missing positive numberSourceJavaScriptDocumentationHardIn-place hashingPlace numbers at correct indices
15Best time to buy stock and sell stockSourceJavaScriptDocumentationEasyGreedy algorithmLook for minprice at each position
16Two missing numbersSourceJavaScriptDocumentationMediumSum and average calculationsUse sum and sum of squares to find missing
17Pascal's TriangleSourceJavaScriptDocumentationEasyArray traversal and sequential sumBuild each row using previous row
18Remove ElementSourceJavaScriptDocumentationEasyArray traversalOverwrite target elements in-place
19Can place flowersSourceJavaScriptDocumentationEasyArray traversal and comparisonCheck adjacent plots for placement
20Majority ElementSourceJavaScriptDocumentationEasyBoyer Moore Voting algorithmTrack candidate and count
21Pivot IndexSourceJavaScriptDocumentationEasyArray traversalCompare left/right sums at each index
22Range Sum queriesSourceJavaScriptDocumentationEasyArray traversalPrecompute prefix sums for fast queries
23Disappeared numbersSourceJavaScriptDocumentationEasyArray traversalMark visited indices, collect missing
24Identical pairsSourceJavaScriptDocumentationEasyArray traversal & mapCount occurrences, use nC2 formula
25Destination CitySourceJavaScriptDocumentationEasyArray traversal & setFind city with no outgoing path
26Set mismatchSourceJavaScriptDocumentationEasyArray traversal & marking numbersFind duplicate and missing
27Intersection of arraysSourceJavaScriptDocumentationEasySet and array traversalUse sets for intersection
29Special arraySourceJavaScriptDocumentationEasyFrequency counter and array traversalCheck for special property by counting frequencies
30Max length between equal charsSourceJavaScriptDocumentationEasyArray traversalStore first/last index of each char
31Third largest elementSourceJavaScriptDocumentationEasyArray traversalTrack top 3 elements
32Odd occurrencesSourceJavaScriptDocumentationEasyXOR operationXOR all elements to find odd occurrence
33Max countersSourceJavaScriptDocumentationMediumLazy update strategyUse lazy update to avoid repeated operations
34Tape equilibriumSourceJavaScriptDocumentationEasyPrefix sumTrack left/right sums, find min difference
35Perm checkSourceJavaScriptDocumentationEasySet operationsCheck if all numbers from 1 to N are present
36Equi leaderSourceJavaScriptDocumentationMediumBoyer-Moore algorithm-
37Count trianglesSourceJavaScriptDocumentationMediumTwo pointers-
38Min abs sum of twoSourceJavaScriptDocumentationMediumTwo pointers-
39Abs distinctSourceJavaScriptDocumentationEasyTwo pointers-
40Count distinct slicesSourceJavaScriptDocumentationMediumSliding window-

String

No.NameSourceLiveDocumentationLevelPatternHint
1Longest substring without repeating charactersSourceJavaScriptDocumentationMediumSliding Windowset to remove duplicates or map/dict with (char,index) key-value pairs to jump position
2Longest repeating character replacementSourceJavaScriptDocumentationMediumSliding Windowchar frequency dict/map/array with windowLength-maxFrequency > k check
3Minimum window substringSourceJavaScriptDocumentationHardSliding WindowTwo char frequecies map/dict for finding minimum length based on having == required
4Valid anagramSourceJavaScriptDocumentationEasyFrequency countingBalancing char frequency list
5Group anagramsSourceJavaScriptDocumentationMediumFrequency countingGroup anagrams based on unique key(counter or sorted)
6Valid palindromeSourceJavaScriptDocumentationEasyTwo pointerCompare two strings using two pointers
7Longest palindromic substringSourceJavaScriptDocumentationMediumExpanding around center-
8Palindromic substringsSourceJavaScriptDocumentationMediumExpanding around center-
9Encode and decode stringsSourceJavaScriptDocumentationMediumBasic string and array operations-
10Greatest common devisor of stringsSourceJavaScriptDocumentationEasyEuclidean and String operations-
11Reverse words in stringSourceJavaScriptDocumentationMediumBasic string and array operations-
12Length of last wordSourceJavaScriptDocumentationEasyString traversal-

Dynamic programming

No.NameSourceLiveDocumentationLevelPatternHint
1Climbing stairsSourceJavaScriptDocumentationMediumDynamic programmingUse DP to build up the number of ways to reach each step from previous two steps.
2Coin changeSourceJavaScriptDocumentationMediumDynamic programmingFor each amount, try every coin and use DP to find the minimum coins needed.
3Longest increasing subsequenceSourceJavaScriptDocumentationMediumDynamic programming (Bottom up)For each element, find the longest increasing subsequence ending at that element.
4Longest common subsequenceSourceJavaScriptDocumentationMediumTwo-dimentional bottom up Dynamic programmingUse a DP table to track the longest subsequence for all prefixes of both strings.
5Word breakSourceJavaScriptSourceMediumBottom up dynamic programmingFor each index, check if any word in the dictionary ends there and the prefix is breakable.
6Combination Sum 4SourceJavaScriptDocumentationMediumBottom up Dynamic programmingFor each total, sum the ways to reach it using all numbers in the array.
7House robberSourceJavaScriptDocumentationMediumFibonacci pattern bottom-up dynamic programmingAt each house, choose max of robbing it plus two houses back or skipping it.
8House robber 2SourceJavaScriptDocumentationMediumBottom-up dynamic programmingLike House Robber, but first and last houses are adjacent, so solve twice (excluding each end).
9Decode waysSourceJavaScriptDocumentationMediumDynamic programmingFor each position, sum the ways to decode one or two digits if valid.
10Unique pathsSourceJavaScriptDocumentationMediumDynamic programmingUse DP to count ways to reach each cell from top or left.
11Jump gameSourceJavaScriptDocumentationMediumDynamic programming or GreedyTrack the farthest index you can reach at each step.
12Min abs sumSourceJavaScriptDocumentationMediumDynamic programmingUse DP to partition numbers into two groups with minimal absolute difference.
13Number solitaireSourceJavaScriptDocumentationMediumDynamic programmingAt each cell, choose the best score from the previous 6 cells plus current value.

Binary

No.NameSourcePlaygroundDocumentationLevelPatternHint
1Sum of two integersSourceJavaScriptDocumentationMediumBitwise operationsUse bitwise operations to add without using '+'.
2Number of 1 BitsSourceJavaScriptDocumentationEasyBrian KernighansRepeatedly clear the lowest set bit using n & (n-1).
3Counting BitsSourceJavaScriptDocumentationEasyDynamic programmingFor each number, count bits as 1 + bits in n & (n-1).
4Missing numberSourceJavaScriptDocumentationEasyBitwise XOR-
5Reverse BitsSourceJavaScriptDocumentationEasyBitwise operations-

Stack

No.NameSourceLiveDocumentationLevelPatternHint
1Sort StackSourceJavaScriptDocumentationEasyStack push & popUse an auxiliary stack to insert elements in sorted order.
2Balanced BracketsSourceJavaScriptDocumentationMediumStack push and popPush opening brackets, pop and check for matching closing brackets.
3Reverse Polish NotationSourceJavaScriptDocumentationMediumStack push & popPush operands, pop two for each operator, compute and push result.
4Daily TemperaturesSourceJavaScriptDocumentationMediumMonotonic decreasing stackUse stack to keep indices, pop when a warmer day is found.
5Number of People See In QueueSourceJavaScriptDocumentationMediumMonotonic decreasing stackUse stack to count visible people for each position.

LinkedList

No.NameSourceLiveDocumentationLevelPatternHint
1Reverse sublistSourceJavaScriptDocumentationEasyList traversalReverse pointers between left and right positions.
2Detect cycle in a linkedlistSourceJavaScriptDocumentationEasyFloyd's cycle-finding algorithmUse slow and fast pointers to detect a cycle.
3Merge two sorted listsSourceJavaScriptDocumentationEasyArithmetic comparisonCompare heads, attach smaller node, repeat.
4Merge K sorted listsSourceJavaScriptDocumentationHardDivide and conquerMerge pairs of lists recursively or use a min-heap.
5Remove Kth node from end of listSourceJavaScriptDocumentationMediumTwo pointers-
6Reorder listSourceJavaScriptDocumentationMediumTwo pointers-
7Find middle nodeSourceJavaScriptDocumentationEasyTwo pointers-
8Find Kth node from end of listSourceJavaScriptDocumentationEasyTwo pointers-
9Partition listSourceJavaScriptDocumentationMediumTwo pointers-
10Remove duplicatesSourceJavaScriptDocumentationEasyTwo pointers-
11Binary to decimalSourceJavaScriptDocumentationEasyList traversal and math operations-

DoublyLinkedList

No.NameSourceLiveDocumentationLevelPatternHint
1Swap first and lastSourceJavaScriptDocumentationEasySwap nodesSwap head and tail node values.
2Palindrome checkSourceJavaScriptDocumentationEasyTwo pointers-
3Swap node pairsSourceJavaScriptDocumentationMediumList traversal and pointer updates-

Tree

No.NameSourceLiveDocumentationLevelPatternHint
1Maximum depth of binary treeSourceJavaScriptDocumentationEasyDFS with recursionRecursively find max depth of left and right subtrees.
2Same treeSourceJavaScriptDocumentationEasyDFS with recursionRecursively compare values and subtrees of both trees.
3Invert or Flip binary treeSourceJavaScriptDocumentationEasyDFS with recursionRecursively swap left and right children of each node.
4Binary tree maximum path sumSourceJavaScriptDocumentationHardDFS using recursionAt each node, compute max path sum including or excluding the node.
5Binary tree level order traversalSourceJavaScriptDocumentationEasyBFS traversalUse a queue to traverse nodes level by level.
6Serialize and deserialize binary treeSourceJavaScriptDocumentationHardDFS preorder traversal-
7Subtree of another treeSourceJavaScriptDocumentationEasyDFS with recursion-
8Construct binary tree from traversalsSourceJavaScriptDocumentationMediumDFS with recursion-
9Validate BSTSourceJavaScriptDocumentationMediumDFS using recursion-
10Kth smallest element in BSTSourceJavaScriptDocumentationMediumInorder traversal-
11Lowest Common Ancestor of BSTSourceJavaScriptDocumentationMediumTree traversal-
12TrieSourceJavaScriptDocumentationMediumString character iteration-
13Design and Search words DatastructureSourceJavaScriptDocumentationMediumTrie and DFS recursion-
14Word search 2SourceJavaScriptDocumentationHardBacktracking with Trie-

Graph

No.NameSourceLiveDocumentationLevelPatternHint
1Clone graphSourceJavaScriptDocumentationMediumDFS using recursion-
2Course scheduleSourceJavaScriptDocumentationMediumDFS using recursion-
3Pacific Atlantic waterflowSourceJavaScriptDocumentationMediumDFS using recursion-
4Number of IslandsSourceJavaScriptDocumentationMediumDFS using recursion-
5Alien dictionarySourceJavaScriptDocumentationHardTopological sorting-
6Graph valid treeSourceJavaScriptDocumentationMediumUnion Find algorithm-
7Number of connected componentsSourceJavaScriptDocumentationMediumUnion Find algorithm-
8Walls and gatesSourceJavaScriptDocumentationMediumBFS traversal-
9Fib frogSourceJavaScriptDocumentationMediumDynamic programming-

Matrix

No.NameSourceLiveDocumentationLevelPatternHint
1Set matrix zerosSourceJavaScriptDocumentationMediumIn-place updates-
2Spiral matrixSourceJavaScriptDocumentationMediumBoundary traversal-
3Rotate imageSourceJavaScriptDocumentationMediumIn-place rotation-
4Word searchSourceJavaScriptDocumentationMediumDFS using recursion-

Interval

No.NameSourceLiveDocumentationLevelPatternHint
1Insert intervalSourceJavaScriptDocumentationMediumMath operations-
2Merge intervalSourceJavaScriptDocumentationMediumSorting and math operations-
3Non-overlapping intervalsSourceJavaScriptDocumentationMediumGreedy algorithm-
4Meeting roomsSourceJavaScriptDocumentationMediumGreedy algorithm-
5Meeting rooms 2SourceJavaScriptDocumentationMediumTwo pointers-
6Meeting rooms 3SourceJavaScriptDocumentationMediumGreedy algorithmTwo minheaps + greedy scheduling + simulation
7Max non-overlapping segmentsSourceJavaScriptDocumentationMediumGreedy algorithm-

HashTable

No.NameSourceLiveDocumentationLevelPatternHint
1DuplicatesSourceJavaScriptDocumentationEasyUsing Map-
2Two sumSourceJavaScriptDocumentationEasyUsing Map-
3First non repeating characterSourceJavaScriptDocumentationEasyUsing Map-
4Group anagramsSourceJavaScriptDocumentationMediumMap methods-
5Verify Common ElementsSourceJavaScriptDocumentationEasyMap methods-
6Longest consecutive sequenceSourceJavaScriptDocumentationMediumSet operations-
7Valid SudokuSourceJavaScriptDocumentationMediumMap and Set methods-
8Letter combinationsSourceJavaScriptDocumentationMediumBacktracking with hash mapping-
9LRU CacheSourceJavaScriptDocumentationMediumHash Table with linked list-
10Maximum number of balloonsSourceJavaScriptDocumentationEasyCharacter frequency map-
11Isomorphic StringsSourceJavaScriptDocumentationEasyCharacter mapping-
14First unique characterSourceJavaScriptDocumentationEasyCharacter frequency count-

Sorting

No.NameSourceLiveDocumentationLevelComplexityHint
1Bubble sortSourceJavaScriptDocumentationEasyTC: O(n²), SC: O(1)-
2Selection sortSourceJavaScriptDocumentationEasyTC: O(n²), SC: O(1)-
3Insertion sortSourceJavaScriptDocumentationEasyTC: O(n²), SC: O(1)-
4Merge sortSourceJavaScriptDocumentationMediumTC: O(n log n), SC: O(n)-
5Quick sortSourceJavaScriptDocumentationMediumTC: O(n²), SC: O(log n)-
6Heap sortSourceJavaScriptDocumentationHardTC: O(n log n), SC: O(1)-
7Radix sortSourceJavaScriptDocumentationMediumTC: O(d(n+k)), SC: O(n+k)-
8Max product of threeSourceJavaScriptDocumentationEasyArray sorting-

Misc

No.NameSourceLiveDocumentationLevelPatternHint
1Frog jumpSourceJavaScriptDocumentationEasyMathematical calculation-
2Missing elementSourceJavaScriptDocumentationEasyMathematical calculation-
3Frog river oneSourceJavaScriptDocumentationEasySet operations-
4Count divisibleSourceJavaScriptDocumentationEasyMathematical calculation-