## Backtracking

- Print all possible solutions to N Queens problem

- Print all Possible Knight’s Tours in a chessboard

- Find Shortest Path in Maze

- Find Longest Possible Route in a Matrix

- Find path from source to destination in a matrix that satisfies given constraints

- Find total number of unique paths in a maze from source to destination

- Print All Hamiltonian Path present in a graph

- Print all k-colorable configurations of the graph (Vertex coloring of graph)

- Find all Permutations of a given string

- All combinations of elements satisfying given constraints

- Find all binary strings that can be formed from given wildcard pattern

- K-Partition Problem | Printing all Partitions

- Magnet Puzzle

- Find ways to calculate a target from elements of specified array

- Find minimum number possible by doing at-most K swaps

- Determine if a pattern matches with a string or not

## Bit Manipulation

- Bit Hacks – Part 1 (Basic)

- Bit Hacks – Part 2 (Playing with k’th bit)

- Bit Hacks – Part 3 (Playing with rightmost set bit of a number)

- Bit Hacks – Part 4 (Playing with letters of English alphabet)

- Bit Hacks – Part 5 (Find absolute value of an integer without branching)

- Bit Hacks – Part 6 (Random Problems)

- Brian Kernighan’s Algorithm to count set bits in an integer

- Compute parity of a number using lookup table

- Count set bits using lookup table

- Find the minimum or maximum of two integers without using branching

- Multiply 16-bit integers using 8-bit multiplier

- Round up to the next highest power of 2

- Round up to the previous power of 2

- Swap individual bits at given position in an integer

- Check if given number is power of 4 or not

- Reverse Bits of a given Integer

- Find odd occurring element in an array in single traversal

- Find two odd occurring element in an array without using any extra space

- Swap two bits at given position in an integer

- Add binary representation of two integers

- Swap Adjacent Bits of a Number

- Print all distinct Subsets of a given Set

- Perform Division of two numbers without using division operator (/)

- Check if adjacent bits are set in binary representation of a given number

- Conditionally negate a value without branching

- Find two duplicate elements in an limited range array (using XOR)

- Find missing number and duplicate elements in an array

- Check if given number is power of 8 or not

- Circular shift on binary representation of an integer by k positions

- Solve given set of problems without using multiplication or division operators

- Reverse Bits of an integer using lookup table

- Generate binary numbers between 1 to N

- Efficiently implement power function | Recursive and Iterative

- Find square of a number without using multiplication and division operator | 3 methods

- Generate power set of a given set

- Huffman Coding

- Find all odd occurring elements in an array having limited range of elements

## Binary Tree

- Check if two given binary trees are identical or not | Iterative & Recursive

- Calculate height of a binary tree | Iterative & Recursive

- Delete given Binary Tree | Iterative & Recursive

- Inorder Tree Traversal | Iterative & Recursive

- Preorder Tree Traversal | Iterative & Recursive

- Postorder Tree Traversal | Iterative & Recursive

- Level Order Traversal of Binary Tree

- Spiral Order Traversal of Binary Tree

- Reverse Level Order Traversal of Binary Tree

- Print all nodes of a given binary tree in specific order

- Print left view of binary tree

- Print Bottom View of Binary Tree

- Print Top View of Binary Tree

- Find next node in same level for given node in a binary tree

- Check if given binary tree is complete binary tree or not

- Determine if given two nodes are cousins of each other

- Print cousins of given node in a binary tree

- In-place convert given binary tree to its sum tree

- Check if given binary tree is a sum tree or not

- Combinations of words formed by replacing given numbers with corresponding alphabets

- Determine if given binary tree is a subtree of another binary tree or not

- Find diameter of a binary tree

- Check if given binary Tree has symmetric structure or not

- Convert binary tree to its mirror

- Check if binary tree can be converted to another by doing any no. of swaps of left & right child

- Find Lowest Common Ancestor (LCA) of two nodes in a binary tree

- Print all paths from root to leaf nodes in given binary tree

- Find ancestors of given node in a Binary Tree

- Find the distance between given pairs of nodes in a binary tree

- Find Vertical Sum in a given Binary Tree

- Print nodes in vertical order of a given Binary Tree (Vertical Traversal)

- Find the diagonal sum of given binary tree

- Print Diagonal Traversal of Binary Tree

- Print corner nodes of every level in binary tree

- In-place convert convert given Binary Tree to Doubly Linked List

- Sink nodes containing zero to the bottom of the binary tree

- Convert given binary tree to full tree by removing half nodes

- Truncate given binary tree to remove nodes which lie on a path having sum less than K

- Find maximum sum root-to-leaf path in a binary tree

- Check if given binary tree is height balanced or not

- Convert normal binary tree to Left-child right-sibling binary tree

- Determine if given Binary Tree is a BST or not

- Convert a Binary Tree to BST by maintaining its original structure

- Invert given Binary Tree | Recursive and Iterative solution

- Print Right View of a Binary Tree

- Print leaf to root path for every leaf node in a binary tree

- Find maximum width of given binary tree

- Build Binary Tree from given Parent array

- C++ Program to Print Binary Tree Structure

- Find all nodes at given distance from leaf nodes in a binary tree

- Count all subtrees having same value of nodes in a binary tree

- Find Maximum Difference Between a Node and its Descendants in a Binary Tree

- Construct a Binary Tree from Ancestor Matrix

- Calculate height of a binary tree with leaf nodes forming a circular doubly linked list

## BST

- Insertion in BST

- Search given key in BST

- Deletion from BST

- Construct balanced BST from given keys

- Determine if given Binary Tree is a BST or not

- Check if given keys represents same BSTs or not without building the BST

- Find inorder predecessor for given key in a BST

- Find Lowest Common Ancestor (LCA) of two nodes in a Binary Search Tree

- Find K’th smallest and K’th largest element in BST

- Floor and Ceil in a Binary Search Tree

- Find optimal cost to construct binary search tree

- Convert a Binary Tree to BST by maintaining its original structure

- Remove nodes from BST that have keys outside the valid range

- Find a pair with given sum in a BST

- Find inorder successor for given key in a BST

- Replace every element of an array with the least greater element on its right

## Divide & Conquer

- Binary Search

- Find number of rotations in a circularly sorted array

- Search an element in a circular sorted array

- Find first or last occurrence of a given number in a sorted array

- Count occurrences of a number in a sorted array with duplicates

- Find smallest missing element from a sorted array

- Find Floor and Ceil of a number in a sorted array

- Search in a nearly sorted array in O(logn) time

- Find number of 1’s in a sorted binary array

- Find the peak element in an array

- Maximum Sum Subarray using Divide & Conquer

- Find Minimum and Maximum element in an array using minimum comparisons

- Efficiently implement power function | Recursive and Iterative

- Find Missing Term in a Sequence in log(n) time

- Division of Two Numbers using Binary Search Algorithm

- Find Floor and Ceil of a number in a sorted array (Recursive solution)

- Find Minimum and Maximum element in an array by doing minimum comparisons

- Find Frequency of each element in a sorted array containing duplicates

- Ternary Search vs Binary search

- Exponential search

- Interpolation search

- Merge Sort Algorithm

- Iterative Merge Sort Algorithm (Bottom-up Merge Sort)

- Merge Sort Algorithm for Singly Linked List

- Inversion Count of an array

- Quicksort Algorithm

- Iterative Implementation of Quicksort

- Hybrid QuickSort

- Quicksort using Dutch National Flag Algorithm

- Quick Sort using Hoare’s Partitioning scheme

## Dynamic Programming

- Introduction to Dynamic Programming

- Longest Common Subsequence | Introduction & LCS Length

- Longest Common Subsequence | Space optimized version

- Longest Common Subsequence of K-sequences

- Longest Common Subsequence | Finding all LCS

- Longest Common Substring problem

- Longest Palindromic Subsequence using Dynamic Programming

- Longest Repeated Subsequence problem

- Implement Diff Utility

- Shortest Common Supersequence | Introduction & SCS Length

- Shortest Common Supersequence | Finding all SCS

- Shortest Common Supersequence | Using LCS

- Longest Increasing Subsequence using Dynamic Programming

- Longest Bitonic Subsequence

- Increasing Subsequence with Maximum Sum

- The Levenshtein distance (Edit distance) problem

- Find size of largest square sub-matrix of 1’s present in given binary matrix

- Matrix Chain Multiplication

- Find the minimum cost to reach last cell of the matrix from its first cell

- Find longest sequence formed by adjacent numbers in the matrix

- Count number of paths in a matrix with given cost to reach destination cell

- 0-1 Knapsack problem

- Maximize value of the expression

- Partition problem

- Subset sum problem

- Minimum Sum Partition problem

- Find all N-digit binary strings without any consecutive 1’s

- Rod Cutting

- Maximum Product Rod Cutting

- Coin change-making problem (unlimited supply of coins)

- Coin Change Problem – Find total number of ways to get the denomination of coins

- Total possible solutions to linear equation of k variables

- Longest alternating subsequence

- Count number of times a pattern appears in given string as a subsequence

- Collect maximum points in a matrix by satisfying given constraints

- Count total possible combinations of N-digit numbers in a mobile keypad

- Find optimal cost to construct binary search tree

- Word Break Problem

- Word Break Problem | Using Trie Data Structure

- Determine Minimal Adjustment Cost of an Array

- Check if a string is K-Palindrome or not

- Wildcard Pattern Matching

- Find probability that a person is alive after taking N steps on the island

- Calculate sum of all elements in a sub-matrix in constant time

- Find maximum sum K x K sub-matrix in a given M x N matrix

- Find maximum sum submatrix present in a given matrix

- Find maximum sum of subsequence with no adjacent elements

- Maximum subarray problem (Kadane’s algorithm)

- Single-Source Shortest Paths – Bellman Ford Algorithm

- All-Pairs Shortest Paths – Floyd Warshall Algorithm

- Longest Decreasing Subsequence Problem

- Pots of Gold Game using Dynamic Programming

- Find minimum cuts needed for palindromic partition of a string

- Maximum Length Snake Sequence

- 3 Partition Problem

- Calculate size of the largest plus of 1’s in binary matrix

- Check if given string is interleaving of two other given strings

- Longest Increasing Subsequence using LCS

- Determine negative-weight cycle in a graph

## Graphs

- Terminology and Representations of Graphs

- Graph Implementation using STL

- Graph Implementation in C++ without using STL

- Implement Graph Data Structure in C

- Graph Implementation in Java using Collections

- Breadth First Search (BFS) | Iterative & Recursive Implementation

- Depth First Search (DFS) | Iterative & Recursive Implementation

- Arrival and Departure Time of Vertices in DFS

- Types of edges involved in DFS and relation between them

- Bipartite Graph

- Determine if a given graph is Bipartite Graph using DFS

- Minimum number of throws required to win Snake and Ladder game

- Topological Sorting in a DAG

- Kahn’s Topological Sort Algorithm

- Transitive Closure of a Graph

- Check if an undirected graph contains cycle or not

- Total paths in given digraph from given source to destination having exactly m edges

- Determine if an undirected graph is a Tree (Acyclic Connected Graph)

- 2-Edge Connectivity in the graph

- 2-Vertex Connectivity in the graph

- Check if given digraph is a DAG (Directed Acyclic Graph) or not

- Disjoint-Set Data Structure (Union-Find Algorithm)

- Chess Knight Problem – Find Shortest path from source to destination

- Check if given Graph is Strongly Connected or not

- Check if given Graph is Strongly Connected or not using one DFS Traversal

- Union-Find Algorithm for Cycle Detection in undirected graph

- Kruskal’s Algorithm for finding Minimum Spanning Tree

- Single-Source Shortest Paths – Dijkstra’s Algorithm

- Single-Source Shortest Paths – Bellman Ford Algorithm

- All-Pairs Shortest Paths – Floyd Warshall Algorithm

- Find Cost of Shortest Path in DAG using one pass of Bellman-Ford

- Least Cost Path in Weighted Digraph using BFS

- Find maximum cost path in graph from given source to destination

- Determine negative-weight cycle in a graph

- Print all k-colorable configurations of the graph (Vertex coloring of graph)

- Print All Hamiltonian Path present in a graph

- Greedy coloring of graph

## Heap

- Introduction to Priority Queues using Binary Heaps

- Min Heap and Max Heap Implementation in C++

- Min Heap and Max Heap Implementation in Java

- Heap Sort

- Check if given array represents min heap or not

- Convert Max Heap to Min Heap in linear time

- Find K’th largest element in an array

- Sort a K-Sorted Array

- Merge M sorted lists of variable length

- Find K’th smallest element in an array

- Find smallest range with at-least one element from each of the given lists

- Merge M sorted lists each containing N elements

- External merge sort

- Huffman Coding

- Find first k maximum occurring words in given set of strings

- Find first k non-repeating characters in a string in single traversal

## Linked List

- Introduction to Linked Lists

- Linked List Implementation | Part 1

- Linked List Implementation | Part 2

- Static Linked List in C

- Clone given Linked List

- Delete Linked List

- Pop operation in linked list

- Insert given node into the correct sorted position in the given sorted linked list

- Given a linked list, change it to be in sorted order

- Split the nodes of the given linked list into front and back halves

- Remove duplicates from a sorted linked list

- Move front node of the given list to the front of the another list

- Move even nodes to the end of the list in reverse order

- Split given linked list into two lists where each list containing alternating elements from it

- Construct a linked list by merging alternate nodes of two given lists

- Merge given sorted linked lists into one

- Merge Sort Algorithm for Singly Linked List

- Intersection of two given sorted linked lists

- Reverse linked list | Part 1 (Iterative Solution)

- Reverse linked list | Part 2 (Recursive Solution)

- Reverse every group of k nodes in given linked list

- Find K’th node from the end in a linked list

- Merge alternate nodes of two linked lists into the first list

- Merge two sorted linked lists from their end

- Delete every N nodes in a linked list after skipping M nodes

- Rearrange linked list in specific manner in linear time

- Check if linked list is palindrome or not

- Move last node to front in a given Linked List

- Rearrange the linked list in specific manner

- Detect Cycle in a linked list (Floyd’s Cycle Detection Algorithm)

- Sort linked list containing 0’s, 1’s and 2’s

- Stack Implementation using Linked List

- Queue Implementation using Linked List

- Remove duplicates from a linked list

- Rearrange the linked list so that it has alternating high, low values

- Rearrange a Linked List by Separating Odd Nodes from the Even Ones

- Calculate height of a binary tree with leaf nodes forming a circular doubly linked list

## Matrix

- Print Matrix in Spiral Order

- Create Spiral Matrix from given array

- Shift all matrix elements by 1 in Spiral Order

- Find Shortest path from source to destination in a matrix that satisfies given constraints

- Change all elements of row i and column j in a matrix to 0 if cell (i, j) has value 0

- Print diagonal elements of the matrix having positive slope

- Find all paths from first cell to last cell of a matrix

- Replace all occurrences of 0 that are not surrounded by 1 in a binary matrix

- In-place rotate the matrix by 90 degrees in clock-wise direction

- Count negative elements present in sorted matrix in linear time

- Report all occurrences of an element in row wise and column wise sorted matrix in linear time

- Calculate sum of all elements in a sub-matrix in constant time

- Find maximum sum K x K sub-matrix in a given M x N matrix

- Find maximum sum submatrix present in a given matrix

- Find probability that a person is alive after taking N steps on the island

- Count the number of islands

- Flood fill Algorithm

- Find shortest safe route in a field with sensors present

- Find all occurrences of given string in a character matrix

- Shortest path in a Maze | Lee algorithm

- Check if given matrix is Toeplitz matrix or not

- In-place rotate the matrix by 180 degrees

- Fill Binary Matrix with Alternating Rectangles of 0 and 1

- Find all common elements present in every row of given matrix

- Construct a Binary Tree from Ancestor Matrix

- Find common elements present in all rows of a matrix

- Travelling Salesman Problem using Branch and Bound

- Collect maximum points in a matrix by satisfying given constraints

- Count number of paths in a matrix with given cost to reach destination cell

- Find longest sequence formed by adjacent numbers in the matrix

- Find the minimum cost to reach last cell of the matrix from its first cell

- Matrix Chain Multiplication

- Find size of largest square sub-matrix of 1’s present in given binary matrix

- Chess Knight Problem – Find Shortest path from source to destination

- Find Duplicate rows in a binary matrix

- Print all possible solutions to N Queens problem

- Print all Possible Knight’s Tours in a chessboard

- Find Shortest Path in Maze

- Find Longest Possible Route in a Matrix

- Calculate size of the largest plus of 1’s in binary matrix

- Find the maximum value of M[c][d] – M[a][b] over all choices of indexes

- Find shortest distance of every cell from landmine in a Maze

- Find shortest route in a device to construct the given string

## Queue

- Queue Implementation

- Queue Implementation using Linked List

- Chess Knight Problem – Find Shortest path from source to destination

- Shortest path in a Maze | Lee algorithm

- Find shortest safe route in a field with sensors present

- Flood fill Algorithm

- Count the number of islands

- Find Shortest path from source to destination in a matrix that satisfies given constraints

- Generate binary numbers between 1 to N

- Calculate height of a binary tree | Iterative & Recursive

- Delete given Binary Tree | Iterative & Recursive

- Level Order Traversal of Binary Tree

- Spiral Order Traversal of Binary Tree

- Reverse Level Order Traversal of Binary Tree

- Print all nodes of a given binary tree in specific order

- Print left view of binary tree

- Find next node in same level for given node in a binary tree

- Check if given binary tree is complete binary tree or not

- Print Diagonal Traversal of Binary Tree

- Print corner nodes of every level in binary tree

- Breadth First Search (BFS) | Iterative & Recursive Implementation

- Minimum number of throws required to win Snake and Ladder game

- Check if an undirected graph contains cycle or not

- Invert given Binary Tree | Recursive and Iterative solution

- Find maximum cost path in graph from given source to destination

- Find shortest distance of every cell from landmine in a Maze

## Sorting

- Insertion sort | Iterative & Recursive

- Selection sort | Iterative & Recursive

- Bubble sort | Iterative & Recursive

- Merge Sort Algorithm

- Iterative Merge Sort Algorithm (Bottom-up Merge Sort)

- Quicksort Algorithm

- Iterative Implementation of Quicksort

- Hybrid QuickSort

- Quicksort using Dutch National Flag Algorithm

- Quick Sort using Hoare’s Partitioning scheme

- External merge sort

- Counting Sort Algorithm

- Custom Sort | Sort elements by their frequency and Index

- Custom Sort | Sort elements of the array by order of elements defined by the second array

- Inversion Count of an array

- Segregate positive and negative integers in linear time

- Efficiently Sort an Array with many Duplicated Values

- Find the smallest window in array sorting which will make the entire array sorted

- Find largest number possible from set of given numbers

- Move all zeros present in the array to the end

- Sort binary array in linear time

- Sort linked list containing 0’s, 1’s and 2’s

- Merge Sort Algorithm for Singly Linked List

- Group anagrams together from given list of words

- Activity Selection Problem

- Lexicographic sorting of given set of keys

- Heap Sort

- Merge M sorted lists of variable length

- Merge M sorted lists each containing N elements

- Find all palindromic permutations of a string

- Find all lexicographically next permutations of a string sorted in ascending order

- Merge two sorted linked lists from their end

- Sort an array containing 0’s, 1’s and 2’s (Dutch national flag problem)

- Find pair with given sum in the array

- Inplace merge two sorted arrays

- Merge two arrays by satisfying given constraints

- Find maximum product of two integers in an array

- Find all distinct combinations of given length

- Find all distinct combinations of given length with repetition allowed

- Merging Overlapping Intervals

- Print all quadruplets with given sum | 4-sum problem extended

- 4 sum problem | Quadruplets with given sum

- Find two numbers with maximum sum formed by array digits

- Find a Triplet having Maximum Product in an Array

- Find Minimum Product among all Combinations of Triplets in an Array

- Find all distinct combinations of given length – Part 2

- Find the surpasser count for each element of an array

## Stack

- Stack Implementation

- Stack Implementation using Linked List

- Check if given expression is balanced expression or not

- Find duplicate parenthesis in an expression

- Evaluate given postfix expression

- Decode the given sequence to construct minimum number without repeated digits

- Inorder Tree Traversal | Iterative & Recursive

- Preorder Tree Traversal | Iterative & Recursive

- Postorder Tree Traversal | Iterative & Recursive

- Find ancestors of given node in a Binary Tree

- Check if two given binary trees are identical or not | Iterative & Recursive

- Reverse given text without reversing the individual words

- Find all binary strings that can be formed from given wildcard pattern

- Iterative Implementation of Quicksort

- Depth First Search (DFS) | Iterative & Recursive Implementation

- Invert given Binary Tree | Recursive and Iterative solution

- Print leaf to root path for every leaf node in a binary tree

## String

- Check if given string is a rotated palindrome or not

- Longest Palindromic Substring (Non-DP Space Optimized Solution)

- Check if repeated subsequence is present in the string or not

- Check if strings can be derived from each other by circularly rotating them

- Check if given set of moves is circular or not

- Convert given number into corresponding excel column name

- Determine if two strings are anagram or not

- Find all binary strings that can be formed from given wildcard pattern

- Find all interleavings of given strings

- Isomorphic Strings

- Find all possible palindromic substrings in a string

- Find all possible combinations of words formed from mobile keypad

- Find all possible combinations by replacing given digits with characters of the corresponding list

- Find all words from given list that follows same order of characters as given pattern

- Find first k non-repeating characters in a string in single traversal

- Group anagrams together from given list of words

- Introduction to Pattern Matching

- Inplace remove all occurrences of ‘AB’ and ‘C’ from the string

- Longest even length palidromic sum substring

- Print string in zig-zag form in k rows

- Reverse given text without reversing the individual words

- Run Length Encoding (RLE) data compression algorithm

- Validate an IP address

- Find the longest substring of given string containing k distinct characters

- Find all palindromic permutations of a string

- Find all substrings of a string that are permutation of a given string

- Find the longest substring of given string containing all distinct characters

- Find all Permutations of a given string

- Iterative Approach to find Permutations of a String in C++ and Java

- Generate all Permutations of a String in Java | Recursive & Iterative

- Find all lexicographically next permutations of a string sorted in ascending order

- Find Lexicographically minimal string rotation

- Find all strings of given length containing balanced parentheses

- Find all N-digit strictly increasing numbers (Bottom-Up and Top-Down Approach)

- Find all N-digit binary numbers having more 1’s than 0’s for any prefix

- Find all N-digit numbers with given sum of digits

- Find all N-digit binary numbers with k-bits set where k ranges from 1 to N

- Generate binary numbers between 1 to N

- Find all combinations of non-overlapping substrings of a string

- Check if given sentence is syntactically correct or not

- Calculate rank of given string among all its lexicographically sorted permutations

- Find all Lexicographic Permutations of a String

- Find all N-digit binary numbers with equal sum of bits in its two halves

- Check if given string is interleaving of two other given strings

- Difference between Subarray, Subsequence and Subset

- std::next_permutation | Overview & Implementation in C++

- std::prev_permutation | Overview & Implementation in C++

- Implementation of KMP Algorithm in C, C++ and Java

- Reverse String without using Recursion

- Reverse given string using Recursion

- Reverse a String in Java in 10 different ways

- Determine if a given string is palindrome or not

- In-place remove all adjacent duplicates from the given string

- Find the minimum number of inversions needed to make the given expression balanced

- Replace all non-overlapping occurrences of the pattern

- Construct the longest palindrome by shuffling or deleting characters from a string

- Determine if characters of a String follows a specified order or not

- Print all combinations of phrases that can be formed by picking words from each of the given lists

- Remove all extra spaces from a string

- Break a string into all possible combinations of non-overlapping substrings

- Remove adjacent duplicate characters from a string

- Combinations of words formed by replacing given numbers with corresponding alphabets

- Word Break Problem

- Wildcard Pattern Matching

- Count number of times a pattern appears in given string as a subsequence

- The Levenshtein distance (Edit distance) problem

- Longest Common Subsequence | Introduction & LCS Length

- Longest Common Subsequence | Space optimized version

- Longest Common Subsequence of K-sequences

- Longest Common Subsequence | Finding all LCS

- Longest Repeated Subsequence problem

- Longest Palindromic Subsequence using Dynamic Programming

- Longest Common Substring problem

- Shortest Common Supersequence | Introduction & SCS Length

- Shortest Common Supersequence | Finding all SCS

- Shortest Common Supersequence | Using LCS

- Implement Diff Utility

- Word Break Problem | Using Trie Data Structure

- Find minimum cuts needed for palindromic partition of a string

- Check if a string is K-Palindrome or not

- Find shortest route in a device to construct the given string

- Find minimum number possible by doing at-most K swaps

- Determine if a pattern matches with a string or not

## Trie

- Trie Implementation | Insert, Search and Delete

- Memory efficient Trie Implementation using Map | Insert, Search and Delete

- C++ Implementation of Trie Data Structure

- Longest Common Prefix in given set of strings (using Trie)

- Lexicographic sorting of given set of keys

- Find maximum occurring word in given set of strings

- Find first k maximum occurring words in given set of strings

- Find Duplicate rows in a binary matrix

- Word Break Problem | Using Trie Data Structure

## Array

- Find pair with given sum in the array

- Check if subarray with 0 sum is exists or not

- Print all sub-arrays with 0 sum

- Sort binary array in linear time

- Find a duplicate element in a limited range array

- Find largest sub-array formed by consecutive integers

- Find maximum length sub-array having given sum

- Find maximum length sub-array having equal number of 0’s and 1’s

- Sort an array containing 0’s, 1’s and 2’s (Dutch national flag problem)

- Inplace merge two sorted arrays

- Merge two arrays by satisfying given constraints

- Find index of 0 to replaced to get maximum length sequence of continuous ones

- Find maximum product of two integers in an array

- Shuffle a given array of elements (Fisher–Yates shuffle)

- Rearrange the array with alternate high and low elements

- Find equilibrium index of an array

- Find majority element in an array (Boyer–Moore majority vote algorithm)

- Move all zeros present in the array to the end

- Replace each element of array with product of every other element without using / operator

- Find Longest Bitonic Subarray in an array

- Find maximum difference between two elements in the array by satisfying given constraints

- Maximum subarray problem (Kadane’s algorithm)

- Print continuous subarray with maximum sum

- Maximum Sum Circular Subarray

- Find all distinct combinations of given length

- Find all distinct combinations of given length with repetition allowed

- Find maximum sequence of continuous 1’s formed by replacing at-most k zeroes by ones

- Find minimum sum subarray of given size k

- Find subarray having given sum in given array of integers

- Find the length of smallest subarray whose sum of elements is greater than the given number

- Find largest number possible from set of given numbers

- Find the smallest window in array sorting which will make the entire array sorted

- Find maximum sum path involving elements of given arrays

- Maximum profit earned by buying and selling shares any number of times

- Trapping Rain Water within given set of bars

- Longest Increasing Subsequence

- Longest Decreasing Subsequence Problem

- Find maximum product subarray in a given array

- Find maximum sum of subsequence with no adjacent elements

- Find minimum platforms needed in the station so to avoid any delay in arrival of any train

- Decode the array constructed from another array

- Sort an array using one swap

- Find Triplet with given sum in an array

- Length of longest continuous sequence with same sum in given binary arrays

- Rearrange array such that A[A[i]] is set to i for every element A[i]

- Reverse every consecutive m elements of the given subarray

- Maximum Product Subset Problem

- Find pairs with given difference k in the array

- Find pairs with given difference k in the array | Constant space solution

- 4 sum problem | Quadruplets with given sum

- Print all quadruplets with given sum | 4-sum problem extended

- Find odd occurring element in an array in single traversal

- Find two odd occurring element in an array without using any extra space

- Quickselect Algorithm

- Print all Triplets that forms Arithmetic Progression

- Print all triplets that forms Geometric Progression

- Print all combination of numbers from 1 to n having sum n

- Replace each element of the array by its corresponding rank in the array

- Print all Triplets in an array with sum less than or equal to given number

- Group elements of an array based on their first occurrence

- Find minimum difference between index of two given elements present in the array

- Find maximum absolute difference between sum of two non-overlapping sub-arrays

- Find all Symmetric Pairs in an Array of Pairs

- Partition an array into two sub-arrays with the same sum

- Find count of distinct elements in every sub-array of size k

- Find two numbers with maximum sum formed by array digits

- Print all sub-arrays of an array having distinct elements

- Find a Triplet having Maximum Product in an Array

- Find ways to calculate a target from elements of specified array

- Find Minimum Index of Repeating Element in an Array

- Generate Random Input from an Array according to given Probabilities

- Find pair in an array having minimum absolute sum

- Find Index of Maximum Occurring Element with Equal Probability

- Check if an Array is Formed by Consecutive Integers

- Find two non-overlapping pairs having same sum in an array

- Find Minimum Product among all Combinations of Triplets in an Array

- Replace every element of an array with the least greater element on its right

- Find all odd occurring elements in an array having limited range of elements

- Add elements of two arrays into a new array

- Count the distinct absolute values in the sorted array

- Print all combinations of positive integers in increasing order that sum to a given number

- Find all distinct combinations of given length – Part 2

- Find subarrays with given sum in an array

- Find the surpasser count for each element of an array

- Find maximum length sequence of continuous ones (Using Sliding Window)

- Find maximum length sequence of continuous ones

- Merging Overlapping Intervals

- Activity Selection Problem

- Job Sequencing Problem with Deadlines

- Introduction to Priority Queues using Binary Heaps

- Min Heap and Max Heap Implementation in C++

- Min Heap and Max Heap Implementation in Java

- Heap Sort (Out-of-place and In-place implementation in C++ and C)

- Check if given array represents min heap or not

- Convert Max Heap to Min Heap in linear time

- Find K’th largest element in an array

- Sort a K-Sorted Array

- Merge M sorted lists of variable length

- Find K’th smallest element in an array

- Find smallest range with at-least one element from each of the given lists

- Merge M sorted lists each containing N elements

- Insertion sort | Iterative & Recursive

- Selection sort | Iterative & Recursive

- Bubble sort | Iterative & Recursive

- Merge Sort

- Quicksort

- Iterative Implementation of Quicksort

- Hybrid QuickSort

- Quicksort using Dutch National Flag Algorithm

- Quick Sort using Hoare’s Partitioning scheme

- External merge sort

- Custom Sort | Sort elements by their frequency and Index

- Custom Sort | Sort elements of the array by order of elements defined by the second array

- Inversion Count of an array

- Segregate positive and negative integers in linear time

- Binary Search

- Ternary Search vs Binary search

- Interpolation search

- Exponential search

- Find number of rotations in a circularly sorted array

- Search an element in a circular sorted array

- Find first or last occurrence of a given number in a sorted array

- Count occurrences of a number in a sorted array with duplicates

- Find smallest missing element from a sorted array

- Find Floor and Ceil of a number in a sorted array

- Search in a nearly sorted array in O(logn) time

- Find number of 1’s in a sorted binary array

- Find the peak element in an array

- Maximum Sum Subarray using Divide & Conquer

- Find Minimum and Maximum element in an array using minimum comparisons

- Matrix Chain Multiplication

- 0-1 Knapsack problem

- Maximize value of the expression

- Partition problem

- Subset sum problem

- Minimum Sum Partition problem

- Rod Cutting

- Coin change-making problem (unlimited supply of coins)

- Coin Change Problem (Total number of ways to get the denomination of coins)

- Longest alternating subsequence

- Combinations of words formed by replacing given numbers with corresponding alphabets

- Decode the given sequence to construct minimum number without repeated digits

- All combinations of elements satisfying given constraints

- Find Missing Term in a Sequence in log(n) time

- Print all distinct Subsets of a given Set

- Find Floor and Ceil of a number in a sorted array (Recursive solution)

- Set both elements of a binary array to 0 in single line

- K-Partition Problem | Printing all Partitions

- 3 Partition Problem

- 3-partition problem extended | Print all partitions

- Iterative Merge Sort Algorithm (Bottom-up Merge Sort)

- Find two duplicate elements in an limited range array (using XOR)

- Find missing number and duplicate elements in an array

- Find Minimum and Maximum element in an array by doing minimum comparisons

- Find Frequency of each element in a sorted array containing duplicates

- Difference between Subarray, Subsequence and Subset

## Greedy

## Puzzles

- Clock angle problem – Find angle between hour and minute hand

- Add two numbers without using addition operator | 4 methods

- Generate power set of a given set

- Implement power function without using multiplication and division operators

- Print all numbers between 1 to N without using semicolon

- Swap two numbers without using third variable | 5 methods

- Determine the if condition to print specific output

- Find maximum, minimum of three numbers without using conditional statement and ternary operator | 4 methods

- Find numbers represented as sum of two cubes for two different pairs

- Print “Hello World” with empty main() function | 3 methods

- Tower of Hanoi Problem

- Print all numbers between 1 to N without using any loop | 4 methods

- Print a semicolon without using semicolon anywhere in the program

- Multiply two numbers without using multiplication operator or loops

- Find square of a number without using multiplication and division operator | 3 methods

- Find if a number is even or odd without using any conditional statement

- Set both elements of a binary array to 0 in single line

- Find minimum number without using conditional statement or ternary operator

- Perform Division of two numbers without using division operator (/)

- Generate 0 and 1 with 75% and 25% Probability

- Generate Desired Random Numbers With Equal Probability

- Return 0, 1 and 2 with equal Probability using the specified function

- Generate Fair Results from a Biased Coin

- Generate numbers from 1 to 7 with equal probability using specified function

- Implement Ternary Operator Without Using Conditional Expressions

- Determine if two integers are equal without using comparison and arithmetic operators

- Return 0 and 1 with equal Probability using the specified function

- Generate Random Input from an Array according to given Probabilities

- Generate Fair Results from a Biased Coin

- Magnet Puzzle

## STL

## Recursion

## Hashing

**Other links:**

- Top Algorithms/Data Structures/Concepts every computer science student should know
- Top 30 Data Structures Problems for Technical Interview Preparation
- Best online courses for Data Structures And Algorithms

**Thank you all being with us. 🙂**

## Leave a Reply

I personally found reading this very helpful. Read the problem, come up with a solution, compare your solution, read on to see if there is an optimization, think about the optimization, implement it, then go back and read about their optimized solution. Some problems have 4-5 stages of optimization which I found were good to read and simulates an interview better – building in small steps and increasingly getting harder.

Instead of “bookmarking and forgetting,” I’m making this my home page so I can do one of these a day. My goal will be to use this to both practice my skills, and learn new languages.

Thanks for compiling the list!

Thank you for this! I think I’m going to make this my home screen as well; or set an alert to visit the site at least once a day. I’ve gone through a few technical interviews. This will help me prep, get better at programming and feel more confident overall.

Bible for interview preparation (y)

Thank you so much this. This is truly an amazing site; something that I will use quite frequently in the months to come with my studies.

I wanted to thank the author(s) of the DP articles! They have been one of the best resources I have found online. Keep up the great work!

I just wanted to leave a message of thanking you for such a great material. I want to prepare for technical interviews and I find your website to be very helpful especially the solutions provided with the problems are really good.

This is surprisingly nice list. All problems I have encountered so far were very challenging..

That’s a great list worthy of study in any context.

Thanks I was looking for more of these challenges/questions.

I flunked out of a half dozen first round technical interviews. Amazon, Microsoft, Google, a few startups, Facebook, etc. My mind would always blank out when it came to solving problems.

As someone who recently finished a data structures class, I wish I knew about this site before today!

I looked at the first problem: finding pairs in a set whose .sum is a given number. I was surprised how thorough it is described, with a naive solution, a better solution using sorting, a better solution still using hashing, a finally a link to a page describing finding such pairs in a binary tree.

Even if it’s not preparing for interviews, this is pretty interesting stuff.

Bookmarked this for when I actually know algorithms and data structures.

Awesome list. Now, I have to find a way to work through them.

I really like the way this page is organized…

nice collection (y)

While obtaining the correct solution is optimal, I believe these interview questions are supposed to gauge a person’s ability to think out loud and ability to flesh out a decent plan of attack. If you start writing code immediately without asking any questions then it’s not going to end well.

This is great, thanks ^

This is awesome. Many thanks.

Just found out yesterday that I’ll be having my first interview for a Google Software Engineering position in about a month. This is truly going to be invaluable, thank you!

Is it normal that I won’t be able to answer most of these questions myself ?

Holy crap, this Looks awesome!!! I’m still at the point of learning stuff myself. Definitely using this to study/learn.

This is super interesting list of questions and the best possible solutions discussed in terms of time and space efficiency (from brute force solution to the most optimum).

very useful, thkx~

I’ve given technical tests to people in interviews before, and the problem has always been the same one, with a bit of tweaking here and there. The test lasts 90 minutes, using a laptop with an IDE.

To tell the truth I hate doing it, mainly because when I got asked to give the test, I spent some time tackling the problem myself just so I could get an idea of what was expected – I genuinely didn’t think I would have passed the new technical test for the company I was employed at!

I think that biases the interview somewhat as you sit there judging someone on a problem you’ve had the luxury of solving yourself in a more relaxed environment.

Maybe a better approach would be both interviewer and interviewee are given a problem from an independent third party. That way both of you have to work through it together, although I’m not sure of the practical realities of that.

Thank you for the solutions. The optimization part is being really helpful.

Although sometimes it may consume extra space and not looking fancy,

it delights me “wow, this guy knows how to use the code as a weapon.”

Can you provide the pdf file for the solution and problems ?

That would be nice, but think about the website, it will reduce the number of visits, that would be real bad.

Hi TechieDelight!

I would like to thank and appreciate the wonderful effort! Kudos.

There is a big issue you must address: the problem repository is awesome but there is no way one can check if his/her code is correct since you do not have an integrated judge where one can submit and see the verdict as AC/WA.

Wonderful web site. I am sending it to a few buddies. Thanks to your sweat!