尺_取_法

尺取法

  • 问题描述: 给定一个数组An ,对该数组中的元素进行目标值求和或者判断是否是回文串、某个长度的区间值和目标值的关系、数组去重等操作。
  • 常用情形: 通过两个指针对数组元素进行遍历,加快实现效率。

1、双向扫描

  • 描述: 给定一个数组An ,求该数组中是否满足两个元素之和等于m。
  • 解析:
    1. 暴力解:A0 作为目标元素开始进行遍历,从前往后遍历,查找是否存在元素能与目标元素相加等于m。时间复杂度O(n^2)
    2. 双向扫描: 先对数组进行排序,设定两个变量:i = 0, j = n - 1;通过二者对序列元素进行扫描,如果Ai + Aj > m,则j–,否则i++ 。这里需要对 i 进行多次的赋值,当i == n-1 时则意味着搜索结束。

2、回文串判断

  • 描述: 给定一个字符串An ,求该字符串是否为回文串
  • 解析: 设定两个变量: i = 0, j = n - 1 ,判断Ai == Aj 是否成立,直到i >= j。如果中间出现该等式不成立,则说明该字符串不是回文串,反之则该字符串为回文串。

3、同向扫描

  • 描述: 给定一个数组An ,求是否存在长度为k的子序列中,所以元素的乘积为m。
  • 解析: 设定两个指针: i = 0, j = 0,构建变量Sum = Sum * Ai+j ;判断Sum < mj < k && i <= n - k之前是否成立。如果成立则j++;否则Sum /= Ai,i++。

4、数组去重

  • 描述: 给定一个数组An ,对数组中元素进行去重。
  • 解析: 设定两个变量: i = 0, j = i + 1, k = n - 1,判断Ai == Aj 是否成立,如果成立,则将AjAk 互换位置。直到j >= ki++ ,当i >= k结束去重。

参考网站:https://blog.csdn.net/weixin_43914593/article/details/104090474
注: 文章借鉴了该网站中的部分内容,私信立删

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值