In my experience, I am not good at the solving the algorithm problems. But I have never given up. And here are some findings I can share:
You see it you get it and remember it. It likes the design patterns in the object-pritencted programming. You are better know as many as possible and make sure they are related to your domain. UCB open course is a good resource for knowing the algorithms. What I mean here is that you need to extend your knowledge on algorithms first. It is a program or course and it is not related to the experience.
We do not need to learn all from the university courses. Be sure you remember all the concepts and the ideas. And I believe we combine the data structures and the algorithms together. It is a good way to increase the efficiency of learning.
Source from Author
In my opinion, we should know what algorithm technique that we are using when we are trying to solve the programming issues. This is more important than solving the algorithm problem itself. And as more problems you have solved, you will know more techniques of algorithms. And you will know how to apply them to your problems. I believe this is the reason I failed to solve the same problems in the past.
We should know the what technique we have used to solve the problems. For example, if we are working on solving find specific element on a Array. Most of time, "we use linear search technique(algorithm)" keep it in mind rather than we use for
here to traverse all the elements. This is the key point to improve the efficiency of solving the algorithm problems.
This is really helpful while you are trying solve the problems. There are many examples like:
range(1,4)
range(5,1,-1)
for i in (0..n){
}
for i in (0..n-1).rev(){}
for i in (0..=n).rev(){}
It is really helpful to know these programming skills clearly. What the different between them and how to use them to solve the problems.