代码随想录 day2

今天来学习快慢指针的用法

快慢指针简单的说就是设置两个数组下标,快指针移动要比慢指针快。或者说用一个For代替两个for的作用。

正式的定义:

  • 快指针:寻找新数组的元素 ,新数组就是不含有目标元素的数组
  • 慢指针:指向更新 新数组下标的位置

例题1:

本题的暴力解法就是用两层for循环,外层寻找元素,内层移动数组元素,这显然具有较高的时间复杂度N^2

快慢指针法,我们可以想到快指针指向需移除元素时,应该越过该元素,不等时,由于一直移动后方元素覆盖先前元素,可以预见的是,最后一次覆盖,慢指针一定会停留在移除元素的下标。

例题2:

本题同样可以使用快慢指针法,我们的思想是快指针不等于0就交换元素,同时将慢指针前移。实质就是快指针寻找0元素的后一个位置,慢指针指向被移动的0.

例题3:

本题的思路是快指针寻找重复项的最后一项,将最后一项的后一项前移到慢指针的后一项,慢指针实质是一个扩容的数组下标

例题4:

此题,我的做法是先将字符串转为字符数组,在将可以填入的字符添加到stringbuffer中,最后对stringbuffer进行比较,快指针的作用是选中可以移动的元素,慢指针的作用是删除stringbuffer的元素。

例题5:

此题的要点是要注意到平方的最大值一定要放在数组的最右边,所以需要创建一个新数组来存放数据,但这里的快慢指针的用法有些不同,快指针指向的是最后,然后从两边进行比较。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值