#include<iostream>
#include<vector>
#include<map>
#include<set>
using namespace std;
/*
删除有序数组中的重复项
给你一个 非严格递增排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。
考虑 nums 的唯一元素的数量为 k ,你需要做以下事情确保你的题解可以被通过:
更改数组 nums ,使 nums 的前 k 个元素包含唯一元素,并按照它们最初在 nums 中出现的顺序排列。nums 的其余元素与 nums 的大小不重要。
返回 k 。
*/
/*
思路:双指针
定义fast,slow两个指针,初始化都为下标1
fast指针指向当前遍历数组到达的下标位置
slow指针指向当前有序数组的下标位置
如果数组为空,则直接返回0
否则,fast指针从下标1遍历数组,已知数组为有序数组,那么如果nums[fast]!=nums[fast-1],则说明这之间没有出现重复元素
将这个值移动到有序数组中
即nums[slow]=nums[fast]
slow++;
否则说明有重复元素,则不进行上述操作
fast++;
数组从0到nums[slow-1]都是有序的
因此有序数组长度为slow
返回slow即可
*/
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
int n=nums.size();
if(n==0){
return 0;
}
int fast=1,slow=1;
while(fast<n){
if(nums[fast]!=nums[fast-1]){
nums[slow]=nums[fast];
slow++;
}
fast++;
}
return slow;
}
};
力扣数组刷题记录(26.删除有序数组中的重复项)
于 2024-08-04 22:48:07 首次发布