您的位置:首页 > 编程语言 > C语言/C++

LeetCode Remove Duplicates from Sorted Array(C语言O(n)解法)

2015-03-10 15:03 501 查看
题目:

Given a sorted array, remove the duplicates in place such that each element appear only once and return the new length.

Do not allocate extra space for another array, you must do this in place with constant memory.

For example,

Given input array A = [1,1,2],

Your function should return length = 2, and A is now [1,2].

简单解释一下题目,使用常量的空间复杂度去掉数组中重复的元素,本题使用O(n^2)的解法会超时。

解题思路:

解决本题有两个非常容易想到的思路一是不使用额外的数组空间,将重复的数字通过移位后面的覆盖前面的,完成去重工作,时间复杂度为O(n^2),另外一个思路是使用一个额外的数组空间,将重复数组复制到新的数组中遇到重复的只需复制一次。时间复杂度是O(n),空间复杂度为O(n)。

结合上面两个思路可以想到第三种思路,即用原来的数组作为新的数组空间进行复制(使用两个下标,一个指向原数组,一个指向新的数组),即循环一次如果该元素不是重复的元素则直接进行赋值,否则就移动原数组下标,跳过重复的元素,然后继续循环,时间复杂度为O(n),空间复杂度为O(1)。

AC代码如下:

int removeDuplicates(int A[], int n) {
int i,j;
j=0;
for(i=0;i<n;++i)
{
if(A[i]!=A[i+1])
{
A[j]=A[i];//元素不重复直接赋值
++j;
}
else
{
while(A[i]==A[i+1])
++i;//跳过重复元素
A[j]=A[i];
++j;
}
}

return j;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: