Which learning style do you prefer?

When it comes to competitive programming, there are basically 3 types of learning methods I have seen people follow,

  1. Pick a topic you are less confident in, solve as many questions until you are confident in that topic.
  2. Solve questions randomly but from a well-ordered plan (according to difficulty), eg: like from A2OJ ladders.
  3. Learn only from contests but give them more frequently.

I would like to know which learning style do you prefer (you may share if you have your own) and how it helps you. Personally I have only tried the first method but it has cost me a lot of time and I have been able to give fewer contests, or maybe I am solw.
Would be helpful for the community if you share your experiences.

i use the 1st technique for getting used to new topic and use a2oj for searching questions
i use the 3rd technique to learn about the new topic.
so i use all the three techniques