30 Days of Code — Complete Guide W/Resources(DSA)
Want to become a successful software engineer/developer in 2021 and you are dreaming about getting into big tech giant companies?
Or are you a student who wants to develop your coding skills and tackle coding competitions but do not know where to start from or not been able to form a habit of coding, then this for you!!!
Many times I have seen students crying and complaining that they are unable to maintain consistency to code or solve coding problems. As days pass the excitement and enthusiasm fades away😔.
But, as said it requires 21 days to acquire a habit and 90 days for making it a part of your life. Same goes on for Problem Solving and Competitive Coding thus develop interest in coding and solve real-life problems.
Dedicating a 3–4 week time now in competitive coding will take you ahead of other for sure. These #30daysofcoding will surely helps you in cracking interview of top tech companies like Amazon, Flipkart, Facebook, Google, etc.
Solution✔️
So here I have prepared a practical roadmap “30 days of Code” based on a lot of resources and by watching a lot of videos and various articles from GeeksforGeeks and LeetCode as well as Code Forces.
I know these daily can become tough at some point of time but do not lose hope and remember that —
“Climb mountains🏔️ not so the world can see you, but so you can see the world🌎”
Alternative Way⛕
If you are bored of following this, or are already a good enough coder, the best way is follow the below two programs i.e. of GeeksforGeeks and LeetCode. These are free coding challenges which are available daily to everyone. Link are below:
GeeksforGeeks
LeetCode
These things will help you grow a habit of coding for a lifetime as thus you can become confident for cracking the interviews of big tech companies.
Things to Remember(Prerequisites)🤔
- You should primarily select a coding language whichever you are comfortable in for e.g. Java, Python or C++. Take your time.
- Also go through the time-complexities of various algorithms.
- If you’re a beginner then try to commit your time for at least 4–6 hours every day. If you’re an experienced one then you need to commit for 2–3 hours every day.
- These topics only cover the basics and if needed you may need to get some extra knowledge by reading and watching videos for solving problems.
- Do not directly jump to the solution.
I suggest “Make your own notes✍️”.
Lets get started🤩.
Day 1 and Day 2(Math's & Programming Language)
So to solve any type of Coding problems, you should know the basic Mathematics🧮 and for the first 2 days, I would recommend you to brush -up your math skills.
If you are already aware of the basic math concepts you should spend this time to select your own Programming Language.
I am hereby giving some of the most relevant topics of math that you can go through:
Mathematics :
Set Operations
Groups
Power Sets
Relations
Resources to choose language:
C Programming
C++ Programming
Java Programming
Python
Day 3 and Day 4(Arrays)
The most basic and fundamental problems are of Arrays which are linear data structures. If you feel confident in solving the easy ones, try the medium and hard level problems.
Array Rotation
Find duplicates in an array
Missing number in an array
Merge Two Sorted Arrays
Subarray with given sum
Day 5 and Day 6(Matrix)
Usually anyone would suggest you to go for Linked Lists after learning arrays, but matrices really play an important role in dynamic programming.
Rotate matrix elements
Matrix Multiplication
Magic Square
Square of Matrix Diagonal Elements
Day 6 to Day 9(Strings🧵)
Taking these 3 days solely for strings will definitely help you in String Manipulations i.e. you can do string changing, parsing, splicing, pasting, or analyzing strings.
Word Count in Strings
Count Distinct Subsequences
Sparse Search
K’th Non-repeating Character
Anagram Substring Search
Let me tell you this, String Manipulations is a huge chapter to be studied, but if your basic concepts are clear, then it would just be an “Icing on Cake🍰!!!”
Day 10 and Day 11(Searching & Sorting)
Searching and Sorting play an important role in most of the coding problems where you need to find a specific value. Usually most of the languages like Java, Python have their inbuilt functions to Search and Sort a specific value.
Searching Algorithms
Sorting Algorithms
Two Pointers
Day 12 and Day 13(Bit Magic & Recursion)
Just like string manipulation, Bit Manipulations will help you to determine one or more bit patterns or bit numerals thus improve the efficiency of the algorithms.
Bit magic :
Sum of Bitwise XOR
Least Significant K bit
Same weight integer
Recursion :
Towers of Hanoi (TOH)
Inorder/Preorder/Postorder Tree Traversals
DFS of Graph
Tail Recursion
Day 14 and Day 15(Linked Lists)
Just like Arrays, Linked Lists stand out very important in Competitive Coding as they will be crucial in helping implementations of stack and queues as well as in graphs further more.
Linked lists come in handy when the data entries are huge which arrays cant handle on their own.
Middle element of LL
Merge two LL
Rotate Doubly LL by N nodes
Josephus Circle
Binary Tree to Circular Doubly LL
Half way Reached(Hushhhh…)
Congratulations🥳🎉. So if you have completed so far, you have already reached half way through the course and will be able to solve almost of the Data Structure and Algorithms Problems.
You, by now should have completed almost 90–100 problems within the span of 15 days. Now, also depending upon the speed, you can increase the speed of solving of questions.
Here comes the wave of Most Important Topics!!!
From now on, lets concentrate them🥺.
Day 16 to Day 18(Stack)
I guess, this is the most important step, studying Stacks will overall help you in most of the data structures like operations in queues using stacks, queues using stacks, infix and postfix operations, etc. Let me give you some extra tips.
Basic Examples:
Queue using Stacks
Prefix to Infix Conversion
Prefix to Postfix Conversion
Postfix to Prefix Conversion
Expression Evaluation
Operations on Stack:
Reverse a stack using recursion
Delete middle element of a stack
Balanced expression with replacement
Bubble sort using two Stacks
The applications of stack are huge, so I would suggest you focus on it and try to master it as further data structure is based on same concept.
Day 19(Queues)
If you have studied stacks well, then queues will just be other day in your boring life, just the opposite of stack you may say!!!
Reversing the first K elements of a Queue
Priority Queue using Linked List
Implement Stack and Queue using Deque
Reverse a path in BST using queue
ZigZag Tree Traversal
Congratulations🥳🎉. You have made this far. After completion of all these DSA concepts you will be almost 60% prepared for the interview stages.
Day 20 and Day 21(Tree🌲)
The hierarchy of natural forms is maintained with the help of trees. There are further various combinations available for tree data structure such as AVL trees, Red-black trees, Self-balancing tree, etc.
But as I say, if the basic concepts of any data structure are clear in your mind, then you can deal with any sort of data structure. I would recommend you to watch videos regarding tree to know them in detail, if they become hard for you in understanding.
Inorder Tree Traversal without Recursion
Inorder Successor of a node in Binary Tree
Reverse tree path
Morris traversal for Preorder
Check if a given Binary Tree is SumTree
Check if two nodes are cousins in a Binary Tree
Day 22(BST)
If you are good at solving tree problems, then BST will be cherry🍒 on the top. This will probably take you less number of hours to understand the concepts and once you did it, you will be thorough with all the concepts of Trees🌳.
Sorted Linked List to Balanced BST
Convert BST to Min Heap
Merge two BSTs with limited extra space
Lowest Common Ancestor in a Binary Search Tree
A program to check if a binary tree is BST or not
Second largest element in BST
Sum of k smallest elements in BST
Crucial Days(OMG!!!)
The next few days are very crucial as the last remaining topics are been asked by most of the #FAANG companies or lets says the where the package is above 12–15lpa.
So, I would suggest you to solve as many problems as possible for these remaining topics. These remaining topics will be very important and once you conquer these topics, cracking products based companies would come handy!!!
Day 23 and Day 24(Heap)
The heap is a tree based data structure and generally will be of two types such as Minimum Heap and Maximum Heap.
The heap data structure has various applications in Prim’s Algorithm and Dijkstra’s Algorithm. Priority Queues can be implemented efficiently using the Heap data structure.
Leaf starting point in a Binary Heap data structure
Maximum difference between two subsets of m elements
Maximum distinct elements after removing k elements
K maximum sum combinations from two arrays
Convert min Heap to max Heap
Sort a nearly sorted (or K sorted) array
Day 25 and Day 26(Graphs)
After heap, the concepts comes for Graphs and Topological Sorting which are the non-linear data structure. Graphs can be used to solve real-life word problems such as Shortest path between two cities, N-Queens Problem or even M-coloring Graph Problems.
Topological Sorting:
Longest path between any pair of vertices
Longest Path in a Directed Acyclic Graph
Kahn’s Algorithm for Topological Sorting
Basic Graph Problems:
Transpose graph
Count number of trees in a forest
Print all paths from a given source to a destination using BFS
Minimum edge reversals to make a root
A matrix probability question
Complex Graph Problems:
Detect Cycle in a Directed Graph
Tug of War
n-Queen’s Problem
m Coloring Problem
Hamiltonian Cycle
Bellman–Ford Algorithm
Floyd Warshall Algorithm
Dial’s Algorithm
Dijkstra’s shortest path algorithm
Rat in a Maze
The Knight-Tour Problem
Day 27 and Day 28(Greedy Algorithms)
Image
When you want to built a solution piece by piece, and always choosing the next piece that offers the most obvious and immediate benefit is then called as Greedy Algorithms. They are been used in Operating Systems and NP Complete Problems as well as Job Selection Problems.
Basic Greedy Algorithms:
Huffman Coding
Job Sequencing Problem
Water Connection Problem
Policemen catch thieves
Minimum Swaps for Bracket Balancing
Fitting Shelves Problem
Complex Greedy Algorithms:
Kruskal’s Minimum Spanning Tree
Prim’s Minimum Spanning Tree
Dijkastra’s Shortest Path Algorithm
Dial’s Algorithm
Graph Coloring
K-centers problem
Shortest superstring problem
Day 29 and Day 30(Dynamic Programming)
We can merely say that we have reached the end of the #30DaysOfCoding and the last topic and the most fantastic topic that we will cover here is the Dynamic Programming topic. It can be said as an optimization over recursion. The recursive calls for same inputs can thus be called as Dynamic Programming.
Firstly I would suggest you to again go through the topic of Recursion and then get your hands on with this. Various problems that thus be optimized with the help of Dynamic Programming.
Basic DP Problems:
Fibonacci numbers
nth Catalan Number
Compute nCr % p
Print Fibonacci Series in reverse order
Longest Common Subsequence
Longest Repeated Subsequence
Minimum Sum Path in a Triangle
Intermediate DP Problems:
Floyd Warshall Algorithm
Bellman–Ford Algorithm
0–1 Knapsack Problem
Egg Dropping Puzzle
Dice Throw Problem
Word Break Problem
Vertex Cover Problem
Tile Stacking Problem
Box-Stacking Problem
Complex DP Problems:
Palindrome Partitioning
Word Wrap Problem
Matrix Chain Multiplication
Maximum sum bitonic subarray
Maximum sum rectangle in a 2D matrix
Number of subsequences in a string divisible by n
Printing Shortest Common Supersequence
Extra
Here’s a list of Top 20 Dynamic Programming Interview Questions
The above mentioned topics will surely help you out to validate and also help you gain more in-depth knowledge for Data Structures and Algorithms. If you are able to solve the example problems that I have given in the topics, it they will surely boost your confidence and will help you in your upcoming technical interviews.
And who knows, if lucky you may also get the same problems that you have already solved in 30 Days of Coding Challenge.
Hope all of this helps!!!
Resources:
GeeksforGeeks
Google
I also do try to make some amazing content on YouTube, so I would suggest you can check that out too. Also make sure you follow me on Twitter.
Also you can check out my another blog on #100DaysOfCoding.
Link below:
https://omkarghotekar.medium.com/100-days-of-code-complete-guide-w-resources-beginner-aae12a8af926