算法题到底咋做很多题根本找不到思路,每个题做完弄懂之后,下一次还是重写不出来,不知道啥算懂( 三 )

算法题到底咋做很多题根本找不到思路,每个题做完弄懂之后,下一次还是重写不出来,不知道啥算懂
算法题到底咋做很多题根本找不到思路,每个题做完弄懂之后,下一次还是重写不出来,不知道啥算懂
范围内有一定可能性的算法。
差分、前缀和、双指针、桶排序、单调栈、单调队列、背包问题思考题目特征 =\u0026gt; 从集合中选出合适算法仔细观察此题,可以发现如下几个特征:
1. 四类硬币
2. 每类硬币数量不限
3. 求组成 n 的方案数
如果对「动态规划」有一定熟悉度的话,基本可以确定此题就是「动态规划问题」,因此本题具有很明显的「子结构」性质。
然后再根据之前确定的时间复杂度 算法题到底咋做很多题根本找不到思路,每个题做完弄懂之后,下一次还是重写不出来,不知道啥算懂
算法题到底咋做很多题根本找不到思路,每个题做完弄懂之后,下一次还是重写不出来,不知道啥算懂
,以及我们选出的算法,基本可以确定该动态规划问题的状态,只有如下两种:
1. 算法题到底咋做很多题根本找不到思路,每个题做完弄懂之后,下一次还是重写不出来,不知道啥算懂
表示用四种硬币组成 i 分的方案数,属于典型线性 DP
2. 算法题到底咋做很多题根本找不到思路,每个题做完弄懂之后,下一次还是重写不出来,不知道啥算懂
表示用前 i 种硬币组成 j 分的方案数,属于背包问题
再仔细思考两种状态的转移方程,可以发现第二种采用背包思路的 DP 状态更适合解决本题,且由于硬币个数不限,因此是经典的「完全背包」问题。所以我们可以直接列出如下的转移方程( 算法题到底咋做很多题根本找不到思路,每个题做完弄懂之后,下一次还是重写不出来,不知道啥算懂
表示第 i 类硬币的面值):
f = ff = f + f]可以发现, 算法题到底咋做很多题根本找不到思路,每个题做完弄懂之后,下一次还是重写不出来,不知道啥算懂
的数值主要由 f 算法题到底咋做很多题根本找不到思路,每个题做完弄懂之后,下一次还是重写不出来,不知道啥算懂
算法题到底咋做很多题根本找不到思路,每个题做完弄懂之后,下一次还是重写不出来,不知道啥算懂
得到,因此我们可以压缩掉第一维,即采用滚动数组的方法,得到如下方程:
f = f + f]由于「完全背包」是背包问题中的经典模型,因此更具体的细节,大家可以参考下述代码。
C++ 代码实现class Solution { vector\u0026lt;int\u0026gt; f; int coin = {25, 10, 5, 1}, mod = 1e9+7;public: int waysToChange(int n) { f.resize(n + 2, 0); f = 1; for(int i = 0; i \u0026lt; 4; i++) for(int j = coin; j \u0026lt;= n; j++) f = (f + f]) % mod; return f; }};力扣 56. 合并区间力扣 56. 合并区间题目描述给出一个区间的集合,请合并所有重叠的区间。
?示例 1:输入: ,,,]输出: ,,]解释: 区间 和 重叠, 将它们合并为 .示例 2:
输入: ,]输出: ]解释: 区间 和 可被视为重叠区间。
解决过程数据范围 =\u0026gt; 时间复杂度现在我们来解决最开头提到的那个问题,「力扣上并不是所有题目都有数据范围,那又该如何确定呢?」。此题就属于没有数据范围的题目,并且在很多面试题中,也都是没有数据范围的,这时应该怎么办呢?
根据经验,对于此类没有数据范围的题目,我们通常需要自行从小到大枚举数据范围,一般从 算法题到底咋做很多题根本找不到思路,每个题做完弄懂之后,下一次还是重写不出来,不知道啥算懂
开始枚举,并且大部分的题枚举到 算法题到底咋做很多题根本找不到思路,每个题做完弄懂之后,下一次还是重写不出来,不知道啥算懂
时就能找到合适的算法。
因此对于此题,我们暂且将时间复杂度限制在 算法题到底咋做很多题根本找不到思路,每个题做完弄懂之后,下一次还是重写不出来,不知道啥算懂


推荐阅读