算法题方法总结(数组基础)

始、前言

有时候碰到一些以前做过的算法题,还是会忘记经典解法。

是不是在记录题目的同时,也应该记录一下不同的解法呢?


一、二分查找

场景:遍历有序数组

效果:使时间复杂度O(n)的遍历操作降低为O(logn)

注意“循环不变量”规则,是左闭右闭[left, right]还是左闭右开[left, right),每一轮循环结束都要处理好边界,循环的判断条件也需要对应调整。

mid时为了防止计算过程中的数值溢出,要使用mid = left + (right - left) / 2而不是mid = (left + right) / 2

二、双指针法(快慢指针法)

场景:双层循环

效果:一个循环内完成两个循环的工作,使时间复杂度O(n2)的遍历操作降低为O(n)

注意指针在不同情况下的不同跳转位置,以及两个指针之间的差异

三、滑动窗口

场景:双层循环

效果:不断调节窗口的起始位置和终止位置,使时间复杂度O(n2)的遍历操作降低为O(n)

滑动窗口也可以理解为双指针法的一种,但是需要指针之间的数据,所以称之为窗口。

重点是找到移动窗口起始位置和终止位置的条件