26.remove-duplicates-from-sorted-array
题目描述
一个有序数组,把里面的重复的数字删掉
思路
用vector的迭代,双迭代器,遇到重复的数字就删掉
官方思路
双指针
使用快慢指针来记录遍历的坐标。
- 开始时这两个指针都指向第一个数字
- 如果两个指针指的数字相同,则快指针向前走一步
- 如果不同,则两个指针都向前走一步
- 当快指针走完整个数组后,慢指针当前的坐标加 1 就是数组中不同数字的个数
关键点
- 如果是数据是无序的,就不可以用这种方式了,从这里也可以看出排序在算法中的基础性和重要性。
- 注意nums为空时的边界条件。
很妙的是,快慢双指针解法通过交换前后的值去删除重复元素,题目要求的返回值是数组的长度,就刚好把后面的元素截掉了。
c++双指针解法:
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
if(nums.empty()) return 0;
int fast,slow;
fast=slow=0;
while(fast!=nums.size()){
if(nums[fast]==nums[slow]) fast++;
else {
slow++;
nums[slow]=nums[fast];
fast++;
}
}
return slow+1;
}
};