删除有序数组中的重复项
题目出处: https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array/
思路:双指针
left | right | ||||||
0 | 1 | 1 | 1 | 2 | 2 | 3 | 3 |
left和right指向的值不一样,left往右移动一格,然后把right指向的值赋给left指向的值,right往右移动一格。
left和right指向的值一样,right往右移动一格。
返回left+1,即为新数组的长度。
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
int n = nums.size();
if(n <= 1){
return n;
}
int left = 0;
for(int right = 1; right < n; ++right){
if(nums[left] != nums[right]){
nums[++left] = nums[right];
}
}
return left+1;
}
};
移除元素
题目出处:https://leetcode-cn.com/problems/remove-element/
思路:双指针,指针left指向下一个将要赋值的位置,右指针指向当前要处理的元素。
如果右指针指向的值是val,则它不能再输入数组内,因此左指针不动,右指针右移动一位。
如果右指针指向的值是val,则它是输入数组的元素,因此将右指针指向的元素赋值给左指针指向的位置,然后将左右指针同时向右移动。
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
int n = nums.size();
int left = 0;
for (int right = 0; right < n; right++) {
if (nums[right] != val) {
nums[left] = nums[right];
left++;
}
}
return left;
}
};