Array类型题型,一般而言题目中数据都有固定长度或者数量,通常使用双指针的方式解决此类问题。此处双指针不一定就是两个指针,同时也不一定是真实的指针,而且多数是数组下标的处理方式,主要是指使用双指针的思维,比如同向移动指针或者反向移动指针。
2 同向双指针方式使用下图表示同向双指针的思考方式:
同向双指针将数据分为三个区域:
- [0, i) 表示处理好的数据
- [i, j) 表示处理过但是不需要的数据
- [j, array.len) 表示接下来要处理的数据
那么一般此类题的通用步骤就是:
- 初始化下标i, j
- while (j < array.len)
(1)如果需要array[i], 可以array[i] == array[j], 然后向前移动i, 其中i是下一个要保存的位置
(2) 不需要array[j]的话,就跳过它,继续判断array[j+1], 而i不需要移动位置
如leetCode 26. 删除有序数组中的重复项
class Solution { public: int removeDuplicates(vector& nums) { if (nums.size() == 0) { return 0;
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)