剑指Offer
一、查找和排序
如果面试的时候要求在排序的数组(或者部分排序的数组)中查找一个数字或者统计某个数字出现的次数,可以尝试用二分查找。
二、动态规划和贪婪算法
如果面试题是求一个问题的最优解,如果把小问题的最优解组合起来能够得到整个问题的最优解,那么我们可以应用动态规划解决这个问题。
我们在应用动态规划之前,分析能否把大问题分解成小问题,分解后每个小问题也存在最优解,如果把小问题的最优解组合起来能得到整个问题的最优解,那么我们可以应用动态规划解决此类问题。
从上往下分析问题,从下往上求解问题。
贪婪算法和动态规划不一样,当我们应用贪婪算法解决问题的时候,每一步都可以做一个贪婪的选择,基于这个选择,我们确定能够得到最优解。应用贪婪算法需要用数学公式证明贪婪选择是正确的。