I will not put unnecessary literature here just the raw relevant strategies and topics:
1. Be confident and positive
2. Know your weakness and be ready to face them
3. Expect failures and do not be frustrated
4. Practice and develop the though process and ability to reduce a problem to a known problem or a set of known problems
5. While in bus, lunch time keep thinking about problems you found hard to follow or even thinking about applications of different data structures
Where to start:
1. Stack, Queues and Linked List
2. Arrays (sorting, searching and rotation, merging, median etc)
3. Strings (substring, pattern matching, duplicate removal, encoding, regex, reversal, anagrams etc.)
4. Trees (BST problems, LCA, Threaded tree, B+ tree, Tree to LL conversion etc.)
5. Graphs (BFS, DFS, Shortest path, Back tracking and graphs, Travelling sales man)
6. Dynamic programming (Edit distance, Longest sum sub array, longest common sub string, Longest increasing sub sequence, Longest sorted sub sequence, Bridge connection problem, 0/1 and fractional knapsack problem)
7. Miscellaneous - Matrix spiral traversal, Battleship game, mine sweeper game, Suffix tree, Trie, Trie applications, LRU, Linked HashMap design, Priority Queues
Write code on IDE, then on paper, get familiar with as much problems as possible and try to relate them mentally to a already known problem. Keep a mental index of class of problems and when encounter a new problem try and find which class it belongs to and see if you can apply the same solution techniques to it.
1. Be confident and positive
2. Know your weakness and be ready to face them
3. Expect failures and do not be frustrated
4. Practice and develop the though process and ability to reduce a problem to a known problem or a set of known problems
5. While in bus, lunch time keep thinking about problems you found hard to follow or even thinking about applications of different data structures
Where to start:
1. Stack, Queues and Linked List
2. Arrays (sorting, searching and rotation, merging, median etc)
3. Strings (substring, pattern matching, duplicate removal, encoding, regex, reversal, anagrams etc.)
4. Trees (BST problems, LCA, Threaded tree, B+ tree, Tree to LL conversion etc.)
5. Graphs (BFS, DFS, Shortest path, Back tracking and graphs, Travelling sales man)
6. Dynamic programming (Edit distance, Longest sum sub array, longest common sub string, Longest increasing sub sequence, Longest sorted sub sequence, Bridge connection problem, 0/1 and fractional knapsack problem)
7. Miscellaneous - Matrix spiral traversal, Battleship game, mine sweeper game, Suffix tree, Trie, Trie applications, LRU, Linked HashMap design, Priority Queues
Write code on IDE, then on paper, get familiar with as much problems as possible and try to relate them mentally to a already known problem. Keep a mental index of class of problems and when encounter a new problem try and find which class it belongs to and see if you can apply the same solution techniques to it.