Tip 1 : Practice competitive programming.The level of questions asked in the programming round is pretty high.
Tip 2 : Have 1 project you know inside and out.
Tip 1 : Make sure you really know everything about any project you put on your resume. They will pick up anything from there randomly and grill you on it.
Tip 2 : Highlight what you learnt from your projects.
This was an online coding round with 3 questions. It was held in the evening. The level of questions was pretty high. I don't remember all the problems now, but there was one graphs, one on dp, and one on combinatorics. One thing I would suggest is to be well versed with graphs, trees and DP. In all the rounds of theirs I have seen, these topics are always asked.






A bipartite graph is a graph whose vertices can be divided into two sets such that each edge of the graph connects one vertex from the first set and another vertex from the second set.
We can also define a bipartite graph as a graph which can be colored using two colors such that no two adjacent vertices have the same color.
For example:
Input:
4 4
0 1
0 2
1 3
2 3
An undirected graph to the above input is shown below:

In the given input, the number of vertices is 4, and the number of edges is 4.
In the input, following the number of vertices and edges, a list of pairs of numbers is given where each pair (u, v) denotes an edge between vertex u and v.
As per the input, there is an edge between vertex 0 and vertex 1.
The vertices 0 and 2 have an edge between them.
The vertices 1 and 3 have an edge between them.
The vertices 2 and 3 have an edge between them.
As the graph can be colored using two colors, and no adjacent vertices share the same color, the graph is bipartite.



Input: 'N' = 4 'K' = 3
Output: 1
There is only one permutation [0, 1, 2, 3] such that a number of elements with 'ARR[I] = I' is 'K' = 3.
There are 50 questions, based on English, logic and maths. The test is for 15 minutes, and the cutoff is 45. The logic and maths questions were pretty easy, but I practiced GRE words for the English section. You can take this test anytime in the window they provide (it was a few weeks), and you get 2 attempts.
This was a telephonic resume round. It was in the evening. The interviewer asked me to choose any one project or internship from my resume, and then proceeded to grill me on it. He asked me about why I used the technologies that I did for the project, and then about certain improvements that could be made to the project and how I would go about them.
This was the DSA round, in which I was given 2 questions to solve. It was in the afternoon. The interviewer was really encouraging, and helped me a little when I got stuck on the 2nd question.



Input: 'arr' = [1, 2, 7, -4, 3, 2, -10, 9, 1]
Output: 11
Explanation: The subarray yielding the maximum sum is [1, 2, 7, -4, 3, 2].
I was already familiar with Kadane's Algorithm. This problem was a slight modification of that. First, I set up the basic code for Kadane's algorithm, and then I created a dp[n][2] array. Here, dp[i][0] stores the largest subarray sum up to that index (basic Kadane's algorithm), and dp[i][1] stores the highest subarray sum up to that index, given you have squared one element somewhere till that index. dp[i][0] will simply follows kadane's algorithm, and dp[i][1] = max(dp[i-1][0] + a[i]*a[i], dp[i-1][1]+a[i]). The final answer is max(dp[i][1]) for i 1..n.
The time complexity of this approach is O(N).
This was the first approach I came up with. The interviewer asked me to dry run this, and was satisfied with the solution.



If there is no square sub-matrix with a sum less than or equal to K, then return 0.
My first approach was brute force. I created a 2d-prefix sum array for the given matrix, and then iterate over all possible squares in this matrix. For each square, I checked if the sum was <=k, and stored the highest size of all such squares.
I was stuck for a bit here, and didn't know how to optimise this further. After a small hint from the interviewer, I came up with the solution. Fix the top left corner of the square, and binary search for the bottom right corner. So first, iterate over all the elements in the matrix. Using binary search and the prefix sum matrix, find the largest square such that the sum is <=k. The time complexity of this is O(n*m*log(min(n, m))). The interviewer was satisfied with this approach.
This was an open ended discussion round. It was held in the afternoon. First, the interviewer asked me about an internship I done earlier, and asked me to code an algorithm for a problem related to that. After that, he asked me an open ended question, and we discussed about optimising the solution as well.
When users scroll social media, the often miss some posts when they are scrolling quickly. How will you ensure that the posts they scrolled past too fast will show up again in an infinite scroll? I was asked to code an algorithm for this as well. My approach was to listen for scroll events and measure the time that each post was on the screen for. I was also asked how I would persist this data in a way that makes it easy to retrieve.
Tip 1 : Think about the larger picture, not only how you will perform the particular task, but about what changes you will need in other places to accommodate this.
Design a text compressor for Google Docs. I went with Huffman Encoding, since I had done a project on it earlier. I needed to optimise this for changes made in the middle of the document. The approach was to split the document into smaller parts, and encode each one independently.
Tip 1 : I would recommend checking out Gaurav Sen on YouTube. The level of the question was not as high, but you'll get a better idea on how to approach these questions.
This was an HR round with the CEO. He was really nice, and asked basic questions.
Why I wanted to join the company, and why I would be a good fit.

Here's your problem of the day
Solving this problem will increase your chance to get selected in this company
What is recursion?