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.
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🌎”
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:
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:
Resources to choose language:
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.
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.
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.
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.
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.
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.
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.
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.
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!!!
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
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
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.
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.
Complex Graph Problems:
Detect Cycle in a Directed Graph
Tug of War
m Coloring Problem
Floyd Warshall Algorithm
Dijkstra’s shortest path algorithm
Rat in a Maze
The Knight-Tour Problem
Day 27 and Day 28(Greedy Algorithms)
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.
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.
Intermediate DP Problems:
Floyd Warshall Algorithm
0–1 Knapsack Problem
Egg Dropping Puzzle
Dice Throw Problem
Word Break Problem
Vertex Cover Problem
Tile Stacking Problem
Complex DP Problems:
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
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!!!
Also you can check out my another blog on #100DaysOfCoding.