今天来学习快慢指针的用法
快慢指针简单的说就是设置两个数组下标,快指针移动要比慢指针快。或者说用一个For代替两个for的作用。
正式的定义:
- 快指针:寻找新数组的元素 ,新数组就是不含有目标元素的数组
- 慢指针:指向更新 新数组下标的位置
例题1:
本题的暴力解法就是用两层for循环,外层寻找元素,内层移动数组元素,这显然具有较高的时间复杂度N^2
快慢指针法,我们可以想到快指针指向需移除元素时,应该越过该元素,不等时,由于一直移动后方元素覆盖先前元素,可以预见的是,最后一次覆盖,慢指针一定会停留在移除元素的下标。
例题2:
本题同样可以使用快慢指针法,我们的思想是快指针不等于0就交换元素,同时将慢指针前移。实质就是快指针寻找0元素的后一个位置,慢指针指向被移动的0.
例题3:
本题的思路是快指针寻找重复项的最后一项,将最后一项的后一项前移到慢指针的后一项,慢指针实质是一个扩容的数组下标
例题4:
此题,我的做法是先将字符串转为字符数组,在将可以填入的字符添加到stringbuffer中,最后对stringbuffer进行比较,快指针的作用是选中可以移动的元素,慢指针的作用是删除stringbuffer的元素。
例题5:
此题的要点是要注意到平方的最大值一定要放在数组的最右边,所以需要创建一个新数组来存放数据,但这里的快慢指针的用法有些不同,快指针指向的是最后,然后从两边进行比较。