## Algorithmic Techniques to remember

Algorithmic tips and concepts that can be useful when solving coding problems:

**Understand**the problem: Make sure you understand the problem before you start coding. Ask questions if necessary.- Identify the
**input**and**output**: Figure out what the input to your program is and what the output should be. - Use a
**brute-force**approach first: If you're not sure where to start, try a brute-force approach. This means trying all possible solutions until you find the right one. **Break the problem down**: Divide the problem into smaller sub-problems that are easier to solve.- Use
**data structures**: Use data structures like arrays, linked lists, and hash tables to organize your data. - Optimize for
**time**or**space**: Depending on the problem, you may need to optimize for either time or space complexity. - Use
**recursion**: Recursion can be a powerful tool for solving problems, especially when dealing with nested data structures. - Use
**dynamic programming**: Dynamic programming can be used to solve problems where the solution depends on the solutions to smaller sub-problems. - Use
**memoization**: Memoization can be used to speed up recursive algorithms by caching the results of sub-problems. - Use binary search: Binary search is a fast and efficient algorithm for finding an element in a sorted array.
- Use
**two pointers**: Two pointers can be used to solve problems that involve searching for a pair of elements in an array. - Use a
**sliding window**: A sliding window can be used to solve problems that involve finding a subarray that meets a certain condition. - Use
**backtracking**: Backtracking can be used to solve problems where you need to explore all possible solutions. - Use a priority queue: A priority queue can be used to implement algorithms that require finding the minimum or maximum element in a set of data.
- Use a
**stack or queue**: A stack or queue can be used to implement algorithms that involve processing data in a specific order. - Use
**bit manipulation**: Bit manipulation can be used to perform operations on binary representations of data. - Use
**graph algorithms**: Graph algorithms can be used to solve problems that involve finding the shortest path between two points, or finding connected components in a graph. - Use
**string algorithms**: String algorithms can be used to solve problems that involve searching, matching, or manipulating strings. - Use machine learning: Machine learning can be used to solve problems that involve pattern recognition, classification, or prediction.
- Use
**parallelization**: Parallelization can be used to speed up algorithms by distributing the workload across multiple processors or machines.