目录
题目要求:
要求:
判题标准:
示例:
解题思路:
方法:双指针
- 首先分别定义两个指针fast和slow代表数组元素的下标,两指针起始位置相同。
- 当fast和slow对应下标元素相等时,则执行:fast+1,slow不动,继续进行判断;
- 当fast和slow对应下标元素不相等时,则执行:slow+1对应的元素等于fast对应的元素,并且进行fast++;
- 最后,fast访问越界,循环结束,这样的话,0到最终slow所对应的元素就是所求。
图解:
具体操作:
- 定义快慢指针;
//fast 和 slow 起始位置相同 int fast=0; int slow=0;
- 遍历数组并进行判断。
while(fast<nums.size()){ //fast 和 slow 相等,fast 前进 if(nums[fast]==nums{slow]) { fast++; } //fast 和 slow 对应元素不相等时,fast 对应元素赋给 slow,并且 slow 前进 else{ nums[++slow]=nums[fast++]; } }
具体代码:
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
int fast=0;
int slow=0;
//fast和flow初始位置相同
while(fast<nums.size()){
if(nums[fast]==nums[slow]){
fast++;
//fast和slow相等时fast前进
}else{
//nums[slow]=nums[fast];
//slow++;
nums[++slow]=nums[fast++];
//fast和slow对应元素不相等时,fast对应元素赋值给slow对应元素,并且slow前进
}
}
return slow+1;
}
};