## General

- π§βπ AlgoExpert β’ The ultimate resource to prepare for coding interviews. Everything you need, in one streamlined platform.
- π§βπ Interview Cake β’ Programming interview questions + help getting job offers
- algorithms β’ Code / tests for algorithm and data structure lessons using TypeScript / JavaScript β’ Basarat Ali π οΈ
- Build Algorithms using Typescript β’ Egghead course by Basarat Ali π§βπ

## Patterns

- Leetcode 101: The 14 Patterns β’ Vinz Angelo Madrigal πΊ
- Leetcode 101 slides β’ Vinz Angelo Madrigal π
- Make a series that goes through these 14 patterns one at a time?
- what it is
- what problems it applies to
- an example of solving a question with it
- links to other questions that use the same solution
- Links to the extra help links at the end of the video
- Credit to the video creators (and link to the video itself)
- End series with a 15th post summarizing how to choose the right solution pattern based on the question (with links to each

- 14 Patterns to Ace Any Coding Interview Question β’ Fahim ul Haq π
- The Ultimate Strategy to Preparing for the Coding Interview β’ Arslan Ahmad π
- Leetcode Patterns β’ Sean Prashad π

## Strings

- Coding Interview Practice: Bracket Matching β’ Basarat Ali πΊ
- Coding Interview Practice: Longest Consecutive Character β’ Basarat Ali πΊ
- πΊ One Minute Utilities for JavaScript Strings β’ 6 minute video by Basarat Ali showing quick functions for reversing a string, checking if a string is a palindrome, changing the case of a stringβs first character, splitting a string onto muktiple lines, replacing a character in a string, removing whitespace, escaping and unescaping HTML characters, and repeating a string n times

## Numbers

- πΊ FizzBuzz programming interview: What makes it hard? Simple solution πΉ β’ 5 minute video by Basarat Ali showing how to implement FizzBuzz simply and then refactor it
- πΊ FizzBuzz: One Simple Interview Question β’ 7 minute video by Tom Scott showing how to solve Fizz buzz

## Arrays

- πΊ One Minute Utilities for JavaScript Arrays β’ 5 minute video by Basarat Ali showing quick functions for checking in an input is an array, checking if two arrays are equal, return the min, max, sum or average value in an array of numbers, joining two arrays, returning the arrays unique items, return an array that inckudes all numbers in a range, and flatten an array of arrays into a single array

## Sorting

- Algorithms: Bubble Sort β’ Kyle Shevlin π
- Sorting Algorithms Explained Visually β’ Beyond Fireship πΊ

## Searching & Pathfinding

- πΊ Tree Algorithms β’ 8 video playlist by William Fiset
- πΊ Binary Search algorithm in JavaScript β’ 11 minute video by Leigh Halliday showing how to apply binary search to a sorted JS array of numbers
- πΊ Algorithms: Binary Search on Trees and Lists β’ 14 minute video by ThePrimeagen
- π The Algorithms Guide: Learn Binary Search in JavaScript β’ Free course by Jonathan Lee Martin and Scrimba that shows how to code six different binary search algorithms in 10 interactive screencasts
- πΊ A* Pathfinding (E01: algorithm explanation) β’ 12 minute video by Sebastian Lague explaining the A* pathfinding algorithm

## Recursion

- πΊ Recursion: How to FINALLY understand recursion β’ 13 minute video by ThePrimeagen that uses a maze solver as an example
- πΊ Algorithms Explained β minimax and alpha-beta pruning β’ 11 minute video by Sebastian Lague explaining the minimax algorithm and how to use alpha-beta pruning to make it faster
- Recursion for Beginners β’ An introduction to recursion and the Python-specific functionality for recursion β’ Al Sweigart πΊ

## Dynamic Programming

- πΊ Dynamic Programming β’ 10 video playlist by William Fiset

## Optimizing

- going fast is about doing less β’ leedoo demonstrates how to gradually reduce the runtime of an advent of code solution from > 2 mins to < 1 sec πΊ
- Quadratic algorithms are slow (and hashmaps are fast) β’ Julia Evans π

## FizzBuzz

Given a number, *n*, for each integer *i* in the range from 1 to n inclusive, print one value per line as follows:

- If i is a multiple of both 3 and 5, print FizzBuzz
- If i is a multiple of 3 (but not 5), print Fizz
- If i is a multiple of 5 (but not 3), print Buzz
- If i is not a multiple of 3 or 5, print the value of i

```
function fizzBuzz(n: number): void {
for (let i = 1; i <= n; i++) {
let result: number | 'Fizz' | 'Buzz' | 'FizzBuzz' = i
if (i % 15 === 0) {
result = 'FizzBuzz'
} else if (i % 5 === 0) {
result = 'Buzz'
} else if (i % 3 === 0) {
result = 'Fizz'
}
console.log(result)
}
}
```