Learn Algorithms like you learn Maths
I am not gifted. I wish I was but the fact is to learn Maths and solve unknown problems I need to go and solve lots of problems. I use the knowledge gained from these extra problems to tackle unknown ones. Least to say, I at least get an idea on how to think ahead, what steps I could try. The solution will come if your steps are heading the right way (please note that there can be many different combinations of steps - not necessarily the one given in book).
I like programming and algorithms. Again I wish I was gifted but I am not. I can solve some amount of basic problems (stack, queues, linked lists, trees, basic sorts and so on) with probably not so optimal solution. But I mostly end up finding a better solution than mine (in the book or Google) which kind of pisses me off. I used to leave it there and not proceed further. I've now realized that I need to stop getting bugged and start admiring the solution. So, just like in Maths when I solved an new kind of problem and applied the technique learnt from it to another problem I need to do the same thing in Algorithms. When I find a unsolvable (for me) problem, I need to look at the solution and learn from it the approach that can be applied to another similar kind of problem. Hopefully, slowly I'll start moving to a stage where the number of problems I can solve increases.