Strategies: Difference between revisions
From charlesreid1
(→Mazes) |
|||
| Line 33: | Line 33: | ||
} | } | ||
</pre> | </pre> | ||
BufferedReader/BufferedWriter | |||
* Allow reading and writing one (or a few) characters at a time | |||
==Mazes== | ==Mazes== | ||
Revision as of 22:39, 22 May 2017
Random assorted notes from competitive programming problems - various strategies, etc.
Data Structures
Utilize ALL THE DATA STRUCTURES
PriorityQueue - queue in which things are put into their natural order
- Useful to implement with your own custom class, and extend Comparable
Arrays and Strings
Hash tables
- Using a HashSet or HashMap in Java is a fast, O(1) way to look things up
- Use hash tables when you need to keep track of how many of X different things you have seen
- Internally, hash tables can use binary trees to stay balanced, and use less space
Array lists
- Internally resized array with O(1) access
- When array runs out of space, needs to double, which takes O(N)
- Doubling in size should happen infrequently, so ends up taking O(1) on average
StringBuffer
- Avoids the expensive/costly construction of a new string in a loop
- StringBuffer internally stores an array of Strings, does not concatenate them until it needs to return the result (when toString() method called)
public string joinWords(String[] words) {
StringBuffer sentence = new StringBuffer();
for(String w : words) {
sentence.append(w + " ");
}
return sentence.toString();
}
BufferedReader/BufferedWriter
- Allow reading and writing one (or a few) characters at a time
Mazes
Problems involving mazes - particularly, mazes with tricky constraints, like directional mazes - can easily trip you up. Remember to keep it simple.
If you're initializing a maze and it's character based, load it into a two-dimensional array, like this:
Scanner scan = new Scanner(System.in);
int r = scan.nextInt();
int c = scan.nextInt();
char[][] grid = new char[r][c];
for(int i = 0; i < r; i++) {
String s = scan.next();
for(int j = 0; j < c; j++) {
grid[i][j] = s.charAt(j);
}
}