# Algorithmic Thinking ![rw-book-cover](https://m.media-amazon.com/images/I/816MqYCspFL._SY160.jpg) ## Metadata - Author: [[Daniel Zingaro]] - Full Title: Algorithmic Thinking - Category: #data-structures-and-algorithms #c ## Highlights - Does your algorithm perform repeated lookups or minimum computations? Speed it up with a hash table or min-heap, respectively! Can you build a solution to your problem from solutions to smaller subproblems? Use recursion! Do the subproblems overlap? Speed up your algorithm with memoization! ([Location 206](https://readwise.io/to_kindle?action=open&asin=B085BVJ51Z&location=206)) - A data structure is a way to organize data so that desirable operations are fast. ([Location 246](https://readwise.io/to_kindle?action=open&asin=B085BVJ51Z&location=246)) - An algorithm is a sequence of steps that solves a problem. ([Location 247](https://readwise.io/to_kindle?action=open&asin=B085BVJ51Z&location=247)) - The best C book I can recommend is C Programming: A Modern Approach, 2nd Edition, by K. N. King. ([Location 260](https://readwise.io/to_kindle?action=open&asin=B085BVJ51Z&location=260)) - Enter the static keyword. When used on a local variable, it changes the storage duration from automatic to static, which means that the variable maintains its value between function calls. ([Location 274](https://readwise.io/to_kindle?action=open&asin=B085BVJ51Z&location=274)) - There are also online resources that offer a curated, categorized list of problems and their solution strategies. The Methods to Solve page by Steven Halim and Felix Halim is the most comprehensive that I’ve found: see https://cpbook.net/methodstosolve. ([Location 323](https://readwise.io/to_kindle?action=open&asin=B085BVJ51Z&location=323)) - One general strategy for solving competitive programming challenges is to first work with a simpler version of the problem. ([Location 505](https://readwise.io/to_kindle?action=open&asin=B085BVJ51Z&location=505))