双指针是一种思想,这里的指针不要单纯理解为*...只是一种定位的意思....
双指针可以是快慢指针,比如这两个,也可以是分别在前后的,恩,这种也还没遇到.....
这里的两道题都是快慢的指针,比如Remove Duplicates from Sorted Array,去掉重复的元素,一个用来遍历,就是走的快的,还有一个是指向当前的更新的位置,如果快指针是新元素,慢指针就更新然后往前移一个,如果快指针重了,那快指针就接着走,慢指针不动。
Remove Duplicates from Sorted Array:
[cpp] view plain copy class Solution { public: int removeDuplicates(vector<int>& nums) { int n=nums.size(); if(n<=1) { return n; } int id=1; for(int i=1;i<n;i++) { if(nums[i]!=nums[i-1]) { nums[id]=nums[i]; id++; } } return id; } };
remove element:
[cpp] view plain copy class Solution { public: int removeElement(vector<int>& nums, int val) { int id=0; int n=nums.size(); for(int i=0;i<n;i++) { if(nums[i]!=val) { nums[id++]=nums[i]; } } return id; } };