This repository consists of the code samples, assignments, and notes for the Java data structures & algorithms + interview preparation bootcamp of WeMakeDevs.
DSA
Complete Git & GitHub Course
Introduction to Programming
Types of languages
Memory management
Flow of the program
Flowcharts
Pseudocode
Introduction to Java
Introduction
How it works
Setup Installation
Input and Output in Java
Conditionals & Loops in Java
if else
loops
Switch statements
Data types
Coding best practices
Functions
Introduction
Scoping in Java
Shadowing
Variable Length Arguments
Overloading
Arrays
Introduction
Memory management
Input and Output
ArrayList Introduction
Sorting
Insertion Sort
Selection Sort
Bubble Sort
Cyclic Sort (Merge sort etc after recursion)
Searching
Linear Search
Binary Search
Modified Binary Search
Binary Search Interview questions
Binary Search on 2D Arrays
Pattern questions
Strings
Introduction
How Strings work
Comparison of methods
Operations in Strings
StringBuilder in java
Maths for DSA
Introduction
Complete Bitwise Operators
Prime numbers
HCF / LCM
Sieve of Eratosthenes
Newton's Square Root Method
Number Theory
Euclidean algorithm
Space and Time Complexity Analysis
Introduction
Comparion of various cases
Solving Linear Recurrence Relations
Solving Divide and Conquer Recurrence Relations
Big-O, Big-Omega, Big-Theta Notations
Get equation of any relation easily - best and easiest approach
Complexity discussion of all the problems we do
Space Complexity
Memory Allocation of various languages
NP Completeness and Hardness
Recursion
Introduction
Why recursion?
Flow of recursive programs - stacks
Convert recursion to iteration
Tree building of function calls
Tail recursion
Sorting:
Merge Sort
Quick Sort
Backtracking
Sudoku Solver
N-Queens
N-Knights
Maze problems
Recursion String Problems
Recursion Array Problems
Recursion Pattern Problems
Subset Questions
Recursion - Permutations, Dice Throws etc Questions
Object Oriented Programming
Introduction
Classes & its instances
this keyword in Java
Properties
Inheritance
Abstraction
Polymorphism
Encapsulation
Overloading & Overriding
Static & Non-Static
Access Control
Interfaces
Abstract Classes
Singleton Class
final, finalize, finally
Exception Handling
Linked List
Introduction
Singly and Doubly Linked List
Circular Linked List
Fast and slow pointer
Cycle Detection
Reversing of LinekdList
Linked List Interview questions
Stacks & Queues
Introduction
Interview problems
Push efficient
Pop efficient
Queue using Stack and Vice versa
Circular Queue
Dynamic Programming
Introduction
Recursion + Recursion DP + Iteration + Iteration Space Optimized
Complexity Analysis
0/1 Knapsack
Subset Questions
Unbounded Knapsack
Subseq questions
String DP
Trees
Introduction
Binary Trees
Binary Search Trees
DFS
BFS
AVL Trees
Segment Tree
Fenwick Tree / Binary Indexed Tree
Heaps
Introduction
Theory
Priority Queue
Two Heaps Method
k-way merge
top k elements
interval problems
Hashmaps
Introduction
Theory - how it works
Comparisons of various forms
Limitations and how to solve
Map using LinkedList
Map using Hash
Chaining
Probing
Huffman-Encoder
Tries
Graphs
Introduction
BFS
DFS
Working with graph components
Minimum Spanning Trees
Kruskal Algorithm
Prims Algorithm
Dijkstra’s shortest path algorithm
Topological Sort
Bellman ford
A* pathfinding Algorithm
Greedy Algorithms
Advanced concepts apart from interviews
Fast IO
File handling
Bitwise + DP
Extended Euclidean algorithm
Modulo Multiplicative Inverse
Linear Diophantine Equations
Matrix Exponentiation
Mathematical Expectation
Catalan Numbers
Fermat’s Theorem
Wilson's Theorem
Euler's Theorem
Lucas Theorem
Chinese Remainder Theorem
Euler Totient
NP-Completeness
Multithreading
Fenwick Tree / Binary Indexed Tree
Square Root Decomposition
Started the preparation of DSA
DSA Complete Git & GitHub Course Introduction to Programming Types of languages Memory management Flow of the program Flowcharts Pseudocode Introduction to Java Introduction How it works Setup Installation Input and Output in Java Conditionals & Loops in Java if else loops Switch statements Data types Coding best practices Functions Introduction Scoping in Java Shadowing Variable Length Arguments Overloading Arrays Introduction Memory management Input and Output ArrayList Introduction Sorting Insertion Sort Selection Sort Bubble Sort Cyclic Sort (Merge sort etc after recursion) Searching Linear Search Binary Search Modified Binary Search Binary Search Interview questions Binary Search on 2D Arrays Pattern questions Strings Introduction How Strings work Comparison of methods Operations in Strings StringBuilder in java Maths for DSA Introduction Complete Bitwise Operators Prime numbers HCF / LCM Sieve of Eratosthenes Newton's Square Root Method Number Theory Euclidean algorithm Space and Time Complexity Analysis Introduction Comparion of various cases Solving Linear Recurrence Relations Solving Divide and Conquer Recurrence Relations Big-O, Big-Omega, Big-Theta Notations Get equation of any relation easily - best and easiest approach Complexity discussion of all the problems we do Space Complexity Memory Allocation of various languages NP Completeness and Hardness Recursion Introduction Why recursion? Flow of recursive programs - stacks Convert recursion to iteration Tree building of function calls Tail recursion Sorting: Merge Sort Quick Sort Backtracking Sudoku Solver N-Queens N-Knights Maze problems Recursion String Problems Recursion Array Problems Recursion Pattern Problems Subset Questions Recursion - Permutations, Dice Throws etc Questions Object Oriented Programming Introduction Classes & its instances this keyword in Java Properties Inheritance Abstraction Polymorphism Encapsulation Overloading & Overriding Static & Non-Static Access Control Interfaces Abstract Classes Singleton Class final, finalize, finally Exception Handling Linked List Introduction Singly and Doubly Linked List Circular Linked List Fast and slow pointer Cycle Detection Reversing of LinekdList Linked List Interview questions Stacks & Queues Introduction Interview problems Push efficient Pop efficient Queue using Stack and Vice versa Circular Queue Dynamic Programming Introduction Recursion + Recursion DP + Iteration + Iteration Space Optimized Complexity Analysis 0/1 Knapsack Subset Questions Unbounded Knapsack Subseq questions String DP Trees Introduction Binary Trees Binary Search Trees DFS BFS AVL Trees Segment Tree Fenwick Tree / Binary Indexed Tree Heaps Introduction Theory Priority Queue Two Heaps Method k-way merge top k elements interval problems Hashmaps Introduction Theory - how it works Comparisons of various forms Limitations and how to solve Map using LinkedList Map using Hash Chaining Probing Huffman-Encoder Tries Graphs Introduction BFS DFS Working with graph components Minimum Spanning Trees Kruskal Algorithm Prims Algorithm Dijkstra’s shortest path algorithm Topological Sort Bellman ford A* pathfinding Algorithm Greedy Algorithms Advanced concepts apart from interviews Fast IO File handling Bitwise + DP Extended Euclidean algorithm Modulo Multiplicative Inverse Linear Diophantine Equations Matrix Exponentiation Mathematical Expectation Catalan Numbers Fermat’s Theorem Wilson's Theorem Euler's Theorem Lucas Theorem Chinese Remainder Theorem Euler Totient NP-Completeness Multithreading Fenwick Tree / Binary Indexed Tree Square Root Decomposition