Slightly off-topic, but hopefully others can benefit as well:
I am learning to program on my own, and I have tried some of the CodeSprint Fall 2011 questions (http://csfall11.interviewstreet.com/recruit/challenges/dashb...). Often, I find solutions that "work", but that score poorly because they exceed the time limit (e.g. Card Shuffling, 3/10, 9 points).
What books should I read (or what videos should I watch, etc.) to get better at things like this? Any suggestions would be much appreciated.