Fork me on GitHub
0%

leetcode26

题目

给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。
不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。nums 已按升序排列

解题思路1

自己写的一个模拟删除过程,维护一个计数器够数了就减

代码1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
if(nums.size()==0) return 0;
int len=nums.size();
int cnt=1;
for(int j=1;j<len;j++)
{
if(nums[j]==nums[j-1])
cnt++;
else
cnt=1;
if(cnt==2)
{
nums.erase(nums.begin()+j);
len--,j--,cnt--;
}
}
return len;
}
};

解题思路2

看完leetcode官方双指针后写的C++版本,但是还是干不过你们
截屏2021-04-08 上午10.48.20.png

代码2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
if(nums.size()==0) return 0;
int i=0,len=nums.size();
for(int j=1;j<len;j++)
{
if(nums[j]!=nums[i])
{
i++;
nums[i] = nums[j];
}
}
return i+1;
}
};
觉得有帮助的请作者喝杯咖啡吧~