This repository contains everything you need to become proficient in Data Structures and Algorithms
Start here : Day 1 of 30 days of Data Structures and Algorithms and System Design Simplified : DSA and System Design made Easy
Why Complexity Analysis is important?
Important concepts — Space and Time
Tips and Techniques- How to determine and differentiate Complexities
1.Arrays
What and Why Array (in two sentences)?
Important Patterns and Techniques in Array Questions
Only Most Important Questions with Solutions
Tips and Techniques to solve Array Questions Fast.
What and Why Hashing(in two sentences)?
Important Patterns and Techniques in Hashing Questions
Only Most Important Questions with Solutions
Tips and Techniques to solve Hashing Questions Fast.
Important Patterns and Techniques in Sliding Window Questions
Only Most Important Questions with Solutions
Tips and Techniques to solve Sliding Window Questions Fast.
What and Why Strings(in two sentences)?
Important Patterns and Techniques in String Questions
Only Most Important Questions with Solutions
Tips and Techniques to solve Strings Questions Fast .
What and Why Stack(in two sentences) ?
Important Patterns and Techniques in Stack Questions
Most Important Questions with Solutions
Tips and Techniques to solve Stack Questions Fast .
What and Why Queue(in two sentences) ?
Important Patterns and Techniques in Queue Questions
Most Important Questions with Solutions
Tips and Techniques to solve Queue Questions Fast .
What and Why Binary Search(in two sentences)?
Important Patterns and Techniques in Binary Search Questions
Most Important Questions with Solutions
Tips and Techniques to solve Binary Search Questions Fast.
What and Why Linked List (in two sentences)?
Important Patterns and Techniques in Linked List Questions
Most Important Questions with Solutions
Tips and Techniques to solve Linked List Questions Fast.
What and Why Divide and Conquer technique(in 2–3 sentences)?
How does Divide and Conquer technique work?
Important Patterns and Techniques in Divide and Conquer technique Questions
Most Important Questions with Solutions
Tips and Techniques to solve Divide and Conquer Questions Fast.
What and Why Recursion(in 2–3 sentences)?
Important Patterns and Techniques in Recursion Questions
Most Important Questions with Solutions
Tips and Techniques to solve Recursion Questions Fast.
What and Why Two pointer technique(in 2–3 sentences)?
How does Two pointer technique work?
Important Patterns and Techniques in Two pointer technique Questions
Most Important Questions with Solutions
Tips and Techniques to solve Two pointer technique Questions Fast.
What and Why Trees(in two sentences)?
Important Patterns and Techniques in Tree Questions
Most Important Questions with Solutions
Tips and Techniques to solve Tree Questions Fast.
10.Tries
What and Why Tries(in two sentences)?
Important Patterns and Techniques in Trie Questions
Most Important Questions with Solutions
Complexity Analysis
Tips and Techniques to solve Trie Questions Fast.
What and Why Heap/Priority Queue(in two sentences) ?
Important Patterns and Techniques in Heap/Priority Queue Questions)
Most Important Questions with Solutions
Tips and Techniques to solve heap/priority Queue Questions Fast.
What and Why Backtracking(in 2–3 sentences)?
Important Patterns and Techniques in Backtracking Questions
Most Important Questions with Solutions
Tips and Techniques to solve Backtracking Questions Fast .
What and Why Graphs(in 2–3 sentences)?
Important Patterns and Techniques in Graph Questions
Most Important Questions with Solutions
Tips and Techniques to solve Graphs Questions Fast.
14.Advanced Graphs
Important Patterns and Techniques in Advanced Graph Questions
Most Important Questions with Solutions
Complexity Analysis
Tips and Techniques to solve Advanced Graph Questions Fast.
What and Why Dynamic Programming(in 2–3 sentences)?
Important Patterns and Techniques in 1-D Dynamic Programming Questions
Most Important Questions with Solutions
Tips and Techniques to solve 1-D Dynamic Programming Questions Fast.
Important Patterns and Techniques in 2-D DP Questions
Most Important Questions with Solutions
Tips and Techniques to solve 2-D DP Questions Fast .
What and Why Greedy(in 2–3 sentences)?
Important Patterns and Techniques in Greedy Questions
Most Important Questions with Solutions
Tips and Techniques to solve Greedy Questions Fast.
Important Patterns and Techniques in Intervals Questions
Most Important Questions with Solutions
Tips and Techniques to solve Intervals Questions Fast.
- Math and Geometry
Important Patterns and Techniques in Math and Geometry Questions
Most Important Questions with Solutions
Complexity Analysis
Tips and Techniques to solve Math and Geometry Questions Fast.
- Bit Manipulation
What and Why Bit Manipulation(in 2–3 sentences)?
Important Patterns and Techniques in Bit Manipulation Questions
Most Important Questions with Solutions
Complexity Analysis
Tips and Techniques to solve Bit Manipulation Questions Fast .
- Topological Sort
What and Why Topological Sort(in 2–3 sentences)?
Important Patterns and Techniques in Topological Sort Questions
Most Important Questions with Solutions
Complexity Analysis
Tips and Techniques to solve Topological Sort Questions Fast.
- Dijkstra
What and Why Dijkstra(in 2–3 sentences)?
Important Patterns and Techniques in Dijktra Questions
Most Important Questions with Solutions
Complexity Analysis
Tips and Techniques to solve Dijkstra Questions Fast.
- Prim's/MST
What and Why Prim's/MST(in 2–3 sentences)?
Important Patterns and Techniques in Prim's/MST Questions
Most Important Questions with Solutions
Complexity Analysis
Tips and Techniques to solve Prim's/MST Questions Fast.
- Most Famous Algorithms ( that you should know)
What and Why each algorithm(in 2–3 sentences)?
Important Patterns and Techniques in Algorithm Questions
Most Important Questions with Solutions
Complexity Analysis
Tips and Techniques to solve Algorithms Questions Fast.
System Design Most Important Terms
Complete System Design Case Studies
How to solve any System Design Question ( approach that you should take)
ML System Design Case Studies Series
For Data Structures and Algorithms, start here : Day 1 of 30 days of Data Structures and Algorithms and System Design Simplified : DSA and System Design made Easy
Topics you should know in System Design --
Part 1 of System Design Made Easy Series
In the part 1, we covered what and why of System Design and the important topics that you should know. System Design is mostly an open ended concept and most of the questions can be answered in different degrees and aptitudes. In layman’s language, system design is about —
Architecture + Data + Applications
Part 2 of System Design Made Easy Series
In the part 2, we covered —
-
System design basics
-
Horizontal and Vertical Scaling with an example
In technical words, scalability is a the technique/process of adding/removing infrastructure/resources required by applications to better serve/accommodate increased/decreased demand/growth. We also covered the tradeoffs of horizontal and vertical scaling.
Part 3 of System Design Made Easy Series
In the part 3, we covered system design’s most important concepts —
-
Load Balancing
-
Message Queues
Load balancing is a technique of distributing tasks over a set of servers/machines to improve the performance, throughput, high availability, redundancy and reliability of the system. Not just it enables horizontal scaling but also dynamic resizing/scaling.
Message queues are nothing bit temporary buffers placed between users/applications and servers to store the message requests and process them in FIFO order asynchronously until the requests/messages are delivered to the desired server.
We also covered the tradeoffs of the different techniques.
Part 4 of System Design Made Easy Series
In the part 4, we covered
-
High level design and Low level design
-
Monolithic and microservices architecture and which one to choose and when?
-
Consistent Hashing
High level Design (HLD) describes the overall architecture of the application and covers functionality of each module of the system very briefly. LLD details the functional logic of the each module in the system.
Monolithic architecture — consists of single code base with multiple modules and it’s easier and faster to deploy. Microservices architecture — consists of individual service units with each service being responsible for exactly one functionality. It’s relatively complex and time taking to deploy.
Consistent hashing is a technique to divide keys/data between multiple servers/machines using a hash function ( key — value).
Part 5 of System Design Made Easy Series
In the part 5, we covered —
-
Caching
-
Indexing
-
Proxies
Caching is a technique which is based on the principal of locality — stores the copies of most frequently used/accessed data in a small and faster memory to improve Data retrieval times, Compute costs, User Experience and Throughput.
Indexing helps in Improving the speed of data access/retrieval, Reducing the number of expensive I/O operations, Providing better organization and management of multilevel data records.
Proxies play an important role of coordinating user requests, handling concurrent requests, filtering user request, transforming user requests by adding an additional layer of encryption or header information or compression information and then forwarding the user request to the server.
Part 6 of System Design Made Easy Series
In the part 6, we covered —
-
Networking
-
How Browsers work
-
Content Network Delivery ( CDN)
Networking is nothing but interconnected devices that can exchange data-messages and share resources amongst themselves/with outside world based in the system protocols/rules, technologies and algorithms that govern these devices inner workings.
Browsers are used to present the website/resource you would like to visit say, for example google.com by sending the request to the server and displaying it on their browser window.
Content Network Delivery caters to the users by serving their requests by quickly transferring the data back and forth.
Part 7 of System Design Made Easy Series
In the part 7, we covered —
-
Database Sharding
-
CAP Theorem
-
Database schema Design
Sharding is the technique to database partitioning that separates large and complex databases into smaller, faster and distributed databases for higher throughput operations.
CAP theorem lets you determine how you want to handle your distributed databases with there is possibility of inconsistencies, unavailability and connection errors/failures/outrage.
Database schema Design lets you organize data into separate entities and establish and organize the relationships between different entities.
**Part 8 of System Design Made Easy Series **
In the part 8 , we covered —
-
Concurrency
-
API
-
Components + OOP + Abstraction
Concurrency is the process in which multiple computations/operations/process happen/execute in parallel/concurrently.
API is an acronym for application programming interface which provides a way to two or more programs to communicate, work together despite different configurations, architectures, resources etc
Components in the system design are building blocks designed to coordinate, cooperate, reuse and work well with other components of the same/different systems. They can be as simple as visual components or internal components/backend components.
Part 9 of System Design Made Easy Series
In the part 9 , we covered —
-
Planning and Estimation
-
Performance
Planning and estimation( numbers) and performance are very important concepts ( concept that you should be able to demonstrate well when asked).
Part 10 of System Design Made Easy Series
In the part 10, we covered —
-
Map Reduce
-
Patterns and Microservices
In system design, map reduce ( Hadoop systems) is a batch processing technique in which the engine takes huge amounts of data, processes ( map and reduce) and gives the output.
In system design, microservices architecture is used to build enterprise level applications which helps in structuring the whole application as a collection of tiny autonomous, self contained services for each task ( service) that you want/are allowed to perform.
Most Popular System Design Questions — Mega Compilation
In this post. we covered the most popular/important system design questions that you should practice to build a thorough understanding of how large systems are designed.
Popular Questions : Link
Complete 60 Days of Data Science and Machine Learning Series
30 days of Machine Learning Ops
30 Days of Natural Language Processing ( NLP) Series
Data Science and Machine Learning Research ( papers) Simplified **
30 days of Data Engineering with projects Series
60 days of Data Science and ML Series with projects
100 days : Your Data Science and Machine Learning Degree Series with projects
23 Data Science Techniques You Should Know
Tech Interview Series — Curated List of coding questions
Complete System Design with most popular Questions Series
Complete Data Visualization and Pre-processing Series with projects
Complete Python Series with Projects
Complete Advanced Python Series with Projects
Kaggle Best Notebooks that will teach you the most
Complete Developers Guide to Git
Exceptional Github Repos — Part 1
Exceptional Github Repos — Part 2
All the Data Science and Machine Learning Resources
6 Highly Recommended Data Science and Machine Learning Courses that you MUST take ( with certificate) -
- Complete Data Scientist : https://bit.ly/3wiIo8u
Learn to run data pipelines, design experiments, build recommendation systems, and deploy solutions to the cloud.
- Complete Data Engineering : https://bit.ly/3A9oVs5
Learn to design data models, build data warehouses and data lakes, automate data pipelines, and work with massive datasets
- Complete Machine Learning Engineer : https://bit.ly/3Tir8ub
Learn advanced machine learning techniques and algorithms - including how to package and deploy your models to a production environment.
- Complete Data Product Manager : https://bit.ly/3QGUtwi
Leverage data to build products that deliver the right experiences, to the right users, at the right time. Lead the development of data-driven products that position businesses to win in their market.
- Complete Natural Language Processing : https://bit.ly/3T7J8qY
Build models on real data, and get hands-on experience with sentiment analysis, machine translation, and more.
- Complete Deep Learning: https://bit.ly/3T5ppIo
Learn to implement Neural Networks using the deep learning framework PyTorch