
This course includes our updated coding exercises so you can practice your skills as you learn.
See a demo
Branko introduces the coding interview jumpstart course, promises a career changing impact by teaching algorithms and problem solving with clear explanations and motivation.
Explore essential algorithm analysis, documentation, and time and space complexity; master sorting algorithms (bubble sort, selection sort, insertion sort) and binary search variations.
Learn to analyze algorithms by exploring asymptotic notation and Big-O, compare time and space complexity, and practice selecting the best algorithm for a problem.
Analyze algorithm efficiency by comparing naive prime checks with square-root optimization, recognizing how operation counts and data types influence running time and asymptotic performance.
Learn to estimate a program’s running time by identifying the dominant growth term and using asymptotic notation, especially big O, to compare algorithms.
Explore big-O notation and how to describe an algorithm's worst-case time and space using upper bounds, dropping lower-order terms, and comparing growth rates.
Analyze time complexity through multiple examples, identify bottlenecks in nested loops and while loops, and express running time in big-o notation using common patterns.
Learn to estimate space complexity by dropping constants and keeping the dominant term. This lecture shows constant space for simple variables, linear space for arrays, and O(n*m) for matrices.
Learn sorting fundamentals from bubble, selection, and insertion sort to merge sort, quicksort, and counting sort; compare time and space complexity and choose the best algorithm for data.
Explore bubble sort, a simple sorting algorithm that traverses an array, swaps adjacent out-of-order elements, and repeats until sorted, noting that the largest element moves to the end each pass.
Learn a bubble sort implementation in Java with swap and print helpers, a swap loop and adjacent comparisons, and time and space complexity analysis using 5 4 3 2 1.
Master selection sort by repeatedly selecting the smallest element from the unsorted suffix and swapping it into the sorted prefix, demonstrating iterative, in-place sorting and implementation steps.
Implement selection sort by swapping the minimum element in the unsorted group into place, using swap and print helpers, and analyze its quadratic time and one extra space.
Learn insertion sort by dividing the array into a sorted prefix and an unsorted suffix, then iteratively insert each unsorted element into its correct position within the sorted prefix.
Demonstrate the insertion sort implementation with swap and print helpers, inserting each element into the left prefix and analyzing its O(n^2) time and one space complexity.
Learn how merge sort divides an array in two halves, recursively sorts each half, and merges them into a sorted array, highlighting its efficiency over quadratic sorting.
Learn how to implement merge sort, using an auxilary array, recursion to split ranges, and a merge step with two pointers, plus time and space analysis.
Discover how quicksort uses a pivot to partition an array into left and right subarrays and recursively sort them, with step-by-step simulation.
Implement quicksort in java by shuffling the array and using a two-pointer partition to place the pivot. Recursively sort left and right parts.
Counting sort introduces a non-comparison based algorithm that counts occurrences in a count array, builds a prefix summary, then places elements into the output array and copies back.
Learn to implement counting sort in Java by building a count array, computing prefix sums, and outputting the sorted array, then copying back. Understand time complexity O(n+k) and space O(k).
Master binary search fundamentals and variations, from locating a target in arrays and dictionaries to counting occurrences, while understanding time and space complexity.
This lecture introduces binary search on sorted arrays, using low, high, and mid to compare a target with the middle element and halve the search range.
Explore a practical binary search implementation on a sorted array, using low, high, and mid to return the target index or -1 when not found.
Master how to modify binary search to return the first occurrence of a target value in a sorted array with duplicates, including -1 when the target does not appear.
Apply binary search to find the last occurrence of a target, contrasting with the first occurrence, and adjust mid calculation with plus one to avoid infinite loops in even ranges.
Use binary search variations to count a target in a sorted array with duplicates via first and last occurrence, yielding count as last minus first plus one for O(log n).
Explore solving the unique number problem where every element in an array appears twice except one, using brute force, counting, maps, sorting, and xor techniques.
WHAT IS THIS COURSE ABOUT?
In this course we will together make the first steps in the exciting world of algorithms. If you have never learned anything about algorithms, don’t be afraid or intimidated. Algorithms aren’t as hard as people often consider them to be. I’m convinced that any programmer can master the art of problem solving and algorithms if he or she has the motivation to succeed. In fact, I believe that most of the algorithms can be very easy to understand if they are explained in a clear and simple way.
Considering that I know how hard can the beginning be, because I have been in the same situation once, I have invested my knowledge and experience into this course, to help you guys making the first steps towards mastering algorithms and bringing you one step closer to your dream job.
HOW IS THIS COURSE STRUCTURED?
Section 1: Introduction
In this section, I will introduce you with the material and the structure of the course.
Section 2: Algorithm Analysis
In section 2, we are going to talk about algorithm analysis. For some of you, this will be your first step into the world of algorithms and you will understand why is this such an important topic.
We are going to learn several things:
First, we will learn about the importance of analysis, and why do we have to analyze our solutions.
Then we are going to focus on Asymptotic notation, which is basically a language that allows us to analyze program running time by identifying its behavior as the input size for the algorithm increases.
After that we will focus on a specific type of notation, called Big-O notation, and we will use the Big-O notation to compare algorithms.
Finally we are going to practice these concepts by calculating time and space complexity of some given algorithms.
Section 3: Sorting
Sorting is one of the most common algorithms in the world, if you look all around you can find a lot of applications that are using a sorting algorithm to put elements of some list in a certain order. The elements don’t have to be numbers, they can be strings or maybe some events which are sorted by date.
In this section we will learn several sorting algorithms:
Bubble Sort
Selection Sort
Insertion Sort
Merge Sort
Quick Sort
Counting Sort
For each algorithm we will determine the time and space complexity and compare trade-offs.
At the end of this section you will learn the most important sorting algorithms and you will be able to determine what is the best algorithm to use depending on the type and range of the data which needs to be sorted.
Section 4: Binary Search
This section is dedicated to a fundamental searching algorithm in computer science: binary search.
We start with an explanation about the basic idea of the algorithm and its implementation.
Then we are going to explore some variations of binary search and how we can implement them:
Finding the first occurrence of a target value in the input array
Finding the last occurrence of a target value in the input array
Finding the number of occurrences of a target value in the input array
Section 5: BONUS: Interview Problems
This section is a special bonus section, here I will post detailed interview problems solutions. I encourage you to post some interesting problems in the discussions, and each one-two weeks I will choose new problems and post a new video in this section where we solve those new problems.
I also encourage you to post questions about problems that you don't know how to solve or if you have some bugs in your code and you're not sure why your program isn't working