动态规划算法

1.二分查找(前提:有序,无重复元素)

使用递归,在一个数组中查找一个元素并返回其下标,需要定义一个中间值及下标,

若目标元素小于中间值,则目标元素在数组的左半部分;反之亦然。

2.动态规划算法

2.1爬楼梯问题

每次只能爬1阶或2阶楼梯

关键:到达目的楼梯的方法数 = 到达上一次楼梯的方法数 + 到达上上次的楼梯的方法数

2.2打家劫舍问题

有一些连续的房子,小偷偷钱,不能偷连续的房子,如何偷到最多的钱?

分析:偷N间,情况1:偷第N间的钱,则偷到的钱 = 第N间的钱 + 偷到的N-1间之前的钱

情况2:不偷第N间,则偷到的钱 = 第N-1间的钱 + 偷盗的N-2间之前的钱

2.3零钱兑换

有多种面额的硬币,需要求凑的金额所需最少数量的硬币

分析:需要每次遍历硬币的面额,取出一次硬币后,减去硬币的面额,每次尽量取得面额的最大值

2.4最大连续子数组之和

求一个数组中,1个或多个连续数值(子数组)之和最大

分析:每次需要看子数组的前一个 子数组的值 是否为正数,是正数,才加

2.5三角形的最小路径

在一个三角形中,每次移动只能向下和向右移动,到达三角形的底,求经过路径的值之和最小

分析:需要记录每次经过的路径,每一层记录一个最小值,总路径取经过的各层最小值

你可能感兴趣的:(动态规划)