题目描述:
学习记录:
思考可知,我们需要历遍数组来判断,用三个变量,result,index,value。result统计有几个不同的值,由于是升序数组,只需要看和上次的一不一样就行,如果不一样就++。index用来记录下一次存储的位置,由于数组历遍后就不再需要了,而且根据题目描述不需要考虑多余的部分,因此只需要在和上次不同的时候覆盖存储就行了。value记录上一次不一样的值,用来和nums[i]进行判断。简单题就是要一遍过!
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
int n=nums.size();
int result=0;//统计有几个不重复的值
int index=0;//下一个要存储的位置
int value=1e7;//目前元素的值
for(int i=0;i<n;i++)
{
if(nums[i]!=value)
{
result++;
value=nums[i];
nums[index]=value;
index++;
}
}
return result;
}
};
参考完题解后修改,可以省略value这个变量,减少用时和内存使用。
int n=nums.size();
int result=1;//统计有几个不重复的值
int index=1;//下一个要存储的位置
for(int i=1;i<n;i++)
{
if(nums[i]!=nums[i-1])
{
result++;
nums[index]=nums[i];
index++;
}
}
return result;
题解:
题解使用的是双指针,然后没有额外记录,其实和原思路中i和index的用法是一样的。但是他没有额外记录value的内容,也就是说,我们的方法是可以修改的,修改如上。
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;
}
};
作者:LeetCode-Solution
链接:https://leetcode.cn/problems/remove-duplicates-from-sorted-array/solution/shan-chu-pai-xu-shu-zu-zhong-de-zhong-fu-tudo/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。