算法题到底咋做很多题根本找不到思路,每个题做完弄懂之后,下一次还是重写不出来,不知道啥算懂( 三 )
、
范围内有一定可能性的算法。差分、前缀和、双指针、桶排序、单调栈、单调队列、背包问题思考题目特征 =\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; 时间复杂度现在我们来解决最开头提到的那个问题,「力扣上并不是所有题目都有数据范围,那又该如何确定呢?」。此题就属于没有数据范围的题目,并且在很多面试题中,也都是没有数据范围的,这时应该怎么办呢?
根据经验,对于此类没有数据范围的题目,我们通常需要自行从小到大枚举数据范围,一般从
开始枚举,并且大部分的题枚举到
时就能找到合适的算法。
因此对于此题,我们暂且将时间复杂度限制在
推荐阅读
- 联运■连云港港全国首推集装箱铁水联运“一单到底”
- 汽车知识|第八代高尔夫到底值不值得买?1.4T自动Pro版全款多少钱?
- 人潮汹涌|丁真爆火第20天,到底谁才是真正的“幕后推手”?华春莹为他连发三推
- 微博目前已经支持文本,图片,位置分享,为啥没有语音和视频呢微博的pm肯定想过这两种微博形态,但迟迟不做的原因到底是啥。是语音和视频不符合产
- 什么|到底是什么原因?宝宝易咳嗽
- 淘宝店卖杯子咋推广咋做9.9包邮的爆款有作用吗
- 京广和公司到底是干啥的
- 董洁|40岁的董洁到底怎么啦?少女造型被吐槽,女性的温柔感也不见了
- 中兴努比亚 Z5 的边框到底有多窄
- 汽车知识|西装暴徒的代表,40w就能拥有百万级别的声浪,到底是什么车
