LeetCode 26 删除有序数组中的重复项
1. 题目地址
https://leetcode.cn/problems/remove-duplicates-from-sorted-array/description/?envType=study-plan-v2&envId=top-interview-150
2. 题解
这道题由于要删除的是重复出现的元素,并且给定数组是单调递增的。那么我们可以发现一个规律:
给定两个元素x和y,y在x的后一个位置。那么,y一定大于等于x。换句话说,后面的元素只能比前面的元素等或大,不可能小。
所以,我们只需要去看后面的元素是否跟前一个元素相等即可。
这道题采用的是快慢指针的思想。具体操作如下:
1. 定义快慢指针low和fast。low指向第一个元素,而fast指向下一个元素。
2. 在遍历的过程中:
2.1 如果fast指向的元素跟low指向的元素不相等,那么arr[++low] = arr[fast]。fast++即可。
2.2 如果fast指向的元素跟low指向的元素相等,那么fast++,low不变即可。
3. 当fast走完之后,low + 1就是删除后数组元素个数。
3. 代码
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
int low,fast;
for(fast = 1,low = 0; fast < nums.size(); fast++){
if(nums[fast] != nums[low]){
nums[++low] = nums[fast];
}
}
return low + 1;
}
};
标签:26,指向,nums,++,元素,fast,low,数组,LeetCode
From: https://www.cnblogs.com/gao79135/p/17742574.html