给你一个 升序排列 的数组 nums
,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。
在删除重复项之后有 k 个元素,那么 nums 的前 k 个元素应该保存最终结果。将最终结果插入 nums 的前 k 个位置后返回 k 。
不要使用额外的空间,在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
int n = nums.size();
if(n==0){
return 0;
}
//定义两个指针fast,slow快指针慢指针,fast表示遍历数组达到的下标的位置
//slow表示下一个不同元素要填入的下标的位置
int fast = 1,slow = 1;
while(fast<n){
if(nums[fast-1]!=nums[fast]){//说明nums[fast]与之前的元素不同
nums[slow] = nums[fast];
slow++;
}
fast++;
}
return slow;
}
};
语法问题:
vector<int> &nums:nums为一个引用,引用的内容是vector这个容器内部存放的整型数据
创建一维vector
vector<int> nums; //不指定长度
vector<int> nums(n); //指定长度
添加元素
nums.push_back(1); //直接在末端添加元素1
删除元素
nums.resize(num.size-i); //删除后面i个元素
nums.pop_back(); //删除最后一个元素
获取长度
nums.size();
判空
nums.empty();
nums.size()==0;