双指针是一种思想,这里的指针不要单纯理解为*...只是一种定位的意思....
双指针可以是快慢指针,比如这两个,也可以是分别在前后的,恩,这种也还没遇到.....
这里的两道题都是快慢的指针,比如Remove Duplicates from Sorted Array,去掉重复的元素,一个用来遍历,就是走的快的,还有一个是指向当前的更新的位置,如果快指针是新元素,慢指针就更新然后往前移一个,如果快指针重了,那快指针就接着走,慢指针不动。
Remove Duplicates from Sorted Array:
- 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:
- 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;
-
- }
- };