# Getting a job at Amazon, Microsoft or Google is never tough if you prepare in the right way as mentioned in this example

**is example**

Letβs take a simple question (A question on arrays/strings and loops)

**Question: Given a set of characters, you need to find if you can form a palindrome using them! Suppose, the input is abcde, answer is no since you cannot form a palindrome using these. If the input is bbaab, answer is yes since you can rearrange the characters in the string to form a palindrome (ex: abbba, babab )**

To answer these kind of questions, basic knowledge on loops and arrays would work and you may end up writing the brute-force method (the obvious method

that anyone would first think of which is probably the highest time consuming algorithm ( referred to as time complexity)

The so called genius programmers who work in these companies tend to write the best algorithm βΒ Reason? Not because they have got great brains but they learnt about the following concepts

** (Important: If you are hearing these terms for the first time, they may sound like rocket science. But, trust us β if you sit for a week, you can nail all of these. Spending a weeks time to grab a job at a company like Microsoft is definitely worth it. Isnβt it? )**

β Time complexity (how time complexity is calculated for an algorithm, different types of time complexities)

β Understand how an algorithm gets time complexity as logN

β Different search and sort algorithms and their time complexities β you may not be asked any direct questions on these but learning these algorithms would give you an idea of time complexities of algorithms and how the time complexity is reduced in one algorithm compared to other

For the question mentioned above, an engineer having no knowledge on the above usually programs in this way- Taking each element , comparing it with every other element and see how many times it is repeated. Repeat the same thing for all the elements in the array and get the final solution. Now, you learn all the algorithms that were mentioned above and try to find the best solution for the problem above that has less time complexity. There is definitely a better way to solve this which you can figure out easily if you really have idea about all these algorithm

**Other Concepts that you should consider reading**

Binary Search trees β pre order, post order, in order traversal algorithms

stacks, queues, circular queues using arrays and linked lists ( using nay object oriented programming language)

Graph algorithms β BFS and DFS

Sorting algorithms β Binary, quick , heap and merge sorts

Writing matrix programs β additon, mutiplication and inverse using arrays

Program that makes use of two queues to work as a stack and vice versa

Algorithms on cubes β ex: Algorithm to find the total number of visible cubes in an n*n cube

Search algorithms β quick and binary

Hashing β Hash Tables

Algorithms on strings β finding repetitive characters in strings, finding the number of repeated characters, finding all the possible combinations of substrings of any lengh from a string

Basic Networking concepts

You can learn everything in a month and once you understand these, you can easily get into one of these companies with ease! These product companies basically look for analytically skills in a candidate rather than advanced technical skills like .NET. These are computer basics that you study in engineering and the companies test you by judging how good you are in utilizing your basic skills