算法通关40讲 笔记六(递归 分治)

递归 :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/
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值