算法---尺取法

把循环指针 i 、j 称为「扫描指针」,在尺取法中,这两个指针 i、j,有两种扫描方向:

反向扫描。i、j 方向相反,i 从头到尾,j 从尾到头,在中间相会。也可以把反向扫描的 i、j 指针称为「左右指针」。
同向扫描。i、j方向相同,都从头到尾,但是速度不一样,比如可以让 j 跑在 i 前面。也可以把同向扫描的 i、j 指针称为「快慢指针」,此时由于 i 和 j 速度不同,i 和 j 之间在序列上产生了一个大小可变的「滑动窗口」,这是尺取法的优势,有灵活的应用。
注意,用尺取法的最关键之处在于,两个指针 i、j在总体上只能有一个循环,例如:i 循环一遍,对应的 j 只能跟随 i 循环一遍。这样才能实现计算复杂度从 O(n^2)到 O(n)的优化。

反向扫描尺取法

//用while实现:
int i = 0, j = n - 1;
while (i < j) {      //i和j在中间相遇。这样做还能防止i、j越界
        ......       //满足题意的操作
        i++;         //i从头扫到尾
        j--;         //j从尾扫到头
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值