Skills you need
- Algorithms and Data Structures: Have algorithms for breakfast , data structures for lunch have a sand-witch of algorithms stuffed with data structures and in dinner again have algorithms and data structures. Basically, what I mean to say practice , practice , practice .
- Competitive Programming: There are a ton of websites which offer you a lot of questions based on the practical and real life implementation. The websites are HackerRank , CodeChef , CodeForces , TopCoder . So , make an account on one of these and start coding right away.
- Complexity Analysis: Whatever you code , always be curious about the complexity of program. This thing will improve your analytical part while you are analyzing your code.
- Multiple Approach: Try to solve the problem with more than one approach , try solving the problem with an another way . But remember the approach you are going to use the second time should be better than the earlier one. If you solved the problem with exponential complexity then try optimizing your algorithm and make it work in polynomial time.Then go for linear or logarithmic. Just remember to improve.
- Use Data Structures: There are a lot of problems which require you to solve them using a specific data structure . So have a good knowledge of data structures . Know their advantages and disadvantages in specific situations . Try to use them as your tools . And a good engineer knows how to use his tools in a optimal way.
- Topics to focus on:
- Data Structures: Topcoder tutorial
- Binary Search: Topcoder tutorial
- Sorting algorithms: Wikipedia list of sorting algorithms (They usually teach a few of them like these in this order: Bubble sort, Insertion sort, Merge sort, Heapsort, Quicksort and Bucket sort, a bit different. Look at visualizations too, like at sorting.at they are cool.)
- Greedy algorithms: Quora: What is an intuitive explanation of greedy algorithms?
- Backtracking: GeeksforGeeks: The Knight's tour problem, Sada Kurapati: N Queens problem
- Dynamic programming: Function Space: Fibonacci series and Dynamic programming (And I really like Jonathan Paulson's answer here.)
- Graph theory and some algorithms: Computer Science Source: Depth/Breadth First Search and Youtube video: Dijkstra's algorithm were the first for me.
- Topcoder
- Codeforces
- Google Code Jam
- Codechef
I think that's basically all I knew when I first competed. Probably other people will tell you a lot of other things, this is just how I started out.
Here are a few sites that host online competitions regularly:
Lastly , I what I would like to say is practice as much as you can. This will let you land your dream job.