动态规划及面试,学完这一篇,你就入门了:Dynamic Programming, 动态规划,经典题目

提到算法,绕不开的重点和难点就肯定会包括动态规划 -- DP,本文就把经典的DP问题按照分类列一下,大家可以按照RecursionTop-DownBottom-Up三种方式都练一练。俗话说,熟能生巧,多练才是提高算法的不二法宝。

在educative的

Grokking Dynamic Programming Patterns for Coding Interviewswww.educative.io图标

算法面试过程中,题目类型多,数量大。大家都不可避免的会在LeetCode上进行训练。但问题是,题目杂,而且已经超过1000道题。全部刷完且掌握,不是一件容易的事情。那我们应该怎么办呢?找规律,总结才是制胜法宝。下面我们就来看看

Grokking the Coding Interview: Patterns for Coding Questionswww.educative.io图标

的分类及每个类型的经典题目。

(如果你需要上面这些算法课程,那么你可以使用
awesome-developer
的折扣码获得网站所有课程的额外15%off!上面的折扣码针对单独购买所有课程有效。

如果想买订阅( Subsriptions)的小伙伴,则可以用
ZHIHUEDU-10
的coupon code来获取额外九折的优惠
适用于按年和按月订阅):

他家最最出名的还是这门Grokking the System Design Interview, 但凡提到准备系统设计,这门课都上入门必推的:

Grokking the System Design Interview - Learn Interactivelywww.educative.io图标

以及OOD: Grokking the Object Oriented Design Interview

Grokking the Object Oriented Design Interview - Learn Interactivelywww.educative.io图标

课程中, 作者将DP的问题分成以下几类:

1. 0/1 Knapsack, 0/1背包,6个题

0/1 Knapsack,0/1背包问题

Equal Subset Sum Partition,相等子集划分问题

Subset Sum,子集和问题

Minimum Subset Sum Difference,子集和的最小差问题

Count of Subset Sum,相等子集和的个数问题

Target Sum,寻找目标和的问题


2. Unbounded Knapsack,无限背包,5个题

Unbounded Knapsack,无限背包

Rod Cutting,切钢条问题

Coin Change,换硬币问题

Minimum Coin Change,凑齐每个数需要的最少硬币问题

Maximum Ribbon Cut,丝带的最大值切法


3. Fibonacci Numbers,斐波那契数列,6个题

Fibonacci numbers,斐波那契数列问题

Staircase,爬楼梯问题

Number factors,分解因子问题

Minimum jumps to reach the end,蛙跳最小步数问题

Minimum jumps with fee,蛙跳带有代价的问题

House thief,偷房子问题


4. Palindromic Subsequence,回文子系列,5个题

Longest Palindromic Subsequence,最长回文子序列

Longest Palindromic Substring,最长回文子字符串

Count of Palindromic Substrings,最长子字符串的个数问题

Minimum Deletions in a String to make it a Palindrome,怎么删掉最少字符构成回文

Palindromic Partitioning,怎么分配字符,形成回文


5. Longest Common Substring,最长子字符串系列,13个题

Longest Common Substring,最长相同子串

Longest Common Subsequence,最长相同子序列

Minimum Deletions & Insertions to Transform a String into another,字符串变换

Longest Increasing Subsequence,最长上升子序列

Maximum Sum Increasing Subsequence,最长上升子序列和

Shortest Common Super-sequence,最短超级子序列

Minimum Deletions to Make a Sequence Sorted,最少删除变换出子序列

Longest Repeating Subsequence,最长重复子序列

Subsequence Pattern Matching,子序列匹配

Longest Bitonic Subsequence,最长字节子序列

Longest Alternating Subsequence,最长交差变换子序列

Edit Distance,编辑距离

Strings Interleaving,交织字符串


大家可以先把以上35个题目练熟,这样DP到达中等水平肯定是okay了的。再加以训练和提高。突破算法的硬骨头不在话下。一定要按照三种方式对照起来练。


有需要的小伙伴,网站全部课程都有效的额外八折coupon code: awesome-developer


其他很多课程:

穷码农:网课党的双重大福利!Github学生账号和Educative合作,总共2000美金的课程免费半年啦zhuanlan.zhihu.com图标


以上。

编辑于 2020-05-18

文章被以下专栏收录

    程序员刷题找工作和学习计算机基础知识是一个长期的过程,该过程中需要有良好的计划和优质的执行。希望本专栏能给求职的你我他打开思路和提供绵薄的帮助!我会不断更新这些方面的内容,也算是自己转专业学习计算机的一个提炼。希望大家能打好基础,面试手到擒来。