递归 :Recursion 函数自己调自己(需要有终止条件)
分治:divide & Conquer
递归代码模版
Recursion terminator:终止条件,放在最上面
process logic:在当前这一层,需要的操作是什么
Drill down:往下一层递归,调自己本身,level+1,参数也会通过process有一些改变。当下一层解决完回来,就回到这个位置。有时候有返回值,有时候没有返回值,当没有返回值的时候,其实有一部分参数在下一层已经被改变了。
reverse current level status:当返回到这一层,可能需要再进行一些处理操作。
案例:斐波那契数列
当有重复子问题时候,递归会产生大量重复冗余操作,效率并不高。
比较好的方法是进行判重或者记录结果。
分治: 先把一个大问题分成很多小问题,小问题一一解决,
有点像分布式计算的思想。大家都是并行计算。
分成多个子问题后,可以在CPU的多个内核同时计算操作。如果是云计算,就是不同机器了。
分治的代码模版:
problem:要解决的问题
recursion terminator:递归的终止条件,分治就是用的递归的想法。
prepare data:将问题拆分成子问题
conquer subproblems:分别对子问题进行计算。
final result:将所有子问题合并。
实战
50. Pow(x, n)
https://leetcode-cn.com/problems/powx-n/
位运算的方法,n>>=1,n右移1位,相当于除以2.
实战
169. 多数元素
https://leetcode-cn.com/problems/majority-element/
算法通关40讲 笔记六(递归 分治)
最新推荐文章于 2024-07-24 20:44:05 发布