LeetCode实战:动态规划算法是怎么一回事

本文探讨了动态规划算法的优化思路,通过LeetCode的第11题container with most water为例,从暴力枚举的问题分析,逐步过渡到动态规划的解决方案,详细解释了动态规划算法的时间复杂度优化和思想核心。
摘要由CSDN通过智能技术生成

1 回顾

利用了6天时间,细细总结了8个常用排序算法的原理到源码兑现,如果您对排序算法感兴趣或者想了解这些算法用到的思想,比如分治法,递归调用,堆排序等,然后尽量学着将这些思想用到工作的coding中去,请参考之前推送:

冒泡排序到快速排序做的那些优化

直接选择排序到堆排序做的那些改进

直接插入排序到希尔排序做的那些改进

归并排序算法的过程图解

不基于比较的基数排序原理图解

常用排序算法代码兑现

2 你会学到什么?

接下来,要学习一种算法优化的思路。

暴力枚举,一般比较容易想出来,是解决问题最直接的方法,但是往往不是高效的算法,找出暴力枚举的问题所在,以此为突破口,才有可能想出更高效的算法。

这种更高效的算法有可能是动态规划。看看如何通过实战从暴力枚举切入到动态规划中。

3 讨论的问题是什么?

已知目标函数,和多个输入变量,并且输入变量间有耦合关系,对于这类问题,暴力解决一般时间复杂度比较大,讨论动态规划来降低时间复杂度。

4 动态规划入门

先考虑这么一个问题,给定两个数组a和 b,每个数组任意拿出一个元素,求乘积的最大值,假定数组 a 和 b 相互独立,不存在耦合关系。

在这个假定下,这个问题变得就很简单了,直接取各自数组a或b的最大值,两者相乘一定是最大值。

但是,有时候,数组a和b不会相互独立,存在耦合关系,例如数组a中最大元素取出后,就不能再拿数组b中的最大值了,此时问题就好像变得复杂起来。

这就是我们说的需要规划,需要有策略的动态地调整数组a和b拿出的元素,最后的相乘最大值,可能都不是各自的最大元素。

上述问题,转化为一个实际问题,便是LeetCode的第11题 container with most water,请看题,

Given n non-negative integers a1, a2, …, an, where each represents

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值