总结下算法基本功

递归

在我看来递归就是利用本身的程序调用栈来实现的。
比如f(n) = f(n-1) + 1 这个递归 实际上在计算机执行的时候是

f(0)
...
f(n-1)
f(n)

这也是递归和算法的基础。
当然我们也可通过手工栈来实现这个效果。
比如
中左右

root
root.left
root.right

中右左

root
root.right
root.left

左中右

root.left.left
root.left.right
root.left
root

avl高度计算

root.left.high
root.right.high
root.high

DP

DP实际上就是

//边界条件
//loop
//f(n) = f(n-x)
//return f(n)

一维数组还是二维数组

实际上没区别,一般来讲,一位数组的f(n)即为我们要求的值,如斐波那契数列。
多维,无非就是f(i,j)我们去递归i或者j,然后矩阵里的值即为我们最后的结果f(i,j)比如凑数问题。i为次数,j为目标值。

正反

一般来讲看逻辑,比如博弈问题,最后一个人入手方便就是倒叙。i=n;i>0;i--

回溯

我思考了半天什么是回溯,实际上就是从根出发的一棵树而已。
每个节点有个条件公式f() bool 不满足则砍掉。
最后求所有子叶节点罢了。

分治

典型的分治就是快速排序,说白了,快速排序就这么想:
小的左边,大的右边,值放中间。
小的左边,大的右边,值放中间。
小的左边,大的右边,值放中间。
小的左边,大的右边,值放中间。

1372864
小的左边,大的右边,值放中间。
(132)4(786)
小的左边,大的右边,值放中间。
((1)2(3)) 4 (786)
小的左边,大的右边,值放中间。
((1)2(3)) 4 (6(78))
小的左边,大的右边,值放中间。
((1)2(3)) 4 (6(7(8)))

常见替换逻辑

求最大,求最小,±*/mod, +n >< =,不同速度指针下等于

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值