Fork me on GitHub
0%

leetcode26

题目

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

解题思路1

自己写的一个模拟删除过程,维护一个计数器够数了就减
时间复杂度O(N)
空间复杂度O(1)

代码

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;
}
};
  • 双指针思路
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    func removeDuplicates(nums []int) int {
    pos := 0
    for j:=0;j<len(nums);j++{
    if nums[pos]==nums[j]{
    continue
    }else{
    pos++
    nums[pos]=nums[j]
    }
    }
    return len(nums[:pos+1])
    }
觉得有帮助的请作者喝杯咖啡吧~