This repository contains accepted solutions of many problems from leetcode including related discussions if exists, coded in different programming languages.
Each problem has its own separate README with related explanations and examples for further reading (including ones to leetcode problem).
Read source-code by Programming Languages: Java, C#, Python, JavaScript, TypeScript
☝ Note that this project is meant to be used for learning and researching purposes only, and it is not meant to be used for production.
Table of Contents
Here is the folder structure.
leetcode/
|- algorithms/
|- concurrency/
|- database/
|- javascript/
|- shell/
ALL FOLDERS ABOVE IN-STRUCTURE IS:
|-- {problem}/
|-- Solution.{...}
|-- README.md
- Bit Manipulation
- Array
- String
- Linked List
- Doubly Linked List
- Stack
- Monotonic Stack
- Monotonic Queue
- Queue
- Tree
- Hash Table
- Math
- Two Pointers
- Recursion
- Binary Search
- Binary Tree
- Breadth-First Search
- Depth-First Search
- Backtracking
- Dynamic Programming
- Divide and Conquer
- Memoization
- Greedy
- Graph
- Heap (Priority Queue)
- Quickselect
- Shortest Path
- Geometry
- Simulation
- Design
- Brainteaser
- Game Theory
- Sorting
- Prefix Sum
- Sliding Window
- Data Stream
- Concurrency
- Combinatorics
- Counting
- Union Find
- Topological Sort
- Bucket Sort
- Merge Sort
# | Title | Solution | Time | Space | Difficulty | Note |
---|---|---|---|---|---|---|
67 | Add Binary | Java | N/A | N/A | ||
78 | Subsets | Java | N/A | N/A | ||
136 | Single Number | Java | N/A | N/A | ||
190 | Reverse Bits | Java | N/A | N/A | ||
191 | Number of 1 Bits | Java | N/A | N/A | ||
231 | Power of Two | Java | N/A | N/A | ||
268 | Missing Number | Java | N/A | N/A | ||
287 | Find the Duplicate Number | Java | N/A | N/A | ||
338 | Counting Bits | Java | N/A | N/A | ||
342 | Power of Four | Java | N/A | N/A | ||
389 | Find the Difference | Java | N/A | N/A | ||
784 | Letter Case Permutation | Java | O(2^n) | O(2^n) | View discussion on leetcode | |
1318 | Minimum Flips to Make a OR b Equal to c | Java | N/A | N/A | ||
1342 | Number of Steps to Reduce a Number to Zero | Java | N/A | N/A | ||
1863 | Sum of All Subset XOR Totals | Java | N/A | N/A |
# | Title | Solution | Time | Space | Difficulty | Note |
---|---|---|---|---|---|---|
17 | Letter Combinations of a Phone Number | Java | N/A | N/A | ||
22 | Generate Parentheses | Java | N/A | N/A | ||
37 | Sudoku Solver | Java | N/A | N/A | ||
39 | Combination Sum | Java | N/A | N/A | ||
51 | N-Queens | Java | N/A | N/A | ||
77 | Combinations | Java | N/A | N/A | ||
78 | Subsets | Java | N/A | N/A | ||
79 | Word Search | Java | N/A | N/A | ||
131 | Palindrome Partitioning | Java | N/A | N/A | ||
216 | Combination Sum III | Java | N/A | N/A | ||
257 | Binary Tree Paths | Java | N/A | N/A | ||
784 | Letter Case Permutation | Java | O(2^n) | O(2^n) | View discussion on leetcode | |
1863 | Sum of All Subset XOR Totals | Java | N/A | N/A |
# | Title | Solution | Time | Space | Difficulty | Note |
---|---|---|---|---|---|---|
146 | LRU Cache | Java | N/A | N/A | ||
155 | Min Stack | Java | N/A | N/A | ||
208 | Implement Trie (Prefix Tree) | Java | N/A | N/A | ||
225 | Implement Stack using Queues | Java | N/A | N/A | ||
232 | Implement Queue using Stacks | Java | N/A | N/A | ||
295 | Find Median from Data Stream | Java | N/A | N/A | ||
901 | Online Stock Span | Java | N/A | N/A | ||
933 | Number of Recent Calls | Java | N/A | N/A | ||
2336 | Smallest Number in Infinite Set | Java | N/A | N/A |
# | Title | Solution | Time | Space | Difficulty | Note |
---|---|---|---|---|---|---|
225 | Implement Stack using Queues | Java | N/A | N/A | ||
232 | Implement Queue using Stacks | Java | N/A | N/A | ||
239 | Sliding Window Maximum | Java | O(n) | O(k) | ||
387 | First Unique Character in a String | Java | N/A | N/A | ||
649 | Dota2 Senate | Java | N/A | N/A | ||
933 | Number of Recent Calls | Java | N/A | N/A |
# | Title | Solution | Time | Space | Difficulty | Note |
---|---|---|---|---|---|---|
20 | Valid Parentheses | Java | N/A | N/A | ||
32 | Longest Valid Parentheses | Java | N/A | N/A | ||
42 | Trapping Rain Water | Java | N/A | N/A | ||
84 | Largest Rectangle in Histogram | Java | N/A | N/A | ||
94 | Binary Tree Inorder Traversal | Java | N/A | N/A | ||
114 | Flatten Binary Tree to Linked List | Java | N/A | N/A | ||
144 | Binary Tree Preorder Traversal | Java | N/A | N/A | ||
145 | Binary Tree Postorder Traversal | Java | N/A | N/A | ||
155 | Min Stack | Java | N/A | N/A | ||
225 | Implement Stack using Queues | Java | N/A | N/A | ||
232 | Implement Queue using Stacks | Java | N/A | N/A | ||
234 | Palindrome Linked List | Java | N/A | N/A | ||
394 | Decode String | Java | N/A | N/A | ||
735 | Asteroid Collision | Java | O(N + k) | O(N) | ||
739 | Daily Temperatures | Java | O(N) | O(N) | ||
901 | Online Stock Span | Java | N/A | N/A | ||
2130 | Leaf Similar Trees | Java | O(N) | O(N) | ||
2390 | Removing Stars From a String | Java | O(N) | O(NlogN) |
# | Title | Solution | Time | Space | Difficulty | Note |
---|---|---|---|---|---|---|
42 | Trapping Rain Water | Java | N/A | N/A | ||
84 | Largest Rectangle in Histogram | Java | N/A | N/A | ||
739 | Daily Temperatures | Java | O(N) | O(N) | ||
901 | Online Stock Span | Java | N/A | N/A |
# | Title | Solution | Time | Space | Difficulty | Note |
---|---|---|---|---|---|---|
239 | Sliding Window Maximum | Java | O(n) | O(k) |
# | Title | Solution | Time | Space | Difficulty | Note |
---|---|---|---|---|---|---|
292 | Nim Game | Java | N/A | N/A |
# | Title | Solution | Time | Space | Difficulty | Note |
---|---|---|---|---|---|---|
292 | Nim Game | Java | N/A | N/A |
# | Title | Solution | Time | Space | Difficulty | Note |
---|---|---|---|---|---|---|
238 | Product of Array Except Self | Java | O(N) | O(N) | ||
560 | Subarray Sum Equals K | Java | N/A | N/A | ||
724 | Find Pivot Index | Java | N/A | N/A | ||
1004 | Max Consecutive Ones III | Java | O(N + k) | O(1) | ||
1480 | Running Sum of 1D Array | Java | N/A | N/A | ||
1732 | Find the Highest Altitude | Java | O(N) | O(1) |
# | Title | Solution | Time | Space | Difficulty | Note |
---|---|---|---|---|---|---|
3 | Longest Substring Without Repeating Characters | Java | N/A | N/A | ||
76 | Minimum Window Substring | Java | N/A | N/A | ||
219 | Contains Duplicate II | Java | O(N) | O(N) | ||
239 | Sliding Window Maximum | Java | O(n) | O(k) | ||
438 | Find All Anagrams in a String | Java | N/A | N/A | ||
567 | Permutation in String | Java | N/A | N/A | ||
643 | Maximum Average Subarray I | Java | O(N) | O(1) | ||
1004 | Max Consecutive Ones III | Java | O(N + k) | O(1) | ||
1456 | Maximum Number of Vowels in a Substring of Given Length | Java | O(N) | O(1) | ||
1493 | Longest Subarray of 1's After Deleting One Element | Java | O(N + k) | O(1) |
# | Title | Solution | Time | Space | Difficulty | Note |
---|---|---|---|---|---|---|
295 | Find Median from Data Stream | Java | N/A | N/A | ||
901 | Online Stock Span | Java | N/A | N/A | ||
933 | Number of Recent Calls | Java | N/A | N/A |
# | Title | Solution | Time | Space | Difficulty | Note |
---|---|---|---|---|---|---|
11 | Container With Most Water | Java | N/A | N/A | ||
45 | Jump Game II | Java | N/A | N/A | ||
334 | Increasing Triplet Subsequence | Java | O(N) | O(1) | ||
435 | Non-overlapping Intervals | Java | N/A | N/A | ||
452 | Minimum Number of Arrows to Burst Balloons | Java | N/A | N/A | ||
455 | Assign Cookies | Java | N/A | N/A | ||
605 | Can Place Flowers | Java | O(N) | O(1) | ||
649 | Dota2 Senate | Java | N/A | N/A | ||
680 | Valid Palindrome II | Java | N/A | N/A | ||
763 | Partition Labels | Java | N/A | N/A | ||
1323 | Maximum 69 Number | Java | O(n) | O(n) | View discussion on leetcode | |
1855 | Maximum Distance Between a Pair of Values | Java | N/A | N/A | ||
2542 | Maximum Subsequence Score | Java | N/A | N/A |
# | Title | Solution | Time | Space | Difficulty | Note |
---|---|---|---|---|---|---|
207 | Course Schedule | Java | N/A | N/A | ||
399 | Evaluate Division | Java | N/A | N/A | ||
547 | Number of Provinces | Java | N/A | N/A | ||
841 | Keys and Rooms | Java | N/A | N/A | ||
1466 | Reorder Routes to Make All Paths Lead to the City Zero | Java | O(n) | O(n) | View discussion on leetcode |
# | Title | Solution | Time | Space | Difficulty | Note |
---|---|---|---|---|---|---|
23 | Merge k Sorted Lists | Java | N/A | N/A | ||
215 | Kth Largest Element in an Array | Java | N/A | N/A | ||
239 | Sliding Window Maximum | Java | O(n) | O(k) | ||
295 | Find Median from Data Stream | Java | N/A | N/A | ||
347 | Top K Frequent Elements | Java | N/A | N/A | ||
1337 | The K Weakest Rows in a Matrix | Java | O(nlogm) | O(n) | View discussion on leetcode | |
2336 | Smallest Number in Infinite Set | Java | N/A | N/A | ||
2462 | Total Cost to Hire K Workers | Java | N/A | N/A | ||
2542 | Maximum Subsequence Score | Java | N/A | N/A |
# | Title | Solution | Time | Space | Difficulty | Note |
---|---|---|---|---|---|---|
215 | Kth Largest Element in an Array | Java | N/A | N/A |
# | Title | Solution | Time | Space | Difficulty | Note |
---|---|---|---|---|---|---|
399 | Evaluate Division | Java | N/A | N/A |
# | Title | Solution | Time | Space | Difficulty | Note |
---|---|---|---|---|---|---|
36 | Valid Sudoku | Java | O(n2) | O(1) | View discussion on leetcode | |
37 | Sudoku Solver | Java | N/A | N/A | ||
48 | Rotate Image | Java | N/A | N/A | ||
64 | Minimum Path Sum | Java | N/A | N/A | ||
73 | Set Matrix Zeroes | Java | N/A | N/A | ||
74 | Search a 2D Matrix | Java | N/A | N/A | View discussion on leetcode | |
79 | Word Search | Java | N/A | N/A | ||
200 | Number of Islands | Java | N/A | N/A | ||
240 | Search a 2D Matrix II | Java | N/A | N/A | ||
542 | 01 Matrix | Java | O(nm) | O(nm) | View discussion on leetcode | |
695 | Max Area of Island | Java | N/A | N/A | ||
733 | Flood Fill | Java | N/A | N/A | ||
867 | Transpose Matrix | Java | N/A | N/A | ||
994 | Rotting Oranges | Java | N/A | N/A | ||
1337 | The K Weakest Rows in a Matrix | Java | O(nlogm) | O(n) | View discussion on leetcode | |
1351 | Count Negative Numbers in a Sorted Matrix | Java | N/A | N/A | ||
1572 | Matrix Diagonal Sum | Java | O(n) | O(1) | View discussion on leetcode | |
1672 | Richest Customer Wealth | Java | N/A | N/A | ||
2352 | Equal Row and Column Pairs | Java | O(N^3) | O(1) | ||
1926 | Nearest Exit from Entrance in Maze | Java | N/A | N/A |
# | Title | Solution | Time | Space | Difficulty | Note |
---|---|---|---|---|---|---|
67 | Add Binary | Java | N/A | N/A | ||
258 | Add Digits | Java | N/A | N/A | ||
412 | Fizz Buzz | Java | N/A | N/A | ||
867 | Transpose Matrix | Java | N/A | N/A | ||
2352 | Equal Row and Column Pairs | Java | O(N^3) | O(1) | ||
2390 | Removing Stars From a String | Java | O(N) | O(NlogN) | ||
2462 | Total Cost to Hire K Workers | Java | N/A | N/A | ||
2660 | Determine the Winner of a Bowling Game | Java, Python, JavaScript | O(n) | O(1) | View discussion on leetcode |
# | Title | Solution | Time | Space | Difficulty | Note |
---|---|---|---|---|---|---|
4 | Median of Two Sorted Arrays | Java | N/A | N/A | ||
23 | Merge k Sorted Lists | Java | N/A | N/A | ||
53 | Maximum Subarray | Java | N/A | N/A | ||
105 | Construct Binary Tree from Preorder and Inorder Traversal | Java | N/A | N/A | ||
108 | Convert Sorted Array to Binary Search Tree | Java | N/A | N/A | ||
148 | Sort List | Java | N/A | N/A | ||
169 | Majority Element | Java | N/A | N/A | ||
190 | Reverse Bits | Java | N/A | N/A | ||
191 | Number of 1 Bits | Java | N/A | N/A | ||
215 | Kth Largest Element in an Array | Java | N/A | N/A | ||
240 | Search a 2D Matrix II | Java | N/A | N/A | ||
347 | Top K Frequent Elements | Java | N/A | N/A |
# | Title | Solution | Time | Space | Difficulty | Note |
---|---|---|---|---|---|---|
70 | Climbing Stairs | Java | N/A | N/A | ||
139 | Word Break | Java | N/A | N/A | ||
1137 | N-th Tribonacci Number | Java | N/A | N/A |
# | Title | Solution | Time | Space | Difficulty | Note |
---|---|---|---|---|---|---|
14 | Longest Common Prefix | Java | N/A | N/A | ||
139 | Word Break | Java | N/A | N/A | ||
208 | Implement Trie (Prefix Tree) | Java | N/A | N/A | ||
1268 | Search Suggestions System | Java | N/A | N/A |
# | Title | Solution | Time | Space | Difficulty | Note |
---|---|---|---|---|---|---|
2 | Add Two Numbers | Java | N/A | N/A | ||
21 | Merge Two Sorted Lists | Java | N/A | N/A | ||
24 | Swap Nodes in Pairs | Java | N/A | N/A | ||
25 | Reverse Nodes in k-Group | Java | N/A | N/A | ||
50 | Pow(x, n) | Java | N/A | N/A | ||
203 | Remove Linked List Elements | Java | N/A | N/A | ||
206 | Reverse Linked List | Java | O(n) | O(1) | ||
231 | Power of Two | Java | N/A | N/A | ||
234 | Palindrome Linked List | Java | N/A | N/A | ||
326 | Power of Three | Java | O(log3n) | O(log3n) | View discussion on leetcode | |
342 | Power of Four | Java | N/A | N/A | ||
394 | Decode String | Java | N/A | N/A |
# | Title | Solution | Time | Space | Difficulty | Note |
---|---|---|---|---|---|---|
2 | Add Two Numbers | Java | N/A | N/A | ||
19 | Remove Nth Node From End of List | Java | N/A | N/A | ||
21 | Merge Two Sorted Lists | Java | N/A | N/A | ||
23 | Merge k Sorted Lists | Java | N/A | N/A | ||
24 | Swap Nodes in Pairs | Java | N/A | N/A | ||
25 | Reverse Nodes in k-Group | Java | N/A | N/A | ||
83 | Remove Duplicates from Sorted List | Java | N/A | N/A | ||
114 | Flatten Binary Tree to Linked List | Java | N/A | N/A | ||
116 | Populating Next Right Pointers in Each Node | Java | N/A | N/A | ||
138 | Copy List with Random Pointer | Java | N/A | N/A | ||
141 | Linked List Cycle | Java | N/A | N/A | ||
142 | Linked List Cycle II | Java | N/A | N/A | ||
146 | LRU Cache | Java | N/A | N/A | ||
148 | Sort List | Java | N/A | N/A | ||
160 | Intersection of Two Linked Lists | Java | N/A | N/A | ||
206 | Reverse Linked List | Java | O(n) | O(1) | ||
234 | Palindrome Linked List | Java | N/A | N/A | ||
328 | Odd Even Linked List | Java | O(N) | O(N) | ||
876 | Middle of the Linked List | Java | N/A | N/A | ||
2095 | Delete the Middle Node of a Linked List | Java | O(N) | O(N) | ||
2130 | Leaf Similar Trees | Java | O(N) | O(N) |
# | Title | Solution | Time | Space | Difficulty | Note |
---|---|---|---|---|---|---|
146 | LRU Cache | Java | N/A | N/A |
# | Title | Solution | Time | Space | Difficulty | Note |
---|---|---|---|---|---|---|
62 | Unique Paths | Java | N/A | N/A | View discussion on leetcode | |
1863 | Sum of All Subset XOR Totals | Java | N/A | N/A |
# | Title | Solution | Time | Space | Difficulty | Note |
---|---|---|---|---|---|---|
169 | Majority Element | Java | N/A | N/A | ||
347 | Top K Frequent Elements | Java | N/A | N/A | ||
383 | Ransom Note | Java | N/A | N/A | ||
387 | First Unique Character in a String | Java | N/A | N/A |
# | Title | Solution | Time | Space | Difficulty | Note |
---|---|---|---|---|---|---|
128 | Longest Consecutive Sequence | Java | N/A | N/A | ||
200 | Number of Islands | Java | N/A | N/A | ||
399 | Evaluate Division | Java | N/A | N/A | ||
547 | Number of Provinces | Java | N/A | N/A | ||
695 | Max Area of Island | Java | N/A | N/A |
# | Title | Solution | Time | Space | Difficulty | Note |
---|---|---|---|---|---|---|
207 | Course Schedule | Java | N/A | N/A |
# | Title | Solution | Time | Space | Difficulty | Note |
---|---|---|---|---|---|---|
347 | Top K Frequent Elements | Java | N/A | N/A |
# | Title | Solution | Time | Space | Difficulty | Note |
---|---|---|---|---|---|---|
23 | Merge k Sorted Lists | Java | N/A | N/A | ||
148 | Sort List | Java | N/A | N/A |
# | Title | Solution | Time | Space | Difficulty | Note |
---|---|---|---|---|---|---|
2618 | Check if Object Instance of Class | JavaScript | N/A | N/A | ||
2619 | Array Prototype Last | JavaScript | N/A | N/A | ||
2620 | Counter | JavaScript | N/A | N/A | ||
2621 | Sleep | JavaScript | N/A | N/A | ||
2634 | Filter Elements from Array | JavaScript | N/A | N/A | ||
2648 | Generate Fibonacci Sequence | JavaScript | N/A | N/A | ||
2665 | Counter II | JavaScript | N/A | N/A | ||
2666 | Allow One Function Call | JavaScript | N/A | N/A | ||
2667 | Create Hello World Function | JavaScript | N/A | N/A | ||
2703 | Return Length of Arguments Passed | JavaScript | N/A | N/A | ||
2704 | To Be Or Not To Be | JavaScript | N/A | N/A | ||
2724 | Sort By | JavaScript | N/A | N/A | ||
2726 | Calculator with Method Chaining | JavaScript | N/A | N/A | ||
2727 | Is Object Empty | JavaScript | N/A | N/A |
# | Title | Solution | Time | Space | Difficulty | Note |
---|---|---|---|---|---|---|
----- | ---------------- | --------------- | --------------- | --------------- | ------------- | -------------- |
# | Title | Solution | Time | Space | Difficulty | Note |
---|---|---|---|---|---|---|
----- | ---------------- | --------------- | --------------- | --------------- | ------------- | -------------- |
# | Title | Solution | Time | Space | Difficulty | Note |
---|---|---|---|---|---|---|
----- | ---------------- | --------------- | --------------- | --------------- | ------------- | -------------- |
- ▶ Data Structures and Algorithms on YouTube
- ✍🏻 Data Structure Sketches
- 💻 Personal LeetCode Account
- See REFERENCE.md for more information.
Big O notation is used to classify algorithms according to how their running time or space requirements grow as the input size grows. On the chart below you may find most common orders of growth of algorithms specified in Big O notation.
Source: Big O Cheat Sheet.
Below is the list of some of the most used Big O notations and their performance comparisons against different sizes of the input data.
Big O Notation | Type | Computations for 10 elements | Computations for 100 elements | Computations for 1000 elements |
---|---|---|---|---|
O(1) | Constant | 1 | 1 | 1 |
O(log N) | Logarithmic | 3 | 6 | 9 |
O(N) | Linear | 10 | 100 | 1000 |
O(N log N) | n log(n) | 30 | 600 | 9000 |
O(N^2) | Quadratic | 100 | 10000 | 1000000 |
O(2^N) | Exponential | 1024 | 1.26e+29 | 1.07e+301 |
O(N!) | Factorial | 3628800 | 9.3e+157 | 4.02e+2567 |
Data Structure | Access | Search | Insertion | Deletion | Comments |
---|---|---|---|---|---|
Array | 1 | n | n | n | |
Stack | n | n | 1 | 1 | |
Queue | n | n | 1 | 1 | |
Linked List | n | n | 1 | n | |
Hash Table | - | n | n | n | In case of perfect hash function costs would be O(1) |
Binary Search Tree | n | n | n | n | In case of balanced tree costs would be O(log(n)) |
B-Tree | log(n) | log(n) | log(n) | log(n) | |
Red-Black Tree | log(n) | log(n) | log(n) | log(n) | |
AVL Tree | log(n) | log(n) | log(n) | log(n) | |
Bloom Filter | - | 1 | 1 | - | False positives are possible while searching |
Name | Best | Average | Worst | Memory | Stable | Comments |
---|---|---|---|---|---|---|
Bubble sort | n | n2 | n2 | 1 | Yes | |
Insertion sort | n | n2 | n2 | 1 | Yes | |
Selection sort | n2 | n2 | n2 | 1 | No | |
Heap sort | n log(n) | n log(n) | n log(n) | 1 | No | |
Merge sort | n log(n) | n log(n) | n log(n) | n | Yes | |
Quick sort | n log(n) | n log(n) | n2 | log(n) | No | Quicksort is usually done in-place with O(log(n)) stack space |
Shell sort | n log(n) | depends on gap sequence | n (log(n))2 | 1 | No | |
Counting sort | n + r | n + r | n + r | n + r | Yes | r - biggest number in array |
Radix sort | n * k | n * k | n * k | n + k | Yes | k - length of longest key |
Contributions are always welcome!
See contributing.md
for ways to get started.
Contributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are greatly appreciated.
If you have a suggestion that would make this better, please fork the repo and create a pull request. You can also simply open an issue with the tag "enhancement". Don't forget to give the project a star! Thanks again!
- Fork the Project
- Create your Feature Branch (
git checkout -b feature/AmazingFeature
) - Commit your Changes (
git commit -m 'Add some AmazingFeature'
) - Push to the Branch (
git push origin feature/AmazingFeature
) - Open a Pull Request
Distributed under the MIT License. See LICENSE.txt for more information.
A few more projects and study materials about Computer-Science on ladunjexa.
Get in touch - on LinkedIn - on Telegram