The good thing about Algorithm Design & Analysis as a topic is that there is no lack of great resources to learn from! And even better, a large portion of them are freely available online (in forms of lecture notes, or entire books, video lectures, programming challenges with online judging, etc).

In addition to what others have mentioned, here are some example resources you might prefer for a beginner-intermediate level intro:

1. (free online) Algorithms by Dasgupta, Papadimitriou, and Vazirani https://www.amazon.com/Algorithm-Design-Jon-Kleinberg/dp/032...

4. Another one specifically for more applied view (esp., how they are used in programming contests such as ICPC) is Skiena & Revilla's "Programming Challenges" book (https://www.amazon.com/Programming-Challenges-Contest-Traini...). Note that this is different than Skiena's other popular book (Algorithm Design manual) which is also pretty good and has a "war story" based perspective to design of algorithms.

5. There are also several resources where lecture notes from university Algorithm & DS courses are very useful. Here is an example from my previous Professor, David Kempe: http://david-kempe.com/teaching/DataStructures.pdf

6. Several programming competition specific tutorials can be found on Topcoder: https://www.topcoder.com/thrive/tracks?track=Competitive%20P... (individual SRM archives are also good place to try problems first hand and then learn from other's approach). In general, if you search for ACM-ICPC resources, you will find a lot more targeted information/problems which will apply not only for leetcode, but also for detailed understanding of the theory too.

This is one of the best Algorithms books. Additionally, another good one is this: https://www.amazon.com/Algorithm-Design-Jon-Kleinberg/dp/0321295358

by flaming_sousa 2019-07-21

Algorithms - The most common text book is CLRS, but I was taught with Algorithm Design. Either are great books. To be functional, at least cover

Greedy Algorithms

Divide and Conquer

Dynamic Programming

Understanding NP Completeness

Design Patterns - Probably Design Patterns is the best place to start. I'd recommend caution with studying them closely - just be literate in the basics, and understand the problems they are trying to solve.

by roundsquare 2017-08-19

If you are really interested in the math involved you can look at any algorithms book. I used this one in my undergrad:
http://www.amazon.com/Algorithm-Design-Jon-Kleinberg/dp/0321...

Its a good introduction, but it will require you to be decent at math and know how to do proofs.

On the other hand, if you are interested in how programs can express things, then maybe you want to learn about some CS theory. Specifically, some lambda calculus would be good to learn, but I don't have any good suggestions.

Note: All of these will be easier to read if you are pretty good at programming, so I'd say follow at least the first piece of advise above.

In addition to what others have mentioned, here are some example resources you might prefer for a beginner-intermediate level intro:

1. (free online) Algorithms by Dasgupta, Papadimitriou, and Vazirani https://www.amazon.com/Algorithm-Design-Jon-Kleinberg/dp/032...

4. Another one specifically for more applied view (esp., how they are used in programming contests such as ICPC) is Skiena & Revilla's "Programming Challenges" book (https://www.amazon.com/Programming-Challenges-Contest-Traini...). Note that this is different than Skiena's other popular book (Algorithm Design manual) which is also pretty good and has a "war story" based perspective to design of algorithms.

5. There are also several resources where lecture notes from university Algorithm & DS courses are very useful. Here is an example from my previous Professor, David Kempe: http://david-kempe.com/teaching/DataStructures.pdf

6. Several programming competition specific tutorials can be found on Topcoder: https://www.topcoder.com/thrive/tracks?track=Competitive%20P... (individual SRM archives are also good place to try problems first hand and then learn from other's approach). In general, if you search for ACM-ICPC resources, you will find a lot more targeted information/problems which will apply not only for leetcode, but also for detailed understanding of the theory too.

This is one of the best Algorithms books. Additionally, another good one is this: https://www.amazon.com/Algorithm-Design-Jon-Kleinberg/dp/0321295358

Algorithms - The most common text book is CLRS, but I was taught with Algorithm Design. Either are great books. To be functional, at least cover

Design Patterns - Probably Design Patterns is the best place to start. I'd recommend caution with studying them closely - just be literate in the basics, and understand the problems they are trying to solve.

Its a good introduction, but it will require you to be decent at math and know how to do proofs.

On the other hand, if you are interested in how programs can express things, then maybe you want to learn about some CS theory. Specifically, some lambda calculus would be good to learn, but I don't have any good suggestions.

Note: All of these will be easier to read if you are pretty good at programming, so I'd say follow at least the first piece of advise above.

http://www.amazon.com/Algorithm-Design-Jon-Kleinberg/dp/0321...

http://www.amazon.com/Design-Patterns-Object-Oriented-Addiso...

http://www.amazon.com/Refactoring-Improving-Existing-Addison...

http://www.artima.com/shop/forsale