
Explore data structures and algorithms from zero to hero, starting with basic concepts like streams or specs and progressing to complex problems through step-by-step approaches and practical examples.
Setting Up Section.
I attached a resource file where you can find the link to the source code , books and practice website.
Explore one-dimensional and two-dimensional arrays, index-based access, and diagonals in matrices. Learn how the main and secondary diagonals relate to row and column indices.
Use the two pointers technique with i and j to find a pair in an array that sums to a target, moving in a while loop to return indices.
Learn the time planner problem: find the earliest overlap between two slots that satisfies the duration, using a two-pointer approach and calculating overlap with the maximum start and minimum end.
Discover how binary search quickly locates a target in a sorted array by iterating with left and right pointers and a moving middle index, returning the found position or -1.
Implement a binary search on a sorted array to locate a target, returning its index or -1 if not found, and handle edge cases with left, right, and middle probe.
Demonstrates finding all pairs x, y with x minus y equals k in an array, contrasting brute force O(n^2) with a sorting and binary search approach O(n log n).
A robot at 0,0 uses a move string with R, L, U, and D to determine if it returns to origin, via a judge circle method tracking x and y.
Explore how hash tables map keys to values using a hash function, prevent duplicate keys, and replace values; examine the phone book analogy and digest-based password hashing in login.
Learn to create and use a hash map in Java for a phonebook with string keys and values; perform add, get, containsKey, remove, and size, then iterate with entry set.
Examine linked lists, including singly, doubly, and circular variants, with head and next pointers, plus Java implementation of push front, push back, display, search, and length.
Explore stacks as a last in, first out data structure, using push, pop, and peek. Learn Java stack usage from java.util, including isEmpty and a push of 0–4.
Learn to evaluate reverse Polish notation expressions using a stack. Push numbers, and pop operands on plus, minus, multiply, or divide, compute, and push the result until the final value.
Explore the queue data structure and its first-in, first-out behavior, learn enqueue and dequeue operations, and implement queues in Java using a linked list and the queue interface.
Explore graphs by defining vertices and edges, distinguishing undirected and directed graphs, and comparing adjacency matrices and adjacency lists while introducing BFS and DFS traversals.
Explore how depth-first search traverses a graph from a start node, explores as far as possible, uses a visited array, and implements a recursive version.
Explore breadth-first search to traverse a graph from a starting node, visiting each neighbor and its children while marking visited nodes with a boolean array using a queue.
Count islands in a binary matrix using DFS to explore four-directional connected lands, handling edge cases and returning the total island count.
Count unique grid paths with dynamic programming, moving only down or right, using a dp matrix where first row and column are 1 and dp[i][j] = dp[i-1][j] + dp[i][j-1].
If you are interested to learn more about data structures and algorithms or you are preparing for an interview this course is the best option, doesn't matter the programming language you choose. You will learn how to approach a problem and how to write clean and efficient code so you could pass any interview at any company.
Topics:
Arrays
Strings
Maps
Linked Lists
Stacks
Queues and Priority Queues
Graphs
BST
Dynamic Programming