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三角形的最小路径
在一个三角形中,每次移动只能向下和向右移动,到达三角形的底,求经过路径的值之和最小
分析:需要记录每次经过的路径,每一层记录一个最小值,总路径取经过的各层最小值