算法笔记重点(11)二分

学会二分应当掌握三种模板,即寻找相等的值,寻找第一个大于等于的值以及寻找第一个大于的值,大于等于的值与大于的值可组成一个左闭右开的存在性区间,找到多个相同的值。另外,初值的选取需要看返回的值范围。

浮点数二分也很重要,这里需要设置精度,当right-left<eps即可退出,返回mid。

此外还有二分答案,即侧重应用,比如装水问题和木棒切割问题。

快速幂非常实用,我们利用递归的思想,根据当b为奇数时,ab=a*ab-1,当b为偶数时ab=ab/2*ab/2,递归边界为a0=1。当然也可以用迭代的思想,这种思想个人觉得不太直观,利用a的二进制位来累计乘积,效率和递归差别不大。另外注意递归时不要写成binaryPow()×binaryPow()的形式,这样会导致算法直接退化成O(n)级。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章